MySQL 聯合查詢
阿新 • • 發佈:2017-11-27
保留 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 聯合查詢