日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySql 数据库多表链接查询的方式

發布時間:2023/12/14 数据库 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 数据库多表链接查询的方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。