47.笔记 MySQL学习——使用UNION实现多表检索

来源:互联网 发布:js获取标准北京时间 编辑:程序博客网 时间:2024/06/07 21:18

47.笔记 MySQL学习——使用UNION实现多表检索

多个表查询的结果合并成一个结果集,可以使用UNION语句。

创建表如下:

mysql> create table tt1 ( i int,c varchar(10));

Query OK, 0 rows affected (0.01 sec)

mysql> create table tt2 ( j int,c varchar(10));

Query OK, 0 rows affected (0.02 sec)

mysql> create table tt3 ( d date,c int);

Query OK, 0 rows affected (0.01 sec)

插入如下:

mysql> insert into tt1 values( 1,'red' );

Query OK, 1 row affected (0.00 sec)

mysql> insert into tt1 values( 2,'blue' );

Query OK, 1 row affected (0.01 sec)

mysql> insert into tt1 values( 3,'green' );

Query OK, 1 row affected (0.00 sec)

如下:

mysql> insert into tt2 values ( -1,'tan');

Query OK, 1 row affected (0.00 sec)

mysql> insert into tt2 values ( 1,'red');

Query OK, 1 row affected (0.01 sec)

mysql> insert into tt3 values ( '1904-01-01',100);

Query OK, 1 row affected (0.01 sec)

mysql> insert into tt3 values ( '2004-01-01',100);

Query OK, 1 row affected (0.00 sec)

mysql> insert into tt3 values ( '2004-01-01',200);

Query OK, 1 row affected (0.00 sec)

UNION如下:

mysql> select i from tt1 union select j from tt2union select c from tt3;

+------+

| i   |

+------+

|   1 |

|   2 |

|   3 |

|  -1 |

| 100 |

| 200 |

+------+

6 rows in set (0.00 sec)

UNION有几种特性

列名和数据类型

UNION结果集里的列名来自第一个SELECT列名。后面的SELECT必须选取相同的个数的列,但是不必具有相同的名字和数据类型。

mysql> select i,c from tt1 union select c,d fromtt3;

+------+------------+

| i   | c          |

+------+------------+

|   1 | red        |

|   2 | blue       |

|   3 | green      |

| 100 | 1904-01-01 |

| 100 | 2004-01-01 |

| 200 | 2004-01-01 |

+------+------------+

6 rows in set (0.00 sec)

重复行处理

默认会去掉重复行

mysql> select * from tt1 union select *from tt2 union select * from tt3;

+------------+-------+

| i         | c     |

+------------+-------+

| 1         | red   |

| 2         | blue  |

| 3          | green |

| -1        | tan   |

| 1904-01-01 | 100   |

| 2004-01-01 | 100   |

| 2004-01-01 | 200   |

+------------+-------+

7 rows in set (0.00 sec)

ORDER BY 和 LIMIT处理

如果想讲UNION结果作为一个整体进行排序,需要用括号把每个SELECT语句括起来,并在最后加上一个ORDER BY。

如果限制返回数量,末尾加上LIMIT子句

mysql> (select * from tt1) union (select * fromtt2) union (select * from tt3) limit 2;

+------+------+

| i   | c    |

+------+------+

| 1   | red  |

| 2   | blue |

+------+------+

2 rows in set (0.00 sec)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

原创粉丝点击