MySql 数据库多表链接查询的方式
數據庫中多表聯查可以通過連接運算實現,即將多張表通過主外鍵關系關聯在一起進行查詢,分為非等值查詢和等值查詢兩大類。
一.非等值查詢:
語法:
select * from 表1,表2此查詢方式的實質是笛卡爾積的應用,即表1有x行,表2有y行,得到的結果就是x*y行。因此非等值查詢在應對數據量較小的情況時可以選擇,但當數據量龐大時,采用非等值查詢方式會造成大量的數據,從而降低效率,因此不推薦使用非等值查詢。
二.等值查詢
語法:
select * from 表1,表2 where 表1.字段1 = 表2.字段2....等值查詢是通過where 后面的判斷條件去獲取自己需要的數據,可以分為以下三種:
1.左連接: left join
select * from 表1 left join 表2 on 表1.字段1 = 表2.字段1?以left join 左邊的表(表1)為主表,從左表中返回所有的記錄,即便在右表(表2)中沒有匹配的行。如下圖所示:left join取得就是左表紅色區域的數據
取左表中獨有的數據:on 的后面,根據條件進行過濾篩選,再生成臨時查詢結果。where 的后面,從臨時查詢結果中再根據條件進行篩選,生成最終結果。
select * from A left join Bon A.id = B.id where B.id is null如下圖:
2.右連接:right join?
select * from 表1 right join 表2on 表1.字段1 = 表2.字段1?與 left join 相對應,右邊的表(表2)為主表,從右表中返回所有的記錄,即便在左表(表1)中沒有匹配的行。如下圖
取右表獨有的數據:
select * from A right join B on A.id = B.id where A.id is null如下圖:?
?
?3.交集:inner join
?
select * from A inner join B on A.id = B.id組合兩個表中的記錄,只要在公共字段中有相符合的值,都會被取到,即在表中至少一個匹配時,就會返回記錄,實際結果為兩張或多張表的交集。
?
注意: inner join不會統計空值?
4.并集:union與union all
union與union all都是求多表的并集,但兩種方式得到的結果截然不同,具體如下。
?union 語法:
select * from A union (select * from B)?取得是下圖中紅色區域的數據:
?
可以看到,union合并的是結果集,不區分來自于哪一張表,所有可以合并多張表查詢出來的數據,但是會過濾掉重復的數據。
注意:
1.當表列名不一致時,會以第一張表的表頭為準
2.不同數據類型可以并到一個列中
3.如果查詢的表的列數量不相等是,就會報錯
4.每個字句中的的排序是沒有意義的,mysql在進行合并的適合會忽略掉,如需要排序,可以對合并后的整張表進行排序union all 語法:
select * from A union all (select * from B)?取得是下圖中紅色區域的數據:
?可以看到,union all 得到的結果也是結果的并集,但是不會把重復的數據過濾掉,而是全部顯示出來。
聯表查詢中on和where的區別:
1.on在內連接中可省略,外連接不可省略;
2.on在內連接中執行效果和外連接執行效果不同;left join...on查詢不能過濾掉左表中的數據,而內連接on查詢可以過濾掉全局數據。
3.外連接中on和where不同,on篩選笛卡爾積過濾條件,where篩選具體業務
?
總結
以上是生活随笔為你收集整理的MySql 数据库多表链接查询的方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html打开网页一段时间字幕滚动,网页代
- 下一篇: MySQL 数据表查询