Skip to content

Latest commit

 

History

History
130 lines (102 loc) · 5.04 KB

UNION.md

File metadata and controls

130 lines (102 loc) · 5.04 KB

描述

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

语法

MySQL UNION 操作符语法格式:

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

参数

expression1, expression2, ... expression_n: 要检索的列。

tables: 要检索的数据表。

WHERE conditions: 可选, 检索条件。

DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。

ALL: 可选,返回所有结果集,包含重复数据。

distinct

mysql> select * from myroot;
+----+-------+-------+-------+------------+
| id | name  | age   | phone | date       |
+----+-------+-------+-------+------------+
|  4 | kk    | 23    | 234   | 2033-02-02 |
|  5 | kkaa  | 2345  | 12234 | 2034-02-01 |
|  6 | akkka | 23456 | 1223  | 2012-02-01 |
|  7 | 1231a | 2334  | 12323 | 2010-02-02 |
|  8 | sll   | 232   | 122   | 2010-08-23 |
|  9 | sk    | 23    | 45    | 2030-09-23 |
| 10 | kvk   | 23421 | 2324  | 2021-02-10 |
| 11 | uue   | 23    | 234   | 1990-02-03 |
+----+-------+-------+-------+------------+
8 rows in set (0.00 sec)

mysql> create table mydoot (`id` int auto_increment, `name` varchar(100) not null, `age` varchar(11) not null, `phone` varchar(11) not null, `date` date, primary key(`id`)) engine = InnoDB default charset = utf8;
Query OK, 0 rows affected, 1 warning (0.04 sec)

mysql> select * from mydoot;
Empty set (0.01 sec)

mysql> insert into mydoot (name, age, phone, date) values ('kk', 23, 234, '2332-2-2'), ('kow', 2324, 12324, '1234-2-4'),('sqqsaa', 23343, 2434, '2030-2-3'), ('kkk', 2324, 23434, '2230-4-23'), ('siikkk', 2343, w333434, '2050-2-4'), ('aakkke',2323,434, '2302-2-2');
ERROR 1054 (42S22): Unknown column 'w333434' in 'field list'
mysql> insert into mydoot (name, age, phone, date) values ('kk', 23, 234, '2332-2-2'), ('kow', 2324, 12324, '1234-2-4'),('sqqsaa', 23343, 2434, '2030-2-3'), ('kkk', 2324, 23434, '2230-4-23'), ('siikkk', 2343, 333434, '2050-2-4'), ('aakkke',2323,434, '2302-2-2');;
Query OK, 6 rows affected (0.01 sec)
Records: 6  Duplicates: 0  Warnings: 0

ERROR:
No query specified

mysql> select * from mydoot;
+----+--------+-------+--------+------------+
| id | name   | age   | phone  | date       |
+----+--------+-------+--------+------------+
|  1 | kk     | 23    | 234    | 2332-02-02 |
|  2 | kow    | 2324  | 12324  | 1234-02-04 |
|  3 | sqqsaa | 23343 | 2434   | 2030-02-03 |
|  4 | kkk    | 2324  | 23434  | 2230-04-23 |
|  5 | siikkk | 2343  | 333434 | 2050-02-04 |
|  6 | aakkke | 2323  | 434    | 2302-02-02 |
+----+--------+-------+--------+------------+
6 rows in set (0.01 sec)

mysql> select * from myroot;
+----+-------+-------+-------+------------+
| id | name  | age   | phone | date       |
+----+-------+-------+-------+------------+
|  4 | kk    | 23    | 234   | 2033-02-02 |
|  5 | kkaa  | 2345  | 12234 | 2034-02-01 |
|  6 | akkka | 23456 | 1223  | 2012-02-01 |
|  7 | 1231a | 2334  | 12323 | 2010-02-02 |
|  8 | sll   | 232   | 122   | 2010-08-23 |
|  9 | sk    | 23    | 45    | 2030-09-23 |
| 10 | kvk   | 23421 | 2324  | 2021-02-10 |
| 11 | uue   | 23    | 234   | 1990-02-03 |
+----+-------+-------+-------+------------+
8 rows in set (0.00 sec)

mysql> select name, age, phone, date from mydoot where name = kk or name = kow or name = kkk;
ERROR 1054 (42S22): Unknown column 'kk' in 'where clause'
mysql> select name, age, phone, date from mydoot where name = 'kk' or name = 'kow';
+------+------+-------+------------+
| name | age  | phone | date       |
+------+------+-------+------------+
| kk   | 23   | 234   | 2332-02-02 |
| kow  | 2324 | 12324 | 1234-02-04 |
+------+------+-------+------------+
2 rows in set (0.00 sec)

mysql> select name, age, phone, date from mydoot where name = 'kk' or name = 'kow' union select name,  age, phone from myroot where name = 'kk' or name = 'kkaa' or name = 'sk';
ERROR 1222 (21000): The used SELECT statements have a different number of columns
mysql> select name,  age, phone from myroot where name = 'kk' or name = 'kkaa' or name = 'sk';
+------+------+-------+
| name | age  | phone |
+------+------+-------+
| kk   | 23   | 234   |
| kkaa | 2345 | 12234 |
| sk   | 23   | 45    |
+------+------+-------+
3 rows in set (0.00 sec)

mysql> select name,  age, phone, date from myroot where name = 'kk' or name = 'kkaa' or name = 'sk' union distinct select name, age, phone, date from mydoot where name = 'kk' or name = 'kow';
+------+------+-------+------------+
| name | age  | phone | date       |
+------+------+-------+------------+
| kk   | 23   | 234   | 2033-02-02 |
| kkaa | 2345 | 12234 | 2034-02-01 |
| sk   | 23   | 45    | 2030-09-23 |
| kk   | 23   | 234   | 2332-02-02 |
| kow  | 2324 | 12324 | 1234-02-04 |
+------+------+-------+------------+
5 rows in set (0.01 sec)

mysql>