SQL 入门指导片(1) - 基本操作
Oct 1, 2021
干巴巴的理论就不说了,我们直接通过例子来开始 SQL 入门之旅吧,这篇讲三个部分:
- 列的基本操作
- 行的基本操作
- 数据去重
数据准备
首先我们需要创建样本数据,假设我们有一张表,这是一张用户信息表,这张表的表名为 s_user_info
,具体的表头字段如下:
字段 | 字段中文 | 字段示例 |
---|---|---|
user_id | 用户编码 | 8374563123 |
gender | 用户性别 | 男,女 |
school | 学校名称 | 北京大学 |
birthday | 用户生日 | 1994-12-10 |
pay_amt | 支付金额 | 92.45 |
last_login_time | 上一次登录时间 | 2021-09-30 18:23:48 |
我们就可以创建下面的一个数据集,该数据集一共有 5 列字段, 10 行数据
user_id | gender | school | birthday | pay_amt | last_login_time |
---|---|---|---|---|---|
1 | 男 | 北京大学 | 1992-01-01 | 34.1 | 2021-08-01 18:23:48 |
2 | 女 | 北京大学 | 1994-02-06 | 15.54 | 2021-05-23 12:54:00 |
3 | 男 | 北京大学 | 1992-08-12 | 76.87 | 2021-06-15 13:32:03 |
4 | 男 | 北京大学 | 1990-12-21 | 97.12 | 2020-11-30 05:23:16 |
5 | 女 | 清华大学 | 1993-02-17 | 12.16 | 2021-03-30 20:51:57 |
6 | 女 | 清华大学 | 1996-05-13 | 54.65 | 2021-02-01 23:12:48 |
7 | 女 | 清华大学 | 1997-08-18 | 76.87 | 2021-08-30 14:17:43 |
8 | 男 | 清华大学 | 1998-09-04 | 98.93 | 2021-09-30 19:25:34 |
9 | 女 | 浙江大学 | 1991-11-09 | 12.32 | 2021-08-01 09:29:46 |
10 | 男 | 浙江大学 | 1993-01-17 | 5.58 | 2021-08-01 11:32:27 |
列的基本操作
取出指定列的数据
如果你想取出 s_user_info
表中: user_id
, gender
, birthday
这三列的数据,那么你就可以通过 SQL:
1 | SELECT user_id, gender, birthday FROM s_user_info; |
来取出你想要的数据,这样你就会得到:
user_id | gender | birthday |
---|---|---|
1 | 男 | 1992-01-01 |
2 | 女 | 1994-02-06 |
3 | 男 | 1992-08-12 |
4 | 男 | 1990-12-21 |
5 | 女 | 1993-02-17 |
6 | 女 | 1996-05-13 |
7 | 女 | 1997-08-18 |
8 | 男 | 1998-09-04 |
9 | 女 | 1991-11-09 |
10 | 男 | 1993-01-17 |
这样一张表的数据
取出所有列的数据
如果你想取出 s_user_info
这张表的所有数据,那么你就可以通过 SQL:
1 | SELECT * FROM s_user_info; |
来取数,在 SQL 中 * 就代表所有列。
行的基本操作
在 SQL 语句中,不管你取多少列的数据,默认都会取这些列中所有的数据,比如你通过
1 | SELECT * FROM s_user_info; |
来取数,那么最终返回的数据,就是 s_user_info
这张表中所有的十行数据。
如果数据量太大,需要限制返回的条数,我们可以使用:
1 | SELECT * FROM s_user_info LIMIT 5; |
来限定返回的数量,比如上述 SQL 命令,返回的结果就是:
user_id | gender | school | birthday | pay_amt | last_login_time |
---|---|---|---|---|---|
1 | 男 | 北京大学 | 1992-01-01 | 34.1 | 2021-08-01 18:23:48 |
2 | 女 | 北京大学 | 1994-02-06 | 15.54 | 2021-05-23 12:54:00 |
3 | 男 | 北京大学 | 1992-08-12 | 76.87 | 2021-06-15 13:32:03 |
4 | 男 | 北京大学 | 1990-12-21 | 97.12 | 2020-11-30 05:23:16 |
5 | 女 | 清华大学 | 1993-02-17 | 12.16 | 2021-03-30 20:51:57 |
具体返回哪 5 条数据,不同数据库处理的逻辑都不一样,不用太纠结,一般用 LIMIT 的场景,只适用于抽样数据的场景中。
去重操作
在上述表格中,如果我们需要统计一共有几所学校,一个简单的方法我们可以用:
1 | SELECT DISTINCT school FROM s_user_info; |
来得到学校的数量,这段代码可以分为两部分理解:
第一部分是 SELECT school FROM s_user_info;
我们就得到了这张数据集中的所有学校的数据,如下:
school |
---|
北京大学 |
北京大学 |
北京大学 |
北京大学 |
清华大学 |
清华大学 |
清华大学 |
清华大学 |
浙江大学 |
浙江大学 |
第二部分:DISTINCT school
, 目的是对上面的这个数据集做了一次去重,把重复已有的 school
都去掉了,所以最后的结果是:
school |
---|
北京大学 |
清华大学 |
浙江大学 |
同样,如果要对性别+学校去重,我们就可以用 SQL:
1 | SELECT DISTINCT gender, school FROM s_user_info; |
来实现,最后得到结果:
gender | school |
---|---|
男 | 北京大学 |
女 | 北京大学 |
男 | 清华大学 |
女 | 清华大学 |
男 | 浙江大学 |
女 | 浙江大学 |