《MYSQL教程深入sql多表差異化聯(lián)合查詢(xún)的問(wèn)題詳解》要點(diǎn):
本文介紹了MYSQL教程深入sql多表差異化聯(lián)合查詢(xún)的問(wèn)題詳解,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
MYSQL學(xué)習(xí)本章簡(jiǎn)略講述本人在實(shí)例開(kāi)發(fā)中遇到的多表查詢(xún)的問(wèn)題
其中主要講述
select A.*,B.*,C.* from A,B,C
和
select A.*,B.*,C.* from 表A inner join 表B on A.id=B.id inner join 表C on A.code=C.code
的區(qū)別
MYSQL學(xué)習(xí)最近遇到一個(gè)這樣的項(xiàng)目需求――要求頁(yè)面集合顯示三個(gè)關(guān)聯(lián)表的信息.
由于實(shí)際項(xiàng)目里出現(xiàn)的字段比較多,現(xiàn)在簡(jiǎn)化說(shuō)明如下:
table A 含有字段 UserName,CardCode,ItamCode
table B 含有字段 CardCode,CardName
table C 含有字段 ItamCode,ItamName
MYSQL學(xué)習(xí)其中界面要在一個(gè)數(shù)據(jù)集里同時(shí)出現(xiàn)UserName,CardName,ItamName
話(huà)說(shuō)雖然學(xué)過(guò)SQL 內(nèi)聯(lián),外聯(lián)的問(wèn)題,但是以前的項(xiàng)目基本出現(xiàn)的都是兩個(gè)表的關(guān)聯(lián)實(shí)現(xiàn),現(xiàn)在是第一次用到超過(guò)兩個(gè)表的關(guān)聯(lián)實(shí)現(xiàn)問(wèn)題.在百度找了一下資料,才發(fā)現(xiàn)原來(lái)基本原理是一樣的.哈,本人去年才入職,經(jīng)驗(yàn)不足,大神們,請(qǐng)別見(jiàn)笑哈!
呃,如果讀者暫時(shí)還不熟悉SQL基本內(nèi)聯(lián),外聯(lián)的相關(guān)知識(shí),請(qǐng)自覺(jué)找度娘面壁去哈,筆者在這里不熬述了.長(zhǎng)話(huà)短說(shuō),現(xiàn)在進(jìn)入正題……
MYSQL學(xué)習(xí)發(fā)現(xiàn)要實(shí)現(xiàn)上面的功能有兩種辦法,分別是
select A.UserName,B.CardName,C.ItamName from A,B,C
和
select A.UserName,B.CardName,C.ItamName from 表A inner join 表B on A.CardCode=B.CardCode inner join 表C on A.ItamCode=C.ItamCode
(如果字段是差異化的話(huà),可以略寫(xiě)表名)
MYSQL學(xué)習(xí)就上面的語(yǔ)法來(lái)說(shuō),其實(shí)兩種實(shí)現(xiàn)方法的效果是一樣的,但如果真要較真細(xì)說(shuō)優(yōu)劣的話(huà),還是第二種實(shí)現(xiàn)方法比較實(shí)用的.
用inner join(全外聯(lián))的寫(xiě)法, 不僅可以依照實(shí)際需求自由轉(zhuǎn)化left join(左外聯(lián))和right join(右外聯(lián)),而且注明了結(jié)合的順序, 特別是支持了SQL文優(yōu)化的方便.
MYSQL學(xué)習(xí)還有一個(gè)就是說(shuō)當(dāng)我某個(gè)字段可以為null的時(shí)候,第一種查詢(xún)辦法得出的值其實(shí)是不完全的.比如說(shuō)我上面的例子中當(dāng)table C 的ItanName 并非必填的時(shí)候,只能通過(guò)左外連接(left join)來(lái)實(shí)現(xiàn)我們需要的效果.
有興趣的同學(xué)可以自己操作一下,驗(yàn)證下兩種辦法的不同.
歡迎參與《MYSQL教程深入sql多表差異化聯(lián)合查詢(xún)的問(wèn)題詳解》討論,分享您的想法,維易PHP學(xué)院為您提供專(zhuān)業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/12389.html