点此访问在线练习平台,暂只支持电脑端访问
反馈建议请点此

垂直学习SQL

SQL是一门语言,遵循一定的语法,学习SQL的第一步就是了解SQL的基础语法。
在SQL中,我们常用的语句有SELECT、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT等。它们的语序永远遵循下面的语序:

1
2
3
4
5
6
SELECT ... FROM ...
WHERE ...
GROUP BY ...
HAVING ...
ORDER BY ...
LIMIT ...

对于每一行,我们称之为字句,在一个完整的SQL中,一定有SELECT字句,而其它字句可以有也可以没有,但是它们之间的顺序是固定的。下面我们将从上到下,以垂直维度先简单介绍每个字句的用法。以帮助大家快速上手SQL。

我们接下来以下表的数据为例,其表名为scores_t,来学习SELECT的用法。

student_id student_name subject score
1 屈屈 创意写作 100
1 屈屈 时尚美学 100
1 屈屈 电子竞技 92
1 屈屈 高能物理 29
2 慧心 创意写作 81
2 慧心 时尚美学 62
2 慧心 电子竞技 91
2 慧心 高能物理 85
3 达琳 创意写作 93
3 达琳 时尚美学 65
3 达琳 电子竞技 59
3 达琳 高能物理 77

SELECT

SELECT的作用就是把数据库中的数据查询出来,想要什么,就SELECT什么。在FROM后面指明我们想要的表名即可。例如我们想知道成绩表中的所有数据,则可以使用以下语句:

1
SELECT * FROM scores_t;  

将返回表中所有数据。其中星号表示我们想要所有的列,如果我们只是想要部分列的数据,则可以指明列名,例如我们只想知道学生的学号、科目和分数,则可以使用以下语句:

1
SELECT student_id, subject, score FROM scores_t;  

返回数据:

student_id subject score
1 创意写作 100
1 时尚美学 100
1 电子竞技 92
1 高能物理 29

WHERE

WHERE的作用是筛选数据,只有满足条件的数据才会被查询出来。例如我们想知道屈屈同学的所有成绩,则可以使用以下语句:

1
2
SELECT * FROM scores_t 
WHERE student_name = '屈屈';

将会返回数据:

student_id student_name subject score
1 屈屈 创意写作 100
1 屈屈 时尚美学 100
1 屈屈 电子竞技 94
1 屈屈 高能物理 29

同理,若想对其他列进行筛序,只需更改WHERE后面的条件即可。

GROUP BY

GROUP BY的作用是对数据进行分组,常用于统计不同维度的数据。
例如我们想知道每个学生的总分,则可以使用以下语句:

1
2
SELECT student_name, SUM(score) FROM scores_t 
GROUP BY student_name;

将返回:

student_name SUM(score)
屈屈 321
慧心 319
达琳 294

其中SUM函数用于计算返回的结果集中某一列的和,这里用于计算每个学生的总分。
GROUP BY字句经常与SELECT中的函数一起使用,在水平维度学习章节中我们会详细介绍不同的函数。

HAVING

HAVING的作用是对GROUP BY的结果进行筛选,只有满足条件的数据才会被查询出来。
例如我们想知道每个学生的总分大于等于300的学生,则可以使用以下语句:

1
2
3
SELECT student_name, SUM(score) FROM scores_t
GROUP BY student_name
HAVING SUM(score) >= 300;

将返回:

student_name SUM(score)
屈屈 321
慧心 319

Tips:发现了吗,HAVING的作用和WHERE很像,能都筛选数据。WHERE和HAVING的区别在于,WHERE用于常规的筛选数据,而HAVING用于筛选分组后的数据。HAVING一定要和GROUP BY一起使用,GROUP BY后面可以没有HAVING,但HAVING前面一定要有GROUP BY。

ORDER BY

ORDER BY的作用是对返回的结果集进行排序。默认情况下,ORDER BY是升序排序,如果想要降序排序,则需要在列名后面加上DESC关键字。例如我们想知道创意写作科目的成绩,并按分数降序排序,则可以使用以下语句:

1
2
3
SELECT * FROM scores_t
WHERE subject = '创意写作'
ORDER BY score DESC;

将返回:

student_id student_name subject score
1 屈屈 创意写作 100
3 达琳 创意写作 93
2 慧心 创意写作 81

这样就能直观地看到对于创意写作科目,屈屈是第一名,达琳是第二名,慧心是第三名。

LIMIT

LIMIT的作用是限制返回的结果集的行数。例如我们想知道谁考了时尚美学科目的第一名,则可以使用以下语句:

1
2
3
4
SELECT * FROM scores_t
WHERE subject = '时尚美学'
ORDER BY score DESC
LIMIT 1;

将返回:

student_id student_name subject score
1 屈屈 时尚美学 100

这样就能直观地看到时尚美学科目的第一名是屈屈。

点此访问在线练习平台,暂只支持电脑端访问
反馈建议请点此