跳至主要内容

SQL 命令词汇表——最常用的 25 个 SQL 命令概览

学习最常用的 25 个 SQL 命令的基础知识及其用法。
· 8分钟 阅读

使用 AI 探索

什么是 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. SELECT

SELECT 语句用于指定数据库表中哪些列应包含在结果中。 

此示例仅选择 movie_name 和 director 两列;其他列不会返回。

SELECT movie_name, director
FROM films;

要选择表中的所有列,您可以运行 SELECT *(读作“星号”)。下例从 films 表中选取所有列。

SELECT * 
FROM films;

2. LIMIT

限制从表返回的行数是一种加速查询时间的实用技巧。要限制行数,可以使用 LIMIT 命令。此示例从 films 表选择所有列,并将结果限制为前十行。

SELECT *
FROM films
LIMIT 10;

3. AS

要在返回结果时重命名列或表,您可以使用 AS 命令为输出设置别名。此示例选择 movie_name 列,并将其设置为 movie_title 别名。

SELECT movie_name AS movie_title
FROM films;

4. SELECT DISTINCT

数据集中常常包含重复的行或某列中的重复值。SELECT 与 DISTINCT 组合可去重。此示例返回 director 列中的唯一值。

SELECT DISTINCT director
FROM films;

5. COUNT

COUNT() 返回表或分组中的行数。此示例返回 films 表中的行数,并将结果重命名为 number_of_films。

SELECT COUNT(*) AS number_of_films
FROM films;

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,请查看以下资源:

主题