溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql中怎么實現多表連接查詢

發(fā)布時間:2021-06-15 16:49:21 來源:億速云 閱讀:226 作者:Leah 欄目:MySQL數據庫

這篇文章將為大家詳細講解有關mysql中怎么實現多表連接查詢,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

代碼如下:

SELECT FId
FROM T_Customer
WHERE FName='MIKE'

這個SQL語句返回2,也就是姓名為MIKE 的客戶的FId值為2,這樣就可以到T_Order中檢索FCustomerId等于2 的記錄:

代碼如下:

SELECT FNumber,FPrice
FROM T_Order
WHERE FCustomerId=2

下面我們詳細來看看表連接。表連接有多種不同的類型,有交叉連接(CROSS JOIN)、內連接(INNER JOIN)、外連接(OUTTER JOIN)。

(1)內連接(INNER JOIN):內連接組合兩張表,并且只獲取滿足兩表連接條件的數據。

代碼如下:

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId

注:在大多數數據庫系統(tǒng)中,INNER JOIN中的INNER是可選的,INNER JOIN 是默認的連接方式。

在使用表連接的時候可以不局限于只連接兩張表,因為有很多情況下需要聯系許多表。例如,T_Order表同時還需要連接T_Customer和T_OrderType兩張表才能檢索到所需要的信息,編寫如下SQL語句即可:

代碼如下:

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId
INNER JOIN T_OrderType
ON T_Order.FTypeId= T_OrderType.FId

(2)交叉連接(CROSS JOIN):交叉連接所有涉及的表中的所有記錄都包含在結果集中。可以采用兩種方式來定義交叉連接,分別是隱式和顯式的連接。

下面看看隱式的例子:

代碼如下:

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer, T_Order

使用顯式的連接則需要使用CROSS JOIN,例子如下:

代碼如下:

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer
CROSS JOIN T_Order

(3)外連接(OUTTER JOIN):內部連接只獲取滿足連接條件的數據,而對于外部連接來說,主要是解決這樣的一種場景。滿足條件的數據檢索出來,這個沒有疑問,外部連接還會檢索另一部分數據,那就是將不滿足條件的數據以NULL來填充。先來看一下外連接的分類:左外部連接(LEFT OUTER JOIN)、右外部連接(RIGHT OUTER JOIN)和全外部連接(FULLOUTER JOIN)。

I、左外部連接(LEFT OUTER JOIN):前頭也說了,將不滿足條件的數據以NULL來填充。那么具體是哪些需要以NULL來填充呢,對于左外連接來說的話,連接條件當中,如果出現滿足條件的左表的數據在右表中沒有相應匹配時,需要把相應的右表字段填充NULL值。也就是說左外部連接的主體是左表,右表來配合。

代碼如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

注:如果使用左外部連接的話,通過where語句能過濾其中不符合的數據

代碼如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
WHERE o.FPrice>=150

II、右外部連接(RIGHT OUTER JOIN):右外部連接與左外連部接相反,將會被填充NULL值的是左表的字段。也就是說右外部連接的主體是右表,左表來配合。

代碼如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

注:同左外連接一樣,可以使用where語句進行過濾

III、全外部連接(FULLOUTER JOIN):全外部連接是左外部連接和右外部連接的合集。也就是既包括左外部連接的結果集,也包括右外部連接的結果集。

代碼如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
FULL OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

其結果相當于:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
UNION
SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

多表查詢的多種sql寫法:(下面是從兩個表里查詢<也可以看成從三個表里查詢>,顯示表v_goods里的所有字段,顯示admin2表里的name字段作為添加人,顯示表admin2表的name字段作為操作人) 多個表的查詢都可按照下面三個例句進行編寫sql

SELECT v.*,(SELECT a.name FROM admin2 a WHERE a.adminId=v.loadInId) AS aname,(SELECT a.name FROM admin2 a WHERE a.adminId=v.operatorId) AS uname FROM v_goods v where 1=1;
SELECT v.*,a.name aname,b.name uname FROM v_goods v,admin2 a,admin2 b WHERE a.adminId=v.loadInId AND b.adminId=v.operatorId ;
SELECT v.*,a.name aname,b.name uname FROM v_goods v LEFT JOIN admin2 a ON a.adminId=v.loadInId LEFT JOIN admin2 b ON b.adminId=v.operatorId ;

關于mysql中怎么實現多表連接查詢就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI