SQL 中的子查询、联结查询和组合查询

子查询

子查询即嵌套在其他查询中的查询。一般有两种用法,一种是在 WHERE 字句中使用其来限定范围,达到过滤的效果,一般可与 IN 搭配使用。另一种用法作为计算字段使用子查询,即在 SELECT 语句中使用子查询,将子查询的结果作为一列的结果。如下例所示:

1
2
3
4
5
6
SELECT AVG(score) AS average_score,
(SELECT AVG(score)
FROM score
INNER JOIN subject ON score.subject_id = subject.id
WHERE subject.subject = " 语文 ") AS average_chinese_score
FROM score;

子查询的缺点在于过多的子查询将会影响性能,而且将导致代码可读性不佳。

联合查询

联合查询通常用于需要查看的数据来自多张表,使用 JOIN 语句将多张表连接起来,使用 ON 语句将两张表中相关联的列连接起来。

常用的联合查询包括内连接和外连接。内连接也被称为等值连接,只有同时存在两张表中的记录才会被保留。外连接中两张的表的记录都会被保留,能匹配上的则正确匹配,不能匹配上的将会被设置成 NULL。外连接分为左连接和右连接,左连接中JOIN 语句左边的表中的记录将会被保留,右连接则反之。

组合查询

组合查询通常用来将两个或者两个以上具有相同结构的列、表达式或者聚集函数的查询结果组合到一起,默认会排除重复值。使用关键词 UNION。只能在最后使用一次ORDER BY 语句对结果进行排序。

可以认为,组合查询是将查询结果在行方向上进行拼接,而联合查询是将不同的表在列方向上进行拼接后再进行查询。