干巴巴的理论就不说了,我们直接通过例子来开始 SQL 入门之旅吧,这篇讲三个部分:

  1. 列的基本操作
  2. 行的基本操作
  3. 数据去重
数据准备

首先我们需要创建样本数据,假设我们有一张表,这是一张用户信息表,这张表的表名为 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
北京大学
北京大学
清华大学
清华大学
浙江大学
浙江大学