mysql多表串連查詢操作執行個體

來源:互聯網
上載者:User
實際的項目,存在多張表的關聯關係。不可能在一張表裡面就能檢索出所有資料。如果沒有表串連的話,那麼我們就需要非常多的操作。比如需要從A表找出限制性的條件來從B表中檢索資料。不但需要分多表來操作,而且效率也不高。比如書中的例子:

代碼如下:

SELECT FIdFROM T_CustomerWHERE FName='MIKE'

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

代碼如下:

SELECT FNumber,FPriceFROM T_OrderWHERE FCustomerId=2

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

(1)內串連(INNER JOIN):內串連組合兩張表,並且只擷取滿足兩表串連條件的資料。

代碼如下:

SELECT o.FId,o.FNumber,o.FPrice,c.FId,c.FName,c .FAgeFROM T_Order o JOIN T_Customer cON o.FCustomerId= c.FId

註:在大多數資料庫系統中,INNER JOIN中的INNER是可選的,INNER JOIN 是預設的串連方式。

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

代碼如下:

SELECT o.FId,o.FNumber,o.FPrice,c.FId,c.FName,c .FAgeFROM T_Order o JOIN T_Customer cON o.FCustomerId= c.FIdINNER JOIN T_OrderTypeON 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.FPriceFROM T_Customer, T_Order

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

代碼如下:

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,T_Order.FId, T_Order.FNumber, T_Order.FPriceFROM T_CustomerCROSS 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.FAgeFROM T_Order oLEFT OUTER JOIN T_Customer cON o.FCustomerId=c.FId

註:如果使用左外部串連的話,通過where語句能過濾其中不符合的資料

代碼如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oLEFT OUTER JOIN T_Customer cON o.FCustomerId=c.FIdWHERE o.FPrice>=150

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

代碼如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oRIGHT OUTER JOIN T_Customer cON o.FCustomerId=c.FId

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

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

代碼如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oFULL OUTER JOIN T_Customer cON o.FCustomerId=c.FId

其結果相當於:

SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oLEFT OUTER JOIN T_Customer cON o.FCustomerId=c.FIdUNIONSELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oRIGHT OUTER JOIN T_Customer cON 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 ;
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.