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 |
|---|---|
| 男 | 北京大学 |
| 女 | 北京大学 |
| 男 | 清华大学 |
| 女 | 清华大学 |
| 男 | 浙江大学 |
| 女 | 浙江大学 |
