-
基本查询
SELECT * FROM <表名>
使用
SELECT * FROM students
时,SELECT
是关键字,表示将要执行一个查询,*
表示“所有列”,FROM
表示将要从哪个表查询 - 条件查询
SELECT * FROM <表名> WHERE <条件表达式>
条件表达式可以用
<条件1> AND <条件2>
表达满足条件1并且满足条件2;<条件1> OR <条件2>
表示满足条件1或者满足条件2;NOT <条件>
,表示“不符合该条件”的记录。而NOT class_id = 2
等价于class_id <> 2。
- 投影查询
SELECT 列1, 列2, 列3 FROM <表名> //返回某些列的数据
SELECT 列1 别名1, 列2 别名2, 列3 别名3 FROM <表名> //返回某些列的数据并修改列名 - 排序
SELECT id, name, gender, score FROM students ORDER BY score DESC, gender;
ORDER BY score表示按score排序,DESC表示倒序,gender表示如果score相同时按gender升序排序(默认ASC)。如果带有WHERE,则ORDER BY需要放在WHERE后面。
- 分页查询
-- 查询第1页 SELECT id, name, gender, score FROM students ORDER BY score DESC LIMIT 3 OFFSET 0;
- 聚合查询
-- 使用聚合查询并设置结果集的列名为num: SELECT COUNT(*) num FROM students;
使用聚合查询时还可以使用WHERE进行条件查询。除了COUNT(),还有SUM() AVG() MAX() MIN()等聚合函数。CEILING()表示向上取整,FLOOR()向下取整。
聚合查询用于分组时:SELECT class_id, COUNT(*) num FROM students GROUP BY class_id;
将会显示3个结果,在SELECT后加入字段class_id,可以分组统计出class_id各个count值。
此外,分组前还可以进行条件筛选:SELECT class_id, COUNT(*) num FROM students WHERE score > 90 GROUP BY class_id;
分组后,还可以对分组进一步筛选:
SELECT class_id, COUNT(*) num FROM students WHERE score > 90 GROUP BY class_id HAVING COUNT(*) > 2;
WHERE和HAVING的区别:a.where在分组前限定,如果不符合要求,则不参与分组;having在分组之后限定,如果不符合要求,将不会被查询出来。b.where后不可跟聚合函数,having后可以进行聚合函数的判断。
- 连接查询
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score FROM students s INNER JOIN classes c ON s.class_id = c.id;