SQL数据库--查询

版权声明:版权归本作者所有,如需转载请务必注明出处及作者 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;

猜你喜欢

转载自blog.csdn.net/qq_35654046/article/details/87872165