left join

從網(wǎng)站建設(shè)到定制行業(yè)解決方案,為提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)服務(wù)體系,各種行業(yè)企業(yè)客戶提供網(wǎng)站建設(shè)解決方案,助力業(yè)務(wù)快速發(fā)展。創(chuàng)新互聯(lián)公司將不斷加快創(chuàng)新步伐,提供優(yōu)質(zhì)的建站服務(wù)。
join
主外鍵是兩種對(duì)表的約束。
例如:
學(xué)生表student(學(xué)號(hào)(id),姓名(name),性別(sex))
表內(nèi)有:1,aa,女
課程表subject(課程編號(hào)(id),課程名(name))
表內(nèi)有:1,語(yǔ)文
成績(jī)表grade(成績(jī)編號(hào)(id),學(xué)號(hào)(stu_id),課程號(hào)(sub_id),成績(jī)(grade))
表內(nèi)有:1,1,1,90
成績(jī)表的學(xué)號(hào)就是學(xué)生表的學(xué)號(hào)相對(duì)應(yīng),并且為學(xué)生表的主鍵,這樣就稱成績(jī)表中的學(xué)號(hào)是學(xué)生表的外鍵,同理,成績(jī)表中的課程號(hào)是課程表的外鍵。
select * from ?student as s inner join subject as su on su.stu_id=s.id inner join grade as g on g.sub_id=su.id where 1.
擴(kuò)展資料:
注意事項(xiàng)
SQL 連接(JOIN) 子句用于把來(lái)自兩個(gè)或多個(gè)表的行結(jié)合起來(lái),基于這些表之間的共同字段。連接的結(jié)果可以在邏輯上看作是由SELECT語(yǔ)句指定的列組成的新表。
左連接與右連接的左右指的是以兩張表中的哪一張為基準(zhǔn),它們都是外連接。外連接就好像是為非基準(zhǔn)表添加了一行全為空值的萬(wàn)能行,用來(lái)與基準(zhǔn)表中找不到匹配的行進(jìn)行匹配。
假設(shè)兩個(gè)沒(méi)有空值的表進(jìn)行左連接,左表是基準(zhǔn)表,左表的所有行都出現(xiàn)在結(jié)果中,右表則可能因?yàn)闊o(wú)法與基準(zhǔn)表匹配而出現(xiàn)是空值的字段。
不同的 SQL JOIN可以使用的不同的 SQL JOIN 類型:
INNER JOIN:如果表中有至少一個(gè)匹配,則返回行
LEFT JOIN:即使右表中沒(méi)有匹配,也從左表返回所有的行
RIGHT JOIN:即使左表中沒(méi)有匹配,也從右表返回所有的行
FULL JOIN:只要其中一個(gè)表中存在匹配,則返回行(MySQL不支持FULL JOIN)
例如:
mysql select * from access_log;
+-----+---------+-------+------------+
| aid | site_id | count | date? ? ? ?|
+-----+---------+-------+------------+
|? ?1 |? ? ? ?1 |? ? 45 | 2016-05-10 |
|? ?2 |? ? ? ?3 |? ?100 | 2016-05-13 |
|? ?3 |? ? ? ?1 |? ?230 | 2016-05-14 |
|? ?4 |? ? ? ?2 |? ? 10 | 2016-05-14 |
|? ?5 |? ? ? ?5 |? ?205 | 2016-05-14 |
|? ?6 |? ? ? ?4 |? ? 13 | 2016-05-15 |
|? ?7 |? ? ? ?3 |? ?220 | 2016-05-15 |
|? ?8 |? ? ? ?5 |? ?545 | 2016-05-16 |
|? ?9 |? ? ? ?3 |? ?201 | 2016-05-17 |
+-----+---------+-------+------------+
9 rows in set
方法和操作步驟如下:
1、首先,創(chuàng)建一個(gè)測(cè)試表,如下圖所示,然后進(jìn)入下一步。
2、其次,插入測(cè)試數(shù)據(jù),如下圖所示,然后進(jìn)入下一步。
3、接著,完成上述步驟后,查詢表中的數(shù)據(jù),“select t.* from test_tbl2 t?”,如下圖所示,然后進(jìn)入下一步。
4、最后,完成上述步驟后,編寫(xiě)sql,兩個(gè)表通過(guò)pid與id關(guān)聯(lián), “select t1.*, t2.* from test_tbl1 t1 join test_tbl2 t2 on t1.p_id = t2.id;”,如下圖所示。這樣,問(wèn)題就解決了。
來(lái)自MySQL的學(xué)習(xí)筆記,寫(xiě)的不對(duì)的地方大家多多指教哦
什么是外鍵?
假設(shè)有 2 個(gè)表,分別是表 A 和表 B,它們通過(guò)一個(gè)公共字段“id”發(fā)生關(guān)聯(lián)關(guān)系,我們把這個(gè)關(guān)聯(lián)關(guān)系叫做 R。如果“id”在表 A 中是主鍵,那么,表 A 就是這個(gè)關(guān)系 R 中的主表。相應(yīng)的,表 B 就是這個(gè)關(guān)系中的從表,表 B 中的“id”,就是表 B 用來(lái)引用表 A 中數(shù)據(jù)的,叫外鍵。所以,外鍵就是從表中用來(lái)引用主表中數(shù)據(jù)的那個(gè)公共字段。
語(yǔ)法結(jié)構(gòu):
在創(chuàng)建表時(shí)添加外鍵約束:
在修改表時(shí)定義外鍵約束:
例子1:創(chuàng)建表時(shí)添加外鍵約束
首先創(chuàng)建主表:importhead
創(chuàng)建從表:test_mysql.importdetails
查詢外鍵約束的相關(guān)信息:
查詢結(jié)果為:
例子2:修改表時(shí)定義外鍵約束
修改表時(shí)定義從表test_mysql.importdetails的外鍵約束
刪除外鍵約束使用DROP,語(yǔ)法結(jié)構(gòu)為:
例子:刪除從表test_mysql.importdetails的外鍵約束
在 MySQL 中,有 2 種類型的連接,分別是內(nèi)連接(INNER JOIN)和外連接(OUTER JOIN)。
在 MySQL 里面,關(guān)鍵字 JOIN、INNER JOIN、CROSS JOIN 的含義是一樣的,都表示內(nèi)連接。我們可以通過(guò) JOIN 把兩個(gè)表關(guān)聯(lián)起來(lái),來(lái)查詢兩個(gè)表中的數(shù)據(jù)。
例子:有一張銷售表,如下圖:
有一張會(huì)員信息表,如下圖:
通過(guò)內(nèi)連接,查詢會(huì)員的銷售記錄:
運(yùn)行語(yǔ)句,結(jié)果如下:
根據(jù)上面的結(jié)果,其實(shí)可以得知:內(nèi)連接查詢到結(jié)果集為兩個(gè)表的交集部分。
跟內(nèi)連接只返回符合連接條件的記錄不同的是,外連接還可以返回表中的所有記錄,它包括兩類,分別是左連接和右連接。
例子1:左外連接
如果需要查詢所有銷售記錄,則可以使用左外連接
運(yùn)行語(yǔ)句,結(jié)果為:
從上面的結(jié)果可以得知,LEFT JOIN左邊的表會(huì)返回全部記錄,而右邊的表只返回符合連接條件的記錄
例子2:右外連接:
運(yùn)行語(yǔ)句,結(jié)果為:
從上面的結(jié)果可以得知,RIGHT JOIN右邊的表會(huì)返回全部記錄,而左邊的表只返回符合連接條件的記錄
第一:內(nèi)聯(lián)(inner join)
如果想把用戶信息、積分、等級(jí)都列出來(lái),那么一般會(huì)這樣寫(xiě):
select * from T1, T3 where T1.userid = T3.userid
(其實(shí)這樣的結(jié)果等同于select * from T1 inner join T3 on T1.userid=T3.userid )。
把兩個(gè)表中都存在userid的行拼成一行(即內(nèi)聯(lián)),但后者的效率會(huì)比前者高很多,建議用后者(內(nèi)聯(lián))的寫(xiě)法。
SQL語(yǔ)句:
select * from T1 inner join T2 on T1.userid = T2.userid
運(yùn)行結(jié)果
T1.userid username password T2.userid jifen dengji
1 jack jackpwd 1 20 3
第二:左聯(lián)(left outer join)
顯示左表T1中的所有行,并把右表T2中符合條件加到左表T1中;
右表T2中不符合條件,就不用加入結(jié)果表中,并且NULL表示。
SQL語(yǔ)句:
select * from T1 left outer join T2 on T1.userid = T2.userid
運(yùn)行結(jié)果
T1.userid username password T2.userid jifen dengji
1 jack jackpwd 1 20 3
2 owen owenpwd NULL NULL NULL
第三:右聯(lián)(right outer join)。
顯示右表T2中的所有行,并把左表T1中符合條件加到右表T2中;
左表T1中不符合條件,就不用加入結(jié)果表中,并且NULL表示。
SQL語(yǔ)句:
select * from T1 right outer join T2 on T1.userid = T2.userid
運(yùn)行結(jié)果
T1.userid username password T2.userid jifen dengji
1 jack jackpwd 1 20 3
NULL NULL NULL 3 50 6
第四:全聯(lián)(full outer join)
顯示左表T1、右表T2兩邊中的所有行,即把左聯(lián)結(jié)果表 + 右聯(lián)結(jié)果表組合在一起,然后過(guò)濾掉重復(fù)的。
SQL語(yǔ)句:
select * from T1 full outer join T2 on T1.userid = T2.userid
分享名稱:在mysql中怎么建立表關(guān)聯(lián),在mysql中怎么建立表關(guān)聯(lián)數(shù)據(jù)
瀏覽地址:http://chinadenli.net/article28/dsgihcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站維護(hù)、企業(yè)網(wǎng)站制作、關(guān)鍵詞優(yōu)化、動(dòng)態(tài)網(wǎng)站、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)