2.1 单表查询语句
SELECT 属性列表 FROM 表名和视图列表 [WHERE 条件表达式1] [GROUP BY属性名1[HAVING 条件表达式2]] [ORDER BY 属性名2[ASC|DESC]] |
-- DESC表示降序,ASC表示升序,是默认参数,可以不写。
-- 如果有GROUP BY子句,就按照“属性名1”指定的字段进行分组;如果GROUP BY子句后带着HAVING关键字,那么只有满足“条件表达式2”中指定的条件的才能够输出。GROUP BY子句通常和COUNT()、SUM()等聚合函数一起使用。
-- WHERE子句常用的查询条件的很多种
查询条件 | 符合或关键字 |
比较 | =、<、<=、>、>=、!=、<>、!>、!< |
指定范围 | BETWEEN AND、NOT BETWEEN AND |
指定集合 | IN、NOT IN |
匹配字符 | LIKE、NOT LIKE |
是否为空值 | IS NULL、IS NOT NULL |
多个查询条件 | AND、OR |
1.使用IN关键字进行查询。SELECT语句的代码如下:
SELECT * FROM student WHERE stuid IN(2,3,4); |
2. 使用BETWEEN AND关键字进行查询,查询条件是出生日期字段的取值从“1995-07-13~1995-07-15”。SELECT语句的代码如下:
SELECT * FROM student WHERE birthday BETWEEN ‘1995-07-13’ AND ‘1995-07-15’; |
3. 使用BETWEEN AND关键字进行查询,查询条件是出生日期字段的取值从“1995-07-13~1995-07-15”。SELECT语句的代码如下:
SELECT * FROM student WHERE birthday BETWEEN ‘1995-07-13’ AND ‘1995-07-15’; |
4. 查询电话号码为空的学生信息
SELECT * FROM student WHERE phone IS NULL
5.排序 SELECT * FROM TABLE_NAME
[WHERE 条件]
ORDER BY 字段1 [ASC/DESC] [,字段2 [ASC/DESC]…]
2.2 分组查询
-- 常用聚合函数有:
SUM 求和 , AVG 求平均值 ,MAX和MIN 求最大值/最小值 , COUNT 计数
SELECT SUM(COLUMN)FROM TABLE_NAME [WHERE…]
SELECT AVG(COLUMN) FROM TABLE_NAME [WHERE…]
SELECT AVG(COLUMN) FROM TABLE_NAME [WHERE…]
SELECT COUNT(COLUMN/*)FROM TABLE_NAME [WHERE…]
COUNT函数的参数,除了可使用列名,还可以直接使用*通配符。
-- DISTINCT语句对重要数据进行过滤,去掉重复的数据
如 SELECT DISTINCT subid FROM score
经过DISTINCT语句对重复项进行过滤后,在得到的结果中数据完全相同的数据记录已补合并为一条。但DISTINCT有较大的限制,只能对多条完全相同的数据进行合并。除合并的指定列之外,无法获取到其它列数据。
分组统计是使用GROUP BY关键字将查询结果按照某个字段或多个字段进行分组。分组时,指定字段中值相等的被认为是一组,在查询结果中的体现是指定字段相等的情况下,只保留一条记录。其语法结构如下:
SELECT <字段列表> [聚合函数]
FROM 表
[WHERE] 条件
GROUP BY <字段列表>
分组统计可根据GROUP BY所指定的字段进行合并,全并时指定字段完全相同的记录被合并为一条。
例子:获取各个科目的平均成绩
SELECT *,AVG(score) FROM score GROUP BY subid
按照科目的编号分组后,每一个科目是一组,每组的平均的成绩
-- 使用HAVING对分组过滤
SELECT <字段列表> [聚合函数]
FROM 表
[WHERE] 条件
GROUP BY <字段列表>
HAVING 条件
总结一:HAVING 与 WHERE区别
相同点:HAVING和WHERE语句都是对查询结果进行筛选,其后都可跟条件判断。
不同点:1)HAVING只能用于GROUP BY后,WHERE不可用于GROUP BY后。
2)HAVING 后可使用聚合函数,WHERE不可以
3)作用时机不同,WHERE对表数据进行筛选,HAVING对分组后的数据进行筛选。
总结二:查询语句执行顺序:WHERE -> GROUP BY-> 聚合-> HAVING -> ORDER BY -> LIMIT