6. MIN
MIN() 返回数值列中的最小值。对于文本列,MIN() 返回按字母顺序的第一个值。此示例返回营收最低的电影。
SELECT MIN(revenue) AS minimum_revenue,
FROM films;
7. MAX
MAX() 返回数值列中的最大值。对于文本列,MAX() 返回按字母顺序的最后一个值。此示例返回营收最高的电影。
SELECT MAX(revenue) AS maximum_revenue,
FROM films;
8. SUM
SUM() 返回数值的总和。此示例返回 films 表中所有电影的总营收。
SELECT SUM(revenue) AS total_revenue
FROM films;
9. AVERAGE
AVERAGE 计算某列的算术平均值。此示例返回 films 表中所有电影的平均营收。
SELECT AVERAGE(revenue) AS average_earned
FROM films;
10. WHERE
WHERE 子句用于筛选满足特定条件的行。例如,下面我们筛选出营收超过 5 亿美元的电影。
SELECT revenue
FROM films
WHERE revenue > 500000000;
还可以使用其他条件运算符进行筛选,如 <、>、=>、<=、== (等于)、!= (不等于)。
11. HAVING
HAVING 子句与 WHERE 类似,但它只能与聚合函数一起使用,而 WHERE 不能。例如,在下面的查询中,我们选择电影数量至少为 50 的各电影类型:
SELECT movie_name, director, date, COUNT(genre)
FROM films
GROUP BY genre
HAVING COUNT(genre) >= 50;
这是另一个示例:按年龄分级对电影进行分组,并仅选择平均营收超过 1 亿的分级:
SELECT movie_name, director, date, revenue
FROM films
GROUP BY age_rating
HAVING AVERAGE(genre) >= 100;
12. AND
AND 运算符用于筛选同时满足多个条件的行。下面的示例中,我们将筛选出营收超过 5 亿美元的英文电影。
SELECT *
FROM films
WHERE revenue > 500000000 AND
language == "English";
13. OR
OR 是另一种条件运算符,若由 OR 分隔的任一条件为真即可返回行。此示例返回营收低于 1 亿美元的英文电影或营收超过 5 亿美元的法文电影。
SELECT *
FROM films
WHERE (revenue < 100000000 AND language == "English") OR
(revenue > 500000000 AND language == “French”);
14. BETWEEN
BETWEEN 允许您在某个范围内筛选行,使 WHERE 子句更简洁、易读。在下面的示例中,我们选择 2020 到 2022 年间上映的所有电影。
SELECT *
FROM films
WHERE date BETWEEN 2020 AND 2022;
15. IN
IN 运算符是多个 OR 语句的简写。此示例返回在 1998、1966、2001 和 2012 这些年份上映的所有电影。
SELECT movie_name, date, revenue
FROM films
WHERE date IN (1998, 1966, 2001, 2012);
16. LIKE
LIKE 运算符允许您使用称为通配符的特殊字符串在文本列中搜索模式。通配符可帮助您查找符合特定模式的文本字符串。例如,在 director 列上使用 “A% W%” 通配符,将找到所有名字以 A 开头、姓氏以 W 开头的导演。
SELECT *
FROM films
WHERE director LIKE "A% W%";
17. GROUP BY
GROUP BY 可按列值对行分组。GROUP BY 通常与 COUNT、MIN、MAX、AVERAGE 等聚合函数一起使用。下面的示例计算每种电影类型的平均营收。
SELECT AVERAGE(revenue), movie_name, director, date
FROM films
GROUP BY genre;
我们也可以使用 MIN、MAX 或 COUNT(revenue) 来找出每种类型中营收最低、最高或电影数量。请注意,如果不与聚合函数一起使用,GROUP BY 语句在实际效果上不会影响查询。
18. ORDER BY
ORDER BY 可根据某列的值对行进行排序。您可以通过添加 ASC 或 DESC 指定升序(默认)或降序。此示例按营收升序排序。
SELECT *
FROM films
ORDER BY revenue ASC;
19. UPDATE
UPDATE 用于更改现有表中个别单元格的值。它与 SET 关键字一起使用。此示例将导演从 “J. Whedon” 更新为 “Joss Whedon”。
UPDATE films
SET director = "Joss Whedon"
WHERE director = "J. Whedon"
在编写 UPDATE 语句时,WHERE 子句至关重要。否则,上述查询会把所有电影的导演都改成 Joss Whedon。
20. ALTER TABLE
您可以使用 ALTER TABLE 语句修改表及其列的属性(而非实际单元格值)。例如,更改列名、添加新列、删除列或更改其数据类型。下面的示例演示删除 date 列并添加 age_rating 列。
ALTER TABLE films
DROP COLUMN date;
ALTER TABLE films
ADD COLUMN age_rating;
21. CREATE TABLE
CREATE TABLE 在数据库中创建新表。下面我们创建一张名为 “libraries” 的表,包含四列——一个名为 id 的整型列、一个名为 name 的字符型列、一个名为 version 的字符型列,以及一个名为 num_downloads 的整型列。
CREATE TABLE libraries (
lib_id int,
name varchar(100),
version varchar(100),
num_downloads int
)
22. INSERT INTO
INSERT INTO 语句可用于向表中添加新行。在此示例中,我们将电影 “Doctor Strange” 添加到 films 表中。
INSERT INTO films (movie_name, director, revenue, date, genre, language)
VALUES ("Doctor Strange 2", “Sam Raimi”, 409000000, 2022, “Action”, “English”)
23. INNER JOIN
INNER JOIN 命令选择在两张表中具有匹配值的行。例如,在下面的查询中,我们在共有的 date 列上连接 films 与 soundtracks 两张表,从而返回在同一年发行的电影与原声带。
SELECT *
FROM films
INNER JOIN soundtracks
ON films.date = soundtracks.date
LIMIT 10;
24. LEFT JOIN
LEFT JOIN 会保留左表中的所有原始记录;若在右表的连接字段中找不到匹配,将为相应列返回缺失值。
SELECT *
FROM films
LEFT JOIN soundtracks
ON films.date = soundtracks.date
LIMIT 10;
25. RIGHT JOIN
RIGHT JOIN 会保留右表中的所有原始记录;若在左表的连接字段中找不到匹配,将为相应列返回缺失值。
SELECT *
FROM films
LEFT JOIN soundtracks
ON films.date = soundtracks.date
LIMIT 10;
SQL 命令速查表
想进一步学习 SQL,请查看以下资源:
什么是 SQL?
SQL(结构化查询语言)是一种在数据库中检索大规模数据并返回特定信息以供分析的强大工具。学习 SQL 是进入数据领域的基础技能,无论您想从事业务分析师、数据分析师、数据科学家还是数据工程师的工作。
在本教程中,您将了解 25 个最常用的 SQL 命令,足以覆盖大多数与数据库相关的任务。
SQL 命令与示例
示例表
在整个教程中,我们将使用
films和 soundtracks 两张表。films
movie_name
director
revenue
date
genre
language
Avengers: Age of Ultron
J. Whedon
1400000000
2015
Action
English
Amelie
Jean-Pierre Jeunet
174000000
2002
Drama
French
soundtracks
soundtrack
composer
date
Inception: Music from the Motion Picture
Hans Zimmer
2010
Le Fabuleux Destin D’Amelie Poulain
Yann Tiersen
2001
1. SELECTSELECT语句用于指定数据库表中哪些列应包含在结果中。此示例仅选择
movie_name和director两列;其他列不会返回。要选择表中的所有列,您可以运行
SELECT *(读作“星号”)。下例从films表中选取所有列。2. LIMIT限制从表返回的行数是一种加速查询时间的实用技巧。要限制行数,可以使用
LIMIT命令。此示例从films表选择所有列,并将结果限制为前十行。3. AS要在返回结果时重命名列或表,您可以使用
AS命令为输出设置别名。此示例选择movie_name列,并将其设置为movie_title别名。4. SELECT DISTINCT数据集中常常包含重复的行或某列中的重复值。
SELECT与DISTINCT组合可去重。此示例返回director列中的唯一值。5. COUNTCOUNT()返回表或分组中的行数。此示例返回films表中的行数,并将结果重命名为number_of_films。