新聞中心
數(shù)據(jù)庫(kù)技術(shù)一直是現(xiàn)代化信息管理系統(tǒng)中非常重要的一部分,可以說(shuō)是現(xiàn)代化管理系統(tǒng)的核心。在現(xiàn)代化的企業(yè)信息管理系統(tǒng)中,數(shù)據(jù)庫(kù)系統(tǒng)承擔(dān)了重要的角色,它是維護(hù)企業(yè)內(nèi)部業(yè)務(wù)信息的核心。而在數(shù)據(jù)庫(kù)系統(tǒng)中,join技術(shù)是一項(xiàng)非常重要的技術(shù),它是完成多表查詢的重要方法,本文將深入介紹join技術(shù)的實(shí)用技巧。

成都創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站制作、做網(wǎng)站與策劃設(shè)計(jì),鲅魚(yú)圈網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:鲅魚(yú)圈等地區(qū)。鲅魚(yú)圈做網(wǎng)站價(jià)格咨詢:18982081108
一、join的基本概念
(join)連接指的是在SQL語(yǔ)言中,使用多個(gè)表查找有關(guān)系的數(shù)據(jù)的一種操作。在SQL中使用join操作可以很容易的從多個(gè)表中查詢一些數(shù)據(jù)。在join操作中通常包含兩個(gè)部分:一個(gè)是連接兩個(gè)或多個(gè)表的條件,另一個(gè)是在返回結(jié)果集中選擇需要的列。
join的類型:
1. Inner join:內(nèi)連接,只返回兩個(gè)表中交集部分的記錄,其他不相關(guān)的記錄會(huì)被忽略。
2. Left join:左連接,會(huì)返回左表中的所有數(shù)據(jù)和右表中匹配的數(shù)據(jù),但是如果右表中沒(méi)有匹配的數(shù)據(jù),則該行不會(huì)被返回。
3. Right join:右連接,與左連接類似,只不過(guò)是右表中的所有數(shù)據(jù)和左表中匹配的數(shù)據(jù)返回,如果左表中沒(méi)有匹配的數(shù)據(jù),則該行不會(huì)被返回。
4. Full outer join:全外連接,返回所有在表A和表B中的所有數(shù)據(jù),等同于左外連接和右外連接的并集。
二、使用join技巧
1. 使用合適的條件進(jìn)行join
在使用多表查詢時(shí),join是最常見(jiàn)的查詢方式之一,但在使用的時(shí)候一定要注意設(shè)置合適的條件。合適的條件指的是根據(jù)實(shí)際業(yè)務(wù)邏輯關(guān)系來(lái)設(shè)置的條件,這樣能夠保證查詢結(jié)果的準(zhǔn)確性和可靠性。
2. 使用inner join替代子查詢
在一些查詢中,我們會(huì)使用到子查詢,這樣會(huì)增加查詢的開(kāi)銷和難度。如果能夠使用inner join操作替代子查詢,這樣可以有效避免在子查詢內(nèi)部進(jìn)行遍歷操作的不必要開(kāi)銷。
假設(shè)有以下兩個(gè)表:
students表:
| id | name | gender | age | job |
|—-|——–|——–|——–|——–|
| 101 | 張三 | 男 | 22 | 學(xué)生 |
| 102 | 李四 | 女 | 23 | 學(xué)生 |
| 103 | 王五 | 男 | 21 | 學(xué)生 |
departments表:
| id | name |
|—-|——–|
| 1 | 計(jì)算機(jī)科學(xué)與技術(shù) |
| 2 | 工商管理 |
使用子查詢的語(yǔ)句:
SELECT name FROM students WHERE id in (SELECT student_id FROM departments WHERE name=’計(jì)算機(jī)科學(xué)與技術(shù)’)
使用inner join替代的語(yǔ)句:
SELECT students.name FROM students INNER JOIN departments ON students.id=departments.student_id WHERE departments.name=’計(jì)算機(jī)科學(xué)與技術(shù)’
這兩句SQL語(yǔ)句的結(jié)果都是返回從學(xué)生表中找出所屬計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的學(xué)生名字,但是使用inner join替代子查詢的語(yǔ)句的效率更高。
3. 使用表的別名
當(dāng)我們?cè)谑褂胘oin操作的時(shí)候,針對(duì)每個(gè)表加上一個(gè)別名可以使得SQL語(yǔ)句更易讀,這點(diǎn)非常重要,因?yàn)樵趯?shí)際應(yīng)用中我們經(jīng)常會(huì)處理多個(gè)表之間的關(guān)系,而表的別名能極大程度地減少因?yàn)楸砻L(zhǎng)而影響代碼可讀性的情況。
例如,我們有兩個(gè)表A和B需要join操作,這里我們給表A和B分別設(shè)置別名為A和B:
SELECT A.id, A.name, B.age FROM tableA AS A INNER JOIN tableB AS B ON A.id=B.id
4. 盡量避免使用過(guò)多的join操作
在實(shí)際情況下,我們可能會(huì)遇到需要join多個(gè)表的情況,但是通過(guò)實(shí)踐得出,如果使用大量的join操作,不僅會(huì)增加查詢的難度,同時(shí)也會(huì)增加查詢的開(kāi)銷,導(dǎo)致查詢的效率變低。
5. 常用的join使用技巧
在實(shí)際應(yīng)用中,我們可能不僅會(huì)用到上述提到的4種join類型,還會(huì)使用到其他一些常用的技巧:
(1)使用where代替join
在一些情況下,使用where語(yǔ)句代替join可以有效減少查詢的開(kāi)銷,提高查詢的效率。例如:
SELECT A.id, B.name FROM tableA AS A, tableB AS B WHERE A.id = B.id;
(2)重復(fù)項(xiàng)去除
在使用join時(shí),往往會(huì)出現(xiàn)重復(fù)項(xiàng),這時(shí)可以使用DISTINCT關(guān)鍵字來(lái)去除重復(fù)項(xiàng)。例如:
SELECT DISTINCT A.id, B.name FROM tableA AS A INNER JOIN tableB AS B ON A.id=B.id
(3)使用外連接以及子查詢等高級(jí)查詢技巧
在實(shí)際應(yīng)用中,為了有效完成復(fù)雜業(yè)務(wù)邏輯,需要使用高級(jí)查詢技巧。常見(jiàn)的高級(jí)查詢技巧有:使用外連接、自連接、子查詢等操作,其中使用外連接可以同時(shí)查詢兩個(gè)表中的全部數(shù)據(jù),而使用子查詢可以在原來(lái)的查詢結(jié)果上繼續(xù)進(jìn)行查詢。
三、
通過(guò)上述介紹,我們對(duì)join操作有了更加深入的了解,并掌握了一些實(shí)際應(yīng)用場(chǎng)景下的技巧。需要特別強(qiáng)調(diào)的是,在使用SQL語(yǔ)言進(jìn)行查詢時(shí),一定要根據(jù)實(shí)際情況和需求進(jìn)行合理的選擇和設(shè)計(jì),才能更快地獲得準(zhǔn)確的查詢結(jié)果。同時(shí),隨著數(shù)據(jù)量的增加,查詢效率是需要關(guān)注的一個(gè)問(wèn)題,因此,我們需要不斷學(xué)習(xí)和掌握更加優(yōu)秀的查詢工具來(lái)提高查詢效率。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
SQL 中 left join具體的用法,更好能舉出例子.
給個(gè)通俗的解釋吧.
例表a
aid adate
1 a1
2 a2
3 a3
表b
bid bdate
1 b1
2 b2
4 b4
兩個(gè)表a,b相連逗返接,要取出id相同的字段
select * from a inner join b on a.aid = b.bid這是僅取出匹配的數(shù)據(jù).
此時(shí)的取出的是:
1 a1 b1
2 a2 b2
那么left join 指:
select * from a left join b on a.aid = b.bid
首先取出a表中所有數(shù)據(jù),然后再加上與a,b匹配的的數(shù)據(jù)
此時(shí)的取出的是:
1 a1 b1
2 a2 b2
3 a3 空字符山悄饑
同樣的也有right join
指的是首先取出運(yùn)大b表中所有數(shù)據(jù),然后再加上與a,b匹配的的數(shù)據(jù)
此時(shí)的取出的是:
1 a1 b1
2 a2 b2
4 空字符 b4
連接查詢
通過(guò)連接運(yùn)算符可以實(shí)現(xiàn)多個(gè)表查詢。連接是關(guān)系數(shù)據(jù)庫(kù)模型的主要特點(diǎn),也是它區(qū)別于其它類型數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)標(biāo)志。
在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)中,表建立時(shí)各數(shù)據(jù)畢渣肆之間的關(guān)系不必確定,常把一個(gè)實(shí)體的所有信息存放在一個(gè)表中。當(dāng)檢索數(shù)據(jù)時(shí),通過(guò)連接操作查詢出存放在多個(gè)表中的不同實(shí)體的信息。連接操作給用戶帶來(lái)很大的靈活性,他們可以在任何時(shí)候增加新的數(shù)據(jù)類型。為不同實(shí)體創(chuàng)建新的表,爾后通過(guò)連接進(jìn)行查詢。
連接可以在SELECT 語(yǔ)句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出連接時(shí)有助于將連接操作與WHERE子句中的搜索條件區(qū)分開(kāi)來(lái)。所以,在Transact-SQL中推薦使用這種方法。
SQL-92標(biāo)準(zhǔn)所定義的FROM子句的連接語(yǔ)法格式為:
FROM join_table join_type join_table
其中join_table指出參與連接操作的表名,連接可以對(duì)同一個(gè)表操作,也可以對(duì)多表操作,對(duì)同一個(gè)表操作的連接又稱做自連接。
join_type 指出連接類型,可分為三種:內(nèi)連接、外連接和交叉連接。內(nèi)連接(INNER JOIN)使用比較運(yùn)算符進(jìn)行表間某(些)列數(shù)據(jù)的比較操作,并列出這些表中與連接條件相匹配的數(shù)據(jù)行。根據(jù)所使用的比較方式不同,內(nèi)連接又分為等值連接、自然連接和不等連接三種。
外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN)、右外連接(RIGHT OUTER JOIN或RIGHT JOIN)和全外連接(FULL OUTER JOIN或FULL JOIN)三種。與內(nèi)連接不同的是,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)表(全外連接時(shí))中所有符合搜索條件的數(shù)據(jù)行。
交叉連接(CROSS JOIN)沒(méi)有WHERE 子句,它返回連接表中所有數(shù)據(jù)行的笛卡爾積,其結(jié)果中的數(shù)據(jù)行數(shù)等于之一個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)。
連接操作中的ON (join_condition) 子句指出連接條件,它由被連接表中的列和比較運(yùn)算符、邏輯運(yùn)算符等構(gòu)成。
無(wú)論哪種連接都不能對(duì)text、ntext和image數(shù)據(jù)類型列進(jìn)行直接連接,但可以對(duì)這三種列進(jìn)行間接連接。例如:
SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)
(一)內(nèi)連接
內(nèi)連接手轎查詢操作列出與連接條件匹配的數(shù)據(jù)行,它使用比較運(yùn)算符比較被連接列的列值。內(nèi)連接分三種:
1、等值連接:在連接條件中使用等于號(hào)(=)運(yùn)算符比較被連接列的列值,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。
2、不等連接: 在連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符比較被連接的列的列值。這些運(yùn)算符包括>、>=、、!。
3、自然連接:在連接條件中使用等于(=)運(yùn)算符比較被連接列的列值,但它使用選擇列表指出查詢結(jié)果中所包括的列,并刪除連接表中的重復(fù)列。
例,下面使用等值連接列出authors和publishers表中位于同一城市的作者和出版社:
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使梁侍用自然連接,在選擇列表中刪除authors 和publishers 表中重復(fù)列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
(二)外連接
內(nèi)連接時(shí),返回查詢結(jié)果中的僅是符合查詢條件( WHERE 搜索條件或 HAVING 條件)和連接條件的行。而采用外連接時(shí),它返回到查詢結(jié)果中的不僅包含符合連接條件的行,而且還包括左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)邊接表(全外連接)中的所有數(shù)據(jù)行。
如下面使用左外連接將論壇內(nèi)容和作者信息連接起來(lái):
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username
下面使用全外連接將city表中的所有作者以及user表中的所有作者,以及他們所在的城市:
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
(三)交叉連接
交叉連接不帶WHERE 子句,它返回被連接的兩個(gè)表所有數(shù)據(jù)行的笛卡爾積,返回到結(jié)果中的數(shù)據(jù)行數(shù)等于之一個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)。
例,titles表中有6類圖書(shū),而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數(shù)將等
于6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
數(shù)據(jù)庫(kù)中的“INNER JOIN”是什么意思?
INNER JOIN 內(nèi)連鉛蘆叢接
內(nèi)連接就是關(guān)聯(lián)的兩張或多張表中,根據(jù)槐櫻關(guān)聯(lián)條件,顯示所有匹配的記錄,匹配不上的,不顯示。
以下兩種是標(biāo)準(zhǔn)寫(xiě)法:
SQL> SELECT ename,sal
2 FROM emp2 e INNER JOIN dept2 d
3 ON e.deptno=d.deptno;
也可以省略inner關(guān)鍵字,直接寫(xiě)join
SQL> SELECT ename,sal
2 FROM emp2 e JOIN dept2 d
3 ON e.deptno=d.deptno;
如果兩張表的關(guān)聯(lián)字段名相同,也可以使用USING子嘩嘩句。
SQL> SELECT ename,sal
2 FROM emp2 e JOIN dept2 d
3 USING(deptno);
在數(shù)據(jù)庫(kù)中,INNER JOIN 關(guān)鍵字在逗笑表中存在至缺巧少山扮含一個(gè)匹配時(shí)返回行。
具體語(yǔ)法如下:
-from 樹(shù)懶學(xué)堂
注釋:INNER JOIN 與 JOIN 是相同的。
inner join on, left join on, right join on講解(轉(zhuǎn)載)
1.理論
只要兩個(gè)表的公共字段有匹配值,就將這兩個(gè)表中的記錄組合起來(lái)。
個(gè)人理解:以一個(gè)共同的字段求兩個(gè)表中符合要求的交集,并將每個(gè)表符合要求的記錄以共同的字段為牽引合并起來(lái)。
語(yǔ)法
FROM table1 INNER JOIN table2 ON table1 . field1 compopr table2 . field2
INNER JOIN 操作包含以下部分:
部分說(shuō)明
table1, table2要組合其中的記錄的表的名稱。
field1,搏豎field2要聯(lián)接的字段的名稱。如果它們不是數(shù)字,則這些字段的數(shù)據(jù)類型必須相同,并且包含同類數(shù)據(jù),但是,它們不必具有相同的名稱。
compopr任何關(guān)系比較運(yùn)算符:“=”、“”、“=”或者“”。
說(shuō)明
可以在任何 FROM 子句中使用 INNER JOIN 操作。這是最常用的聯(lián)接類型。只要兩個(gè)表的公共字段上存在相匹配的值,Inner 聯(lián)接就會(huì)組合這些表中的記錄。
可以將 INNER JOIN 用于 Departments 及 Employees 表,以選擇出每個(gè)部門(mén)的所有雇員。而要選擇所有部分(即明舉使某些部門(mén)中并沒(méi)有被分配雇員)或者所有雇員(即使某些雇員沒(méi)有分配到任何部門(mén)),則可以通過(guò) LEFT JOIN 或者 RIGHT JOIN 操作來(lái)創(chuàng)建外部聯(lián)接。
如果試圖聯(lián)接包含備注或 OLE 對(duì)象數(shù)據(jù)的字段,將發(fā)生錯(cuò)誤。
可以聯(lián)接任何兩個(gè)相似類型的數(shù)字字段。例如,可以聯(lián)接自動(dòng)編號(hào)和長(zhǎng)整型字段,因?yàn)樗鼈兙窍嗨祁愋?。然而,不能?lián)接單精度型和雙精度型類型字段。
下例展示了如何通過(guò) CategoryID 字段聯(lián)接 Categories 和 Products 表:
SELECT CategoryName, ProductName
FROM Categories INNER JOIN Products
ON Categories.CategoryID = Products.CategoryID;
在前面的示例中,CategoryID 是被聯(lián)接字段,但是它不包含在查基槐大詢輸出中,因?yàn)樗话?SELECT 語(yǔ)句中。若要包含被聯(lián)接字段,請(qǐng)?jiān)?SELECT 語(yǔ)句中包含該字段名,在本例中是指 Categories.CategoryID。
也可以在 JOIN 語(yǔ)句中鏈接多個(gè) ON 子句,請(qǐng)使用如下語(yǔ)法:
SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2) OR
ON table1.field3 compopr table2.field3)>;
也可以通過(guò)如下語(yǔ)法嵌套 JOIN 語(yǔ)句:
SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN table3
tablex
ON table3.field3 compopr tablex.fieldx)>
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;
LEFT JOIN 或 RIGHT JOIN 可以嵌套在 INNER JOIN 之中,但是 INNER JOIN 不能嵌套于 LEFT JOIN 或 RIGHT JOIN 之中。
2.操作實(shí)例
表A記錄如下:
aID aNum
a
a
a
a
a
表B記錄如下:
bID bName
實(shí)驗(yàn)如下:
1.left join
sql語(yǔ)句如下:
select * from A
left join B
on A.aID = B.bID
結(jié)果如下:
aID aNumbID bName
a1
a
a
a
aNULLNULL
(所影響的行數(shù)為 5 行)
結(jié)果說(shuō)明:
left join是以A表的記錄為基礎(chǔ)的,A可以看成左表,B可以看成右表,left join是以左表為準(zhǔn)的.
換句話說(shuō),左表(A)的記錄將會(huì)全部表示出來(lái),而右表(B)只會(huì)顯示符合搜索條件的記錄(例子中為: A.aID = B.bID).
B表記錄不足的地方均為NULL.
2.right join
sql語(yǔ)句如下:
select * from A
right join B
on A.aID = B.bID
結(jié)果如下:
aID aNumbID bName
a1
a
a
a
NULLNULL08
(所影響的行數(shù)為 5 行)
結(jié)果說(shuō)明:
仔細(xì)觀察一下,就會(huì)發(fā)現(xiàn),和left join的結(jié)果剛好相反,這次是以右表(B)為基礎(chǔ)的,A表不足的地方用NULL填充.
3.inner join
sql語(yǔ)句如下:
select * from A
innerjoin B
on A.aID = B.bID
結(jié)果如下:
aID aNumbID bName
a1
a
a
a
結(jié)果說(shuō)明:
數(shù)據(jù)庫(kù) join的用法的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫(kù) join的用法,深入了解數(shù)據(jù)庫(kù) join的實(shí)用技巧,SQL 中 left join具體的用法,更好能舉出例子.,數(shù)據(jù)庫(kù)中的“INNER JOIN”是什么意思?的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)-老牌IDC、云計(jì)算及IT信息化服務(wù)領(lǐng)域的服務(wù)供應(yīng)商,業(yè)務(wù)涵蓋IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心)服務(wù)、云計(jì)算服務(wù)、IT信息化、AI算力租賃平臺(tái)(智算云),軟件開(kāi)發(fā),網(wǎng)站建設(shè),咨詢熱線:028-86922220
當(dāng)前標(biāo)題:深入了解數(shù)據(jù)庫(kù)join的實(shí)用技巧(數(shù)據(jù)庫(kù)join的用法)
文章源于:http://m.fisionsoft.com.cn/article/dpecddh.html


咨詢
建站咨詢
