关系型数据库查询
最近回顾许久以前的基础知识,对关系型数据库的查询的语法做了一些总结,
好了,话不多说,总结结果如下:
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,只留下符合规则的数据条数