学习目标
- 掌握简单查询,会使用SELECT查询所有字段和指定的字段
- 掌握按条件查询,会使用运算符及不同的关键字进行查询
- 掌握高级查询,会使用聚合函数查询、分组查询等
- 学会为表和字段起别名
简单查询
SELECT语句
基本语法:
SELECT [DISTINCT] * | {字段名1,字段名2....}
FROM 表名
[WHERE 条件表达式1]
[GROUP BY 字段名 [HAVING 条件表达式2]]
[ORDER BY 字段名 [ASC|DESC]]
[LIMIT [OFFSET] 记录数]
各个子句的含义:
(1) SELECT [DISTINCT] * | {字段名1,字段名2…}:表示要查询的字段;*表示所有的字段;DISTINCT是看可选参数,用来去除重复数据。
(2)FROM 表名:指定所要查询的表。
(3)WHERE 条件表达式1:where是可选参数,用来指定查询条件。
(4)GROUP BY 字段名 [HAVING 条件表达式2]:GROUP BY是可选参数,用来将查询结果按照指定结果进行分组;HAVING 条件表达式2:对分组后的结果进行过滤。
(5)ORDER BY 字段名 [ASC|DESC]:对查询结果按照指定字段进行排序,默认为升序,ASC表示升序,DESC表示降序。
(6)LIMIT [OFFSET] 记录数:LIMIT用来限制查询结果的数量,OFFSET表示偏移量,偏移量为0,从查询结果的第一条开始记录;记录数表示返回查询记录的条数。
查询所有字段
SELECT * FROM class
结果显示:
查询某个特定字段
SELECT id,stu_name FROM class
结果显示:
按条件查询
- 带关系运算符的查询
基本语法:
SELECT * FROM student WHERE id=2
SELECT * FROM student WHERE grade > 80
结果显示:
带IN的查询
查询stu_name在 (‘zhang’,‘zhao’,‘tong’)中的所有记录;不存在:使用not in
SELECT * FROM student WHERE stu_name IN ('zhang','zhao','tong')
结果:
带BETWEEN_AND的查询
判断某个字段的值是否在指定的范围之内。
查询id在1和2之间的所有记录不在某个范围内,使用NOT BETWEEN…AND…
SELECT * FROM student WHERE id BETWEEN 1 AND 2
结果:
空值查询
SELECT * FROM student WHERE id IS NOT NULL
SELECT * FROM student WHERE id NOT NULL
- 带like的查询
使用like对字段进行模糊匹配
SELECT * FROM student WHERE id (NOT) LIKE "匹配的字符串"
通配符
%:c% 匹配以c开头的字符串;c%g 以c开头以g结尾
_:只能匹配单个字符;w_o 以w开头o结尾且中间只有一个字符
带and和or的关键字
and:同时满足条件一和条件二
SELECT * FROM student WHERE id=1 AND grade=90
or:满足条件一或条件二
SELECT * FROM student WHERE id=1 or id=3
复杂查询
聚合函数
统计某个字段的最大值、最小值、平均值等的函数。
COUNT():返回某列的行数
SUM():返回某列的和
AVG():返回某列的平均值
MAX()\MIN():返回某列的最大最小值
- 语法格式:
SELECT 函数(*) FROM 表名
对结果进行排序
- 语法格式
# 对成绩按照从大到小排列
SELECT * FROM student ORDER BY grade DESC
结果:
分组查询
按照某个字段或者多个字段中的值进行分许,值相同的为一组,通常与聚合函数一起使用才有意义。
计算男女生人数
SELECT count(*),gender FROM student GROUP BY gender
为表和字段取别名
SELECT * FROM student AS a WHERE a.id=1
SELECT id as stu_id,stu_name FROM student AS a WHERE a.id=1
# 查询结果中id变为stu_id,但是原表中不变
结果: