欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关系型数据库查询

程序员文章站 2022-06-02 18:27:00
...

最近回顾许久以前的基础知识,对关系型数据库的查询的语法做了一些总结,
好了,话不多说,总结结果如下:
1,简单查询:
格式:SELECT 列名1,列名2,… FROM 表名 [WHERE 条件] [ORDER BY 列名 [ASC|DESC]] [LIMIT 起始索引,数据条数];
2,取别名:
SELECT 列名1 AS “别名1”,列名2 AS “别名2”,… FROM 表名;
例子:SELECT sname AS “姓名”,tel AS “电话” FROM student;

注:AS关键字可以省略

3,限制行数(一般用于分页):
SELECT 列名1,列名2,… FROM 表名 LIMIT [起始索引,]数据条数
4,结果去重:
SELECT DISTINCT 列名1,列名2,… FROM 表名;
例:SELECT DISTINCT id,sex FROM student;

注:只有当查询结果的所有列值相同时,才认为是重复数据被去掉,不是真的某一列查询结果;

5,多条件查询
SELECT 列名1,列名2,… FROM 表名 WHERE 列名1=值1 AND|OR 列名2=值2;
例子: SELECT sname,tel FROM student WHERE sex=“女” AND age<25;
SELECT 列名1,列名2,… FROM 表名 WHERE 列名1 BETWEEN 值1 AND 值2;
例子:SELECT sname FROM student WHERE age BETWEEN 25 AND 30;
6,集合查询
SELECT 列名1,列名2,… FROM 表名 WHERE 列名1 IN (值1,值2,…);
例子:SELECT * FROM student WHERE sname IN (“张三”,“王八”);
7,模糊查询
SELECT 列名1,列名2,… FROM 表名 WHERE 列名1 LIKE “通配符表达式”;

扩展:通配符
	"_":任意一个字
	"%":任意长度的字符串;

例子1:SELECT * FROM student WHERE sname LIKE “王_”
例子2:SELECT * FROM student WHERE sname LIKE “王%”;

8,null查询
SELECT 列名1,列名2,… FROM 表名 WHERE 列名1 IS NUL
例子:SELECT * FROM student WHERE sname IS NULL
9,常量列
SELECT 列名1,列名2,…,“常量值” AS “常量列名” FROM 表名;
例子:SELECT id,sname,“四川大学” AS “学校名称” FROM student
10,查询结果排序
SELECT 列名1列名2FROM 表名 ORDER BY 列名1 [ASC|DESC],列名2 [ASC|DES]…

ASC:默认排序,升序 DESC:降序

11,聚合统计函数
COUNT(DISTINCT 列):统计结果集或者组内的数据行数
AVG;统计结果集或者组内中指定列的平均值
SUM:统计结果集或者组内中指定列的总和
MAX:统计结果集或者组内中指定列的最大值
MIN:统计结果集或者组内中指定列的最小值

注意:COUNT(DISTINCT 列)与COUNT()区别:
1、COUNT(DISTINCT 列)可以对指定列去重后计数;
2、COUNT(DISTINCT 列)如果指定列值为NULL,该行不会作为计数目标,COUNT(
)会

注意:使用了聚合函数或者分组时,SELECT查询不要出现普通列,但是可以出现:
1.分组的依据列
2.为每个分组返回一个值的表达式,如聚合函数

12,分组
SELECT 列名1列名2FROM 表 WHERE 条件 GROUP BY 列名1列名2HAVING 条件
将结果集数据按分组依据列的值进行分组(值相同为一组),对组按HAVING的条件进行筛选
13,各字句执行顺序
1、首先执行FROM子句,将FROM子句中的表做为中间表;
2、如果有WHERE子句,则根据其中的过滤条件,从中间表中去掉不满足过滤条件的行。
3、根据GROUP BY子句中指定的分组列,对中间表中的数据进行分组。
4、为每个组计算SELECT子句聚合函数的值,并为每组生成查询结果中的一行。
5、如果有HAVING子句,则根据HAVING子句的过滤条件,分组计算聚合计算的结果再次过滤。
6、如果有ORDER BY子句中,则根据ORDER BY子句中的列,对结果集进行排序。
7、如果有LIMIT,只留下符合规则的数据条数