【数据工程】8. SQL 入门教程
SQL 入门教程
基本查询:SELECT
SELECT * FROM Students;
取出所有行和列。
条件过滤:WHERE
SELECT name, age FROM Students WHERE age > 18;
先过滤,再返回结果。
排序:ORDER BY
SELECT name, age FROM Students ORDER BY age DESC;
按照年龄从大到小排序。
分组:GROUP BY
SELECT class, COUNT(*) FROM Students GROUP BY class;
统计每个班级人数。
聚合函数
SELECT MAX(age) FROM Students; -- 最大值
SELECT MIN(age) FROM Students; -- 最小值
SELECT AVG(age) FROM Students; -- 平均值
SELECT SUM(age) FROM Students; -- 总和
SELECT COUNT(*) FROM Students; -- 行数
示例:
SELECT station, obsdate, sensor, obsvalue, site, stnownerFROM Stations NATURAL JOIN MeasurementsWHERE Stations.site = 'Murray River at Swan Hill'ORDER BY obsdate, sensor;
HAVING 分组过滤
SELECT uosCode, COUNT(*) FROM EnrolmentsGROUP BY uosCode
HAVING COUNT(*) >= 2;
WHERE
:作用在分组之前,逐行过滤HAVING
:作用在分组之后,整组过滤
外连接:OUTER JOIN
三种外连接
- LEFT OUTER JOIN:保留左表所有数据,右表不足填 NULL
- RIGHT OUTER JOIN:保留右表所有数据,左表不足填 NULL
- FULL OUTER JOIN:保留两边所有数据,不足的填 NULL
示例:
SELECT name AS "language"FROM language LEFT OUTER JOIN Film USING (language_id)GROUP BY name
HAVING COUNT(film_id) = 0ORDER BY name;
找到没有被任何电影使用的语言。
总结对照
WHERE vs HAVING
- WHERE:在分组之前过滤单行数据
- HAVING:在分组之后过滤整组数据
INNER JOIN vs OUTER JOIN
- INNER JOIN:只返回两表匹配上的行
- LEFT OUTER JOIN:保留左表全部,右表不足填 NULL
- RIGHT OUTER JOIN:保留右表全部,左表不足填 NULL
- FULL OUTER JOIN:保留两表全部,不足部分填 NULL