1. 程式人生 > >MySQL 聯合查詢

MySQL 聯合查詢

保留 div nio 例如 sql 女生 tree custom first

聯合查詢:將多次查詢(多條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)

MySQL 聯合查詢