MySQL 联合查询

联合查询:将多次查询(多条select语句), 在记录上进行拼接(字段不会增加)

基本语法:多条select语句构成: 每一条select语句获取的字段数必须严格一致(但是字段类型无关)

语法

Select 语句1

Union [union选项]

Select 语句2

Union选项: 与select选项一样有两个

All: 保留所有(不管重复)

Distinct: 去重(整个重复): 默认的

例如

-- 表一 SELECT * FROM prospect;
+---------+-------+------------------------+
| fname   | lname  | addr     |
+---------+-------+------------------------+
| Peter     | Jones  | 482 Rush St., Apt. 402 |
| Bernice | Smith  | 916 Maple Dr.   |
+---------+-------+------------------------+

-- 表二
 SELECT * FROM customer;
+-----------+------------+---------------------+
| last_name | first_name | address    |
+-----------+------------+---------------------+
| Peterson  | Grace    | 16055 Seminole Ave. |
| Smith      | Bernice  | 916 Maple Dr.  |
| Brown     | Walter   | 8602 1st St.  |
+-----------+------------+---------------------+

-- 表三
 SELECT * FROM vendor;
+-------------------+---------------------+
| company            | street    |
+-------------------+---------------------+
| ReddyParts, Inc. | 38 Industrial Blvd. |
| Parts-to-go, Ltd. | 213B Commerce Park. |
+-------------------+---------------------+


-- 如果所有的三个表具有不同的列名 ,查询方式
SELECT fname, lname, addr FROM prospect
UNION
SELECT first_name, last_name, address FROM customer
UNION
SELECT company, '', street FROM vendor;
+-------------------+----------+------------------------+
| fname               | lname        | addr     |
+-------------------+----------+------------------------+
| Peter                 | Jones        | 482 Rush St., Apt. 402 |
| Bernice              | Smith       | 916 Maple Dr.   |
| Grace                | Peterson   | 16055 Seminole Ave. |
| Walter               | Brown      | 8602 1st St.   |
| ReddyParts, Inc. |                | 38 Industrial Blvd. |
| Parts-to-go, Ltd. |                | 213B Commerce Park. |
+-------------------+----------+------------------------+

-- 如果想选择所有记录,包括重复的,请ALL的第一个UNION关键字
 SELECT fname, lname, addr FROM prospect
-> UNION ALL
-> SELECT first_name, last_name, address FROM customer
-> UNION
-> SELECT company, '', street FROM vendor;

联合查询的意义:

1. 查询同一张表,但是需求不同: 如查询学生信息, 男生身高升序, 女生身高降序.

2. 多表查询: 多张表的结构是完全一样的,保存的数据(结构)也是一样的.

Order by使用

在联合查询中: order by不能直接使用,需要对查询语句使用括号才行;

另外,要order by生效: 必须搭配limit: limit使用限定的最大数即可

.

-- 男的按年级正序排序,女的按倒叙排列
(select *from t3 where gender="男" order by age limit 99999)
union
(select *from t3 where gender="女" order by age limit 99999)

 

原文地址:https://www.cnblogs.com/jennyyin/p/7900903.html