您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)怎么在MySQL中實(shí)現(xiàn)連接查詢,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
內(nèi)連接是應(yīng)用程序中非常常見的連接操作,它一般都是默認(rèn)的連接類型。內(nèi)連接基于連接謂詞,它將兩張表(如A和B)的列組合在一起,產(chǎn)生新的結(jié)果表。內(nèi)連接查詢會(huì)將A表的每一行和B表的每一行進(jìn)行比較,并找出滿足連接謂詞的組合。當(dāng)連接謂詞被滿足,A和B中匹配的行會(huì)按列組合(并排組合)成結(jié)果集中的一行。
內(nèi)連接查詢操作列出與連接條件匹配的數(shù)據(jù)行,它使用比較運(yùn)算符比較被連接列的列值。內(nèi)連接分3種:交叉連接相等連接和自然連接。
交叉連接(Cross Join) ,又稱“笛卡爾連接(Cartesian Join) "或“叉乘(Product) ",它是所有類型的內(nèi)連接的基礎(chǔ)。
如果把表視為行記錄的集合,那么交叉連接即返回這兩個(gè)集合的笛卡爾積,返回到結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一張表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)。這其實(shí)等價(jià)于內(nèi)連接的連接條件為“永真” ,或連接條件不存在。如果A和B是兩個(gè)集合,它們的交叉連接就記為: A x B.
定義線路表與車輛表的交叉連接(笛卡爾積) 。
示例:
實(shí)現(xiàn)線路表與車輛表笛卡爾積
SELECT COUNT(*) FROM line CROSS JOIN vehicle
語(yǔ)法:
SELECT fieldlist FROM table1 [INNER] JOIN table2 ON table1.column1=table2.column2 [WHERE condition]
示例1:
使用內(nèi)連接獲取車輛型號(hào)含有“DD”字樣的車輛信息和司機(jī)信息,要求車輛信息為全部列,司機(jī)信息中只需包含姓名和身份證
SELECT v.*,d.name,d.licenseNo FROM vehicle v JOIN driver d ON v.driverID=d.driverID WHERE model LIKE '%DD%'
示例2:
使用內(nèi)連接獲取年齡大于35歲的司機(jī)信息和該司機(jī)所駕駛的車輛信息,要求車輛信息為全部列,司機(jī)信息中只包含姓名、出生年月和電話
SELECT v.*,d.name,d.licenseNo,d.phone FROM vehicle v INNER JOIN driver d ON v.driverID=d.driverID WHERE CEIL(DATEDIFF(NOW(),birthday)/365)>35
自然連接(Natural Join)是一種特殊的內(nèi)連接,它要求相連接的兩張表的連接依據(jù)列心須是相同的字段(字段?相同,字段屬性相同)。在自然連接中兩張表的所有名稱相同的列都將被比較,并且在結(jié)果集中把重復(fù)的列去掉,結(jié)果集中兩張表中名稱相同的列僅出現(xiàn)一次。而普通的內(nèi)連接并不去掉重復(fù)的列。(部分?jǐn)?shù)據(jù)庫(kù)不支持自然連接,saL Server等。)
自然連接的語(yǔ)法如下:
SELECT fieldlist FROM table1 NATURAL JOIN table2 [WHERE condition]
示例:
使用自然連接獲取車輛型號(hào)含有“DD”字樣的車輛信息和司機(jī)信息,要求車輛信息為全部列,司機(jī)信息中只需包含姓名和身份證
SELECT v.*,d.name,d.licenseNo FROM vehicle v NATURAL JOIN driver d WHERE model LIKE '%DD%'
如果查詢的信息來(lái)源于多張表,則可通過(guò)兩兩相連的方式建立多表連接查詢。
以下為三表連接查詢的語(yǔ)法:
SELECT fieldlist FROM table1 JOIN table2 ON table1.column1=table2.column2_1 JOIN table3 ON table2.column2_2=table3.column3 [WHERE condition]
說(shuō)明:
(1)table2與table1和table3兩兩相連。
(2)三表以上連接查詢的方法與三表連接查詢的方法一樣,均是通過(guò)兩兩相連的方式實(shí)現(xiàn)。
示例1:
獲取所有非空調(diào)車的車牌號(hào)、型號(hào)和司機(jī)姓名、所屬線路的線路好、起點(diǎn)站和終點(diǎn)站信息
SELECT d.name,v.plateNo,v.model,l.lineNo,l.from_station,l.end_station FROM vehicle v JOIN driver d ON v.driverID=d.driverID JOIN line l ON v.lineID=l.lineID WHERE type='非空調(diào)車'
示例2:
獲取公交二公司所有司機(jī)信息。要求輸出司機(jī)姓名、身份證、性別和電話。
SELECT d.name,d.licenseNo,d.gender,d.phone FROM vehicle v JOIN driver d ON v.driverID JOIN line l ON v.lineID=l.lineID WHERE company='公交二公司'
如果在FROM子句中,直接列出所有要連接的表,然后在WHERE子句中指定連接條件,此為簡(jiǎn)單多表查詢,它與內(nèi)連接功能相同
使用兩表連接查詢語(yǔ)法格式如下:
SELECT fieldlist FROM table1,table2 WHERE table1.column1=table2.column2 [AND 其他條件]
使用三表連接查詢語(yǔ)法格式如下:
SELECT fieldlist FROM table1,table2,table3 WHERE table1.column1=table2.column2_1 AND table2.column2_2=table3.colemn3 [AND 其他條件]
示例:
獲取所有非空調(diào)車的車牌號(hào)、型號(hào)和司機(jī)姓名、所屬線路的線路好、起點(diǎn)站和終點(diǎn)站信息
SELECT d.name,v.plateNo,v.model,l.lineNo,l.from_station,l.end_station FROM vehicle v,driver d,line l WHERE v.driverID=d.driverID AND v.lineID=l.lineID AND type='空調(diào)車'
以上就是怎么在MySQL中實(shí)現(xiàn)連接查詢,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。