版权声明:版权归本作者所有,如需转载请务必注明出处及作者 https://blog.csdn.net/qq_35654046/article/details/87872165
参考资料 -- https://www.liaoxuefeng.com/
-
基本查询
查询student表的所有数据
SELECT * FROM students
-
条件查询 (NOT AND OR)
不是2班的,而且成绩小于80分或者大于90分的
SELECT * FROM students
WHERE NOT class_id = 2
AND (score < 80 OR score > 90);
-
投影查询(按列名查询)
SELECT id,score,name FROM students
WHERE NOT class_id = 2
AND (score < 80 OR score > 90);
-
排序查询(默认递增排序ASC,递减需要加上关键字DESC)
SELECT id,score,name FROM students
WHERE NOT class_id = 2
AND (score < 80 OR score > 90)
ORDER BY score ASC;
--ORDER BY score DESC;
-
分页查询
按3行1页显示,并去掉前3行
SELECT id, name, gender, score
FROM students
ORDER BY score DESC
LIMIT 3 OFFSET 3;
-
聚合查询(COUNT,AVG,SUM,MAX,MIN)
按3行1页显示,一共有多少页。
SELECT CEILING(COUNT(*) / 3) page_num FROM students;
所有男生的平均成绩。
SELECT AVG(score) score FROM students
WHERE gender = 'M';
所有男生的总成绩。
SELECT SUM(score) score_sum FROM students
WHERE gender = 'M';
-
分组聚合
每个班分别有多少人
SELECT class_id, COUNT(*) num FROM students
GROUP BY class_id;
每个班的平均成绩
SELECT class_id, AVG(score) FROM students
GROUP BY class_id;
每个班男女同学的平均成绩
SELECT class_id, gender, AVG(score) FROM students
GROUP BY class_id, gender
ORDER BY class_id ASC, gender ASC;
-
多表查询(笛卡尔查询)
可以给每个表设置一个别名(student -> s)
同时,两个表中可能存在相同名字的列,需要给列重命名(s.id -> sid)
SELECT
s.id sid,
s.name,
s.gender,
s.score,
c.id cid,
c.name cname
FROM students s, classes c
WHERE s.gender = 'M' AND c.id = 1;
-
连接查询
内连接 -- INNER
外连接 -- OUTER(RIGHT LEFT FULL)
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
--INNER JOIN classes c
--RIGHT OUTER JOIN classes c
--LEFT OUTER JOIN classes c
FULL OUTER JOIN classes c
ON s.class_id = c.id;