SQL中的INNER JOIN和JOIN有什麼區別

時間 2021-08-11 17:04:19

1樓:千鋒教育

使用join連表,缺陷的情況下是inner join,開發中使用的left join和right join屬於outer join,outer join還包括full join

現有兩張表,table a 是左邊的表。table b 是右邊的表。其各有四條記錄,其中有兩條記錄name是相同的:

1.inner join 產生的結果是ab的交集

select * from tablea inner join tableb on tablea.name = tableb.name

2.left [outer] join 產生表a的完全集,而b表中匹配的則有值,沒有匹配的則以null值取代。

select * from tablea left outer join tableb on tablea.name = tableb.name

3.right [outer] join 產生表b的完全集,而a表中匹配的則有值,沒有匹配的則以null值取代。

select * from tablea right outer join tableb on tablea.name = tableb.name

圖示如left join類似。

4.full [outer] join 產生a和b的並集。對於沒有匹配的記錄,則會以null做為值。

select * from tablea full outer join tableb on tablea.name = tableb.name

可以通過is null將沒有匹配的值找出來:

select * from tablea full outer join tableb on tablea.name = tableb.name

where tablea.id is null or tableb.id is null

5. cross join 把表a和表b的資料進行一個n*m的組合,即笛卡爾積。如本例會產生4*4=16條記錄,在開發過程中我們肯定是要過濾資料,所以這種很少用。

select * from tablea cross join tableb

2樓:匿名使用者

沒區別。

1、inner join可以簡寫成join2、left outer join 可以簡寫為left join3、right outer join 可以簡寫為rightjoin4、full outer join 可以簡寫為full join

sql中的inner join和join有什麼區別

3樓:

沒有區別

inner join等價於 join

你可以理解為 join  是 inner join 的縮寫。

leftjoin 等價於 leftouter joinrightjoin 等價於 rightouter join

4樓:匿名使用者

一樣的。

inner join 內連線

內連線就是關聯的兩張或多張表中,根據關聯條件,顯示所有匹配的記錄,匹配不上的,不顯示。

以下兩種是標準寫法:

sql> select ename,sal2 from emp2 e inner join dept2 d3 on e.deptno=d.deptno;

--也可以省略inner關鍵字,直接寫joinsql> select ename,sal2 from emp2 e join dept2 d3 on e.deptno=d.deptno;

--如果兩張表的關聯欄位名相同,也可以使用using子句。

sql> select ename,sal2 from emp2 e join dept2 d3 using(deptno);

--oracle的寫法

sql> select ename,sal2 from emp2 e,dept2 d3 where e.deptno=d.deptno;

5樓:千鋒教育

123456

78910

1112

1314

1516

1718

1920

2122

2324

2526

2728

2930

3132

3334

3536

3738

3940

4142

4344

4546

4748

4950

5152

5354

5556

5758

5960

6162

6364

6566

6768

6970

7172

7374

7576

7778

7980

8182

8384

8586

8788

8990

9192

9394

9596

9798

99100

101102

103104

105table a

aid adate

1 a1

2 a2

3 a3

tableb

bid bdate

1 b1

2 b2

4 b4

兩個表a,b相連線,要取出id相同的欄位

select * from a inner join b on a.aid = b.bid這是僅取出匹配的資料.

此時的取出的是:

1 a1 b1

2 a2 b2

那麼left join 指:

select * from a left join b on a.aid = b.bid

首先取出a表中所有資料,然後再加上與a,b匹配的的資料

此時的取出的是:

1 a1 b1

2 a2 b2

3 a3 空字元

同樣的也有right join

指的是首先取出b表中所有資料,然後再加上與a,b匹配的的資料

此時的取出的是:

1 a1 b1

2 a2 b2

4 空字元 b4

left join 或 left outer join。

左向外聯接的結果集包括 left outer 子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值

二. left join/right join/inner join操作演示

表a記錄如下:

aid anum

1 a20050111

2 a20050112

3 a20050113

4 a20050114

5 a20050115

表b記錄如下:

bid bname

1 2006032401

2 2006032402

3 2006032403

4 2006032404

8 2006032408

實驗如下:

1. left join

sql語句如下:

select * from a

left join b

on a.aid = b.bid

結果如下:

aid anum bid bname

1 a20050111 1 2006032401

2 a20050112 2 2006032402

3 a20050113 3 2006032403

4 a20050114 4 2006032404

5 a20050115 null null

(所影響的行數為 5 行)

結果說明:

left join是以a表的記錄為基礎的,a可以看成左表,b可以看成右表,left join是以左表為準的.

換句話說,左表(a)的記錄將會全部表示出來,而右表(b)只會顯示符合搜尋條件的記錄(例子中為: a.aid = b.bid).

b表記錄不足的地方均為null.

2. right join

sql語句如下:

select * from a

right join b

on a.aid = b.bid

結果如下:

aid anum bid bname

1 a20050111 1 2006032401

2 a20050112 2 2006032402

3 a20050113 3 2006032403

4 a20050114 4 2006032404

null null 8 2006032408

(所影響的行數為 5 行)

結果說明:

仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(b)為基礎的,a表不足的地方用null填充.

3.inner join

sql語句如下:

select * from a

innerjoin b

on a.aid = b.bid

結果如下:

aid anum bid bname

1 a20050111 1 2006032401

2 a20050112 2 2006032402

3 a20050113 3 2006032403

4 a20050114 4 2006032404

結果說明:

很明顯,這裡只顯示出了 a.aid = b.bid的記錄.這說明inner join並不以誰為基礎,它只顯示符合條件的記錄.

sql中varchar和nvarchar有什麼區別

墨汁諾 sql中varchar和nvarchar區別 輸入不同,含義不同。一 輸入不同 varchar 4 可以輸入4個字線,也可以輸入兩個漢字。nvarchar 4 可以輸四個漢字,也可以輸4個字母,但最多四個。二 含義不同 varchar n 長度為n個位元組的可變長度且非unicode的字元資...

SQL中char和varvhar的區別

char 資料型別的列存放固定個數的非unicode字元。varchar資料型別的列存放不固定個數的非unicode字元。固定,就是說如果定義的是5個字元,那麼就分配不個字元,如果你的值是 ab 也分配5個字元,不足的位數補足空格或其他字元 ab 後面不足了3個空格 不固定,就是可變,就是實際多少個...

SQL查詢中in和exists的區別分析

在用in的子查詢中只能返回一列值,比如 where 成績 in select 成績,學號 from 成績表 這種用法是不允許的。exists是一個函式,是根據子查詢有無記錄返回判斷條件的成立,如果子查詢有記錄返回,那麼條件成立,否則不成立,所以子查詢中給出列名無意義的,因此子查詢通常用 返回所有列。...