2、职能岗SQL学习极简攻略-垂直学习SQL
垂直学习SQL
SQL是一门语言,遵循一定的语法,学习SQL的第一步就是了解SQL的基础语法。
在SQL中,我们常用的语句有SELECT、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT等。它们的语序永远遵循下面的语序:
1 | SELECT ... FROM ... |
对于每一行,我们称之为字句,在一个完整的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 | SELECT * FROM scores_t |
将会返回数据:
student_id | student_name | subject | score |
---|---|---|---|
1 | 屈屈 | 创意写作 | 100 |
1 | 屈屈 | 时尚美学 | 100 |
1 | 屈屈 | 电子竞技 | 94 |
1 | 屈屈 | 高能物理 | 29 |
同理,若想对其他列进行筛序,只需更改WHERE后面的条件即可。
GROUP BY
GROUP BY的作用是对数据进行分组,常用于统计不同维度的数据。
例如我们想知道每个学生的总分,则可以使用以下语句:
1 | SELECT student_name, SUM(score) FROM scores_t |
将返回:
student_name | SUM(score) |
---|---|
屈屈 | 321 |
慧心 | 319 |
达琳 | 294 |
其中SUM函数用于计算返回的结果集中某一列的和,这里用于计算每个学生的总分。
GROUP BY字句经常与SELECT中的函数一起使用,在水平维度学习章节中我们会详细介绍不同的函数。
HAVING
HAVING的作用是对GROUP BY的结果进行筛选,只有满足条件的数据才会被查询出来。
例如我们想知道每个学生的总分大于等于300的学生,则可以使用以下语句:
1 | SELECT student_name, SUM(score) FROM scores_t |
将返回:
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 | SELECT * FROM scores_t |
将返回:
student_id | student_name | subject | score |
---|---|---|---|
1 | 屈屈 | 创意写作 | 100 |
3 | 达琳 | 创意写作 | 93 |
2 | 慧心 | 创意写作 | 81 |
这样就能直观地看到对于创意写作科目,屈屈是第一名,达琳是第二名,慧心是第三名。
LIMIT
LIMIT的作用是限制返回的结果集的行数。例如我们想知道谁考了时尚美学科目的第一名,则可以使用以下语句:
1 | SELECT * FROM scores_t |
将返回:
student_id | student_name | subject | score |
---|---|---|---|
1 | 屈屈 | 时尚美学 | 100 |
这样就能直观地看到时尚美学科目的第一名是屈屈。