该语句用于查询表中的内容。
格式
示例
以如下表 a 为例。
- 从表 a 中读取 name 数据。
+------+
| name |
+------+
| a |
| b |
| a |
+------+
3 rows in set (0.01 sec)
- 在查询结果中对 name 进行去重处理。
obclient> SELECT DISTINCT name FROM a;
+------+
| name |
+------+
| a |
| b |
+------+
2 rows in set (0.01 sec)
- 从表 a 中查询 id,name,num,然后把 num 列除以 2 输出,输出的列名为 avg。
obclient> SELECT id, name, num/2 AS avg FROM a;
+------+------+----------+
| id | name | avg |
+------+------+----------+
| 1 | a | 50.0000 |
| 2 | b | 100.0000 |
| 3 | a | 25.0000 |
+------+------+----------+
3 rows in set (0.01 sec)
obclient> SELECT id, name, num FROM a WHERE name = 'a';
+------+------+------+
| id | name | num |
+------+------+------+
| 1 | a | 100 |
| 3 | a | 50 |
+------+------+------+
2 rows in set (0.01 sec)
- 从表 a 中查询 id,name,按照 name 分组对 num 求和,并输出。
- 从表 a 中查询 id,name,按照 name 分组对 num 求和,查询 num 总和小于160的行,并输出。
obclient> SELECT id, name, SUM(num) as sum FROM a GROUP BY name HAVING SUM(num) < 160;
| id | name | sum |
+------+------+------+
| 1 | a | 150 |
+------+------+------+
1 row in set (0.01 sec)
- 从表 a 中查询 id,name,num,根据 num 按升序(ASC)输出查询结果。
obclient> SELECT * FROM a ORDER BY num ASC;
+------+------+------+
| id | name | num |
+------+------+------+
| 3 | a | 50 |
| 1 | a | 100 |
| 2 | b | 200 |
+------+------+------+
3 rows in set (0.00 sec)
- 从表 a 中查询 id,name,num,根据 num 按降序(DESC)输出查询结果。
obclient> SELECT * FROM a ORDER BY num DESC;
+------+------+------+
| id | name | num |
+------+------+------+
| 2 | b | 200 |
| 1 | a | 100 |
| 3 | a | 50 |
+------+------+------+
3 rows in set (0.00 sec)
- 从表 a 中查询 id,name,num,使用 LIMIT强制从第2行开始,返回表 a 的两行结果。
obclient> SELECT * FROM a LIMIT 1,2;
+------+------+------+
| id | name | num |
+------+------+------+
| 2 | b | 200 |
| 3 | a | 50 |
2 rows in set (0.00 sec)
集合类 SELECT
该语句用于对多个 SELECT 查询的结果进行 UNION,MINUS,INTERSECT。
格式
参数 | 描述 |
---|---|
UNION ALL | 合并两个查询的结果 |
UNION | 合并两个查询的结果,并去重 |
EXCEPT | 从左查询结果集中去重出现在右查询中的结果,并去重 |
INTERSECT | 保留左查询结果集中出现在右查询中的结果,并去重 |
示例
create table t1 (c1 int, c2 int);
create table t2 (c1 int, c2 int);
insert into t1 values (1, -1), (2, -2);
- 计算 T1, T2 的所有的记录
obclient> SELECT C1, C2 FROM T1 UNION ALL SELECT C1, C2 FROM T2;
+------+------+
| C1 | C2 |
+------+------+
| 1 | -1 |
| 2 | -2 |
| 1 | 1 |
| 2 | -2 |
| 3 | 3 |
+------+------+
5 rows in set (0.01 sec)
- 计算 T1, T2 的去重后的所有记录
obclient> SELECT C1, C2 FROM T1 UNION SELECT C1, C2 FROM T2;
+------+------+
| C1 | C2 |
+------+------+
| 1 | -1 |
| 2 | -2 |
| 1 | 1 |
| 3 | 3 |
+------+------+
4 rows in set (0.01 sec)
- 计算 T1 和 T2 的交集
obclient> SELECT C1, C2 FROM T1 INTERSECT SELECT C1, C2 FROM T2;
+------+------+
| C1 | C2 |
+------+------+
| 2 | -2 |
+------+------+
1 row in set (0.00 sec)
- 计算 T1 和 T2 的差集
- 取 T1 和 T2 并集中 C2 排序最大的前两行
obclient> SELECT C1, C2 FROM T1 UNION SELECT C1, C2 FROM T2 ORDER BY C2 DESC LIMIT 2;
+------+------+
| C1 | C2 |
+------+------+
| 3 | 3 |
| 1 | 1 |
2 rows in set (0.00 sec)