mysql多表聯(lián)合查詢操作實(shí)例分析
本文實(shí)例講述了mysql多表聯(lián)合查詢操作。分享給大家供大家參考,具體如下:
MySQL多表聯(lián)合查詢是MySQL數(shù)據(jù)庫的一種查詢方式,下面就為您介紹MySQL多表聯(lián)合查詢的語法,供您參考學(xué)習(xí)之用。
MySQL多表聯(lián)合查詢語法:
mysql版本大于4.0,使用UNION
進(jìn)行查詢,示例如下:
SELECT `id`, `name`, `date`, '' AS `type` FROM table_A WHERE 條件語句…… UNION SELECT `id`, `name`, `date`, '未完成' AS `type` FROM table_B WHERE 條件語句…… ORDER BY `id` LIMIT num;
mysql版本小于4.0,需要建立臨時(shí)表,分為三步,示例如下:
第一步:建立臨時(shí)表tmp_table_name并插入table_A中的相關(guān)記錄
第二步:從table_B中取得相關(guān)記錄插入臨時(shí)表tmp_table_name中
第三步:從臨時(shí)表tmp_table_name中取出記錄
SELECT * FROM tmp_table_name ORDER BY id DESC
union和order by、limit區(qū)別分析
代碼示例:
CREATE TABLE `test1` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `desc` varchar(100) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
1. 以下查詢會(huì)報(bào)錯(cuò)誤:[Err] 1221 - Incorrect usage of UNION and ORDER BY
代碼示例:
select * from test1 where name like 'A%' order by name union select * from test1 where name like 'B%' order by name
修改為:
代碼示例:
select * from test1 where name like 'A%' union select * from test1 where name like 'B%' order by name
說明,在union中,不用括號(hào)的情況下,只能用一個(gè)order by(思考:union兩邊的order by的列名不一樣時(shí),會(huì)出現(xiàn)什么樣的結(jié)果?),這會(huì)對(duì)union后的結(jié)果集進(jìn)行排序。
修改為:
代碼示例:
(select * from test1 where name like 'A%' order by name) union (select * from test1 where name like 'B%' order by name)
也是可以的,這兩個(gè)order by在union前進(jìn)行。
2. 同樣
代碼示例:
select * from test1 where name like 'A%' limit 10 union select * from test1 where name like 'B%' limit 20
相當(dāng)于:
代碼示例:
(select * from test1 where name like 'A%' limit 10) union (select * from test1 where name like 'B%') limit 20
即后一個(gè)limit作用于的是union后的結(jié)果集,而不是union后的select。
也可以用括號(hào)括起來,以得到預(yù)期的結(jié)果:
3. UNION和UNION ALL區(qū)別
union會(huì)過濾掉union兩邊的select結(jié)果集中的重復(fù)的行,而union all不會(huì)過濾掉重復(fù)的行。
代碼示例:
(select * from test1 where name like 'A%' limit 10) union (select * from test1 where name like 'B%' limit 20)
下面試一個(gè)年齡段分析的復(fù)雜sql語句
( SELECT '5~19' AS `age`, SUM(`impression`) AS impression, SUM(`click`) AS click, sum(`cost`) AS cost FROM `adgroup_age_report` WHERE ( ( (`age` <= 19) AND (`adgroup_id` = '61') ) AND (`date` >= '2015-11-22') ) AND (`date` <= '2017-02-20') ) UNION ( SELECT '20~29' AS `age`, SUM(`impression`) AS impression, SUM(`click`) AS click, sum(`cost`) AS cost FROM `adgroup_age_report` WHERE ( ( ((`age` <= 29) AND(`age` >= 20)) AND (`adgroup_id` = '61') ) AND (`date` >= '2015-11-22') ) AND (`date` <= '2017-02-20') ) UNION ( SELECT '30~39' AS `age`, SUM(`impression`) AS impression, SUM(`click`) AS click, sum(`cost`) AS cost FROM `adgroup_age_report` WHERE ( ( ((`age` <= 39) AND(`age` >= 30)) AND (`adgroup_id` = '61') ) AND (`date` >= '2015-11-22') ) AND (`date` <= '2017-02-20') ) UNION ( SELECT '40~49' AS `age`, SUM(`impression`) AS impression, SUM(`click`) AS click, sum(`cost`) AS cost FROM `adgroup_age_report` WHERE ( ( ((`age` <= 49) AND(`age` >= 40)) AND (`adgroup_id` = '61') ) AND (`date` >= '2015-11-22') ) AND (`date` <= '2017-02-20') ) UNION ( SELECT '50~59' AS `age`, SUM(`impression`) AS impression, SUM(`click`) AS click, sum(`cost`) AS cost FROM `adgroup_age_report` WHERE ( ( ((`age` <= 59) AND(`age` >= 50)) AND (`adgroup_id` = '61') ) AND (`date` >= '2015-11-22') ) AND (`date` <= '2017-02-20') )
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過程技巧大全》及《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總》
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫計(jì)有所幫助。
- mysql多表聯(lián)合查詢返回一張表的內(nèi)容實(shí)現(xiàn)代碼
- MySQL左聯(lián)多表查詢where條件寫法示例
- 詳解Mysql多表聯(lián)合查詢效率分析及優(yōu)化
- 淺談mysql中多表不關(guān)聯(lián)查詢的實(shí)現(xiàn)方法
- mysql實(shí)現(xiàn)多表關(guān)聯(lián)統(tǒng)計(jì)(子查詢統(tǒng)計(jì))示例
- MySQL 多表關(guān)聯(lián)一對(duì)多查詢實(shí)現(xiàn)取最新一條數(shù)據(jù)的方法示例
- SQL語句多表聯(lián)查的實(shí)現(xiàn)方法示例
- MySQL詳細(xì)講解多表關(guān)聯(lián)查詢
- SQL?多表聯(lián)合查詢的幾種方式詳解
- SQL多表聯(lián)查的幾種方法示例總結(jié)
相關(guān)文章
開啟bin-log日志mysql報(bào)錯(cuò)的解決方法
開啟bin-log日志mysql報(bào)錯(cuò):This function has none of DETERMINISTIC, NO SQL解決辦法,大家參考使用吧2013-12-12MySQL 慢日志相關(guān)知識(shí)總結(jié)
慢日志在日常數(shù)據(jù)庫運(yùn)維中經(jīng)常會(huì)用到,我們可以通過查看慢日志來獲得效率較差的 SQL ,然后可以進(jìn)行 SQL 優(yōu)化。本篇文章我們一起來學(xué)習(xí)下慢日志相關(guān)知識(shí)。2021-05-05MySQL數(shù)據(jù)庫的一次死鎖實(shí)例分析
本文主要給大家通過一個(gè)實(shí)例來具體介紹MySQL死鎖問題的相關(guān)知識(shí),接下來我們就來一一介紹這部分內(nèi)容,希望能夠?qū)δ兴鶐椭?/div> 2016-11-11mysql為字段添加和刪除唯一性索引(unique) 的方法
下面小編就為大家?guī)硪黄猰ysql為字段添加和刪除唯一性索引(unique) 的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03DBeaver連接mysql數(shù)據(jù)庫圖文教程(超詳細(xì))
本文主要介紹了DBeaver連接mysql數(shù)據(jù)庫圖文教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07快速解決MySQL服務(wù)無法啟動(dòng)顯示:系統(tǒng)出錯(cuò),發(fā)生系統(tǒng)錯(cuò)誤1067, 進(jìn)程意外終止的兩種方法
本人因?yàn)閜hpstudy的MySQL數(shù)據(jù)庫與我的電腦上的MySQL數(shù)據(jù)庫發(fā)生沖突,當(dāng)我將MySQL服務(wù)器的服務(wù)名從MySQL改為MySQL5后,啟動(dòng)MySQL5服務(wù)后就報(bào)錯(cuò):系統(tǒng)出錯(cuò), 發(fā)生系統(tǒng)錯(cuò)誤 1067, 進(jìn)程意外終止,現(xiàn)在將這個(gè)解決方法分享給大家,需要的朋友可以參考下2024-06-06mysql提示Can't?connect?to?MySQL?server?on?localhost
這篇文章主要介紹了Can't?connect?to?MySQL?server?on?localhost?(10061)解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03最新評(píng)論