📅  最后修改于: 2023-12-03 15:05:18.132000             🧑  作者: Mango
在关系型数据库中,通常数据分散在多个表中。因此,当需要获取某些数据时,需要从多个表中进行查询。在 SQL 中,可以通过多种方式从多个表中选择数据。下面将介绍一些常用的方法。
在 SQL 中,使用 SELECT
语句来选择数据。从多个表中选择数据的基本语法如下:
SELECT 列名列表
FROM 表1
JOIN 表2
ON 连接条件
[WHERE 筛选条件]
[GROUP BY 分组列]
[HAVING 分组筛选条件]
[ORDER BY 排序列]
该语法中,涉及到 several keywords:
SELECT
: 指定要显示的列。FROM
: 指定要查询的表。JOIN
: 将多个表连接起来。ON
: 指定连接条件。WHERE
: 过滤不符合条件的记录。GROUP BY
: 将结果分组。HAVING
: 对分组后的结果进行筛选。ORDER BY
: 按指定顺序对结果进行排序。各个关键字的详细说明如下。
JOIN
语句JOIN
语句用于将多个表连接起来。JOIN
有多种类型,包括:
INNER JOIN
: 获取两个表中的相匹配的行。LEFT JOIN
: 获取左侧表中的所有行以及匹配的右侧表中的行。RIGHT JOIN
: 获取右侧表中所有的行以及匹配的左侧表中的行。FULL JOIN
: 获取两个表中所有的行。JOIN
语句的基本语法如下:
SELECT 列名列表
FROM 表1
JOIN 表2
ON 连接条件
连接条件通常是两个表中的某些列。
以下是 INNER JOIN
的示例:
SELECT t1.id AS book_id, t1.name AS book_name, t2.name AS author_name
FROM books t1
INNER JOIN authors t2
ON t1.author_id = t2.id
以上语句查询了两个表:books
和 authors
。其中,books
表包含所有的书籍信息,authors
表包含所有的作者信息。INNER JOIN
语句将两个表连接起来,连接条件是书籍的作者 ID 与作者的 ID 相等。结果中包含了书籍的 ID、书名以及作者的名字。
WHERE
语句WHERE
语句用于筛选不符合条件的记录。在 JOIN
和 WHERE
语句中,可以使用多种符号:
=
: 判断两个列是否相等。<
: 判断某列是否小于另一个列。>
: 判断某列是否大于另一个列。<=
: 判断某列是否小于等于另一个列。>=
: 判断某列是否大于等于另一个列。<>
或 !=
: 判断两个列是否不相等。LIKE
: 判断某列是否与指定模式匹配。BETWEEN
: 判断某列是否在指定的两个值之间。IN
: 判断某列是否在指定的值列表中。AND
: 判断两个条件是否都为真。OR
: 判断两个条件是否至少有一个为真。以下是 WHERE
的示例:
SELECT t1.id AS book_id, t1.name AS book_name, t2.name AS author_name
FROM books t1
INNER JOIN authors t2
ON t1.author_id = t2.id
WHERE t1.publish_year > 2010
以上语句查询了所有发行日期在 2010 年后的书籍,并且将结果按照书籍 ID、书名以及作者名字的顺序排列。
GROUP BY
语句GROUP BY
语句用于将结果分组。通常与聚合函数(如 COUNT
、SUM
、AVG
等)一起使用。以下是 GROUP BY
语句的示例:
SELECT t2.name AS author_name, COUNT(*) as book_count
FROM books t1
INNER JOIN authors t2
ON t1.author_id = t2.id
WHERE t1.publish_year > 2010
GROUP BY t2.name
以上语句查询了所有发行日期在 2010 年后的书籍,并且统计了每位作者所创作的书籍数量。结果按照作者名字进行分组,并按照作者名字的顺序排列。
HAVING
语句HAVING
语句用于对分组后的结果进行筛选。通常与聚合函数一起使用。以下是 HAVING
语句的示例:
SELECT t2.name AS author_name, COUNT(*) as book_count
FROM books t1
INNER JOIN authors t2
ON t1.author_id = t2.id
WHERE t1.publish_year > 2010
GROUP BY t2.name
HAVING COUNT(*) > 3
以上语句查询了所有发行日期在 2010 年后的书籍,并且统计了每位作者所创作的书籍数量。结果按照作者名字进行分组,并筛选出创作数量大于 3 本的作者。最终的结果按照作者名字的顺序排列。