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

2021-08-04 09:26:19 字數 5553 閱讀 9553

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中日期函式的用法,sql 中Dateadd()函式的用法

1.dateadd i n d 將一個日期加上一段期間後的日期。i 設定一個日期 date 所加上的一段期間的單位。譬如 interval d 表示 n的單位為日。i的設定值如下 yyyy year 年 q quarter 季 m month 月 d day 日 w weekday 星期 h hou...

SQL中case,when,then,else的用法是什麼

select case when 1 1 then 1等於1 when 1 2 then 1等於2啦 when 1 3 then 1 3 else 其他等式 end以case開頭,end結束。when和then相當於 如果.那麼 else相當於如果以上都不成立,那麼就。比如 表 taba col1 ...

sql中的查詢問題

select name from user where userid in select id from information where score 60 當選出的id無重複時用這個,如 1,2,3 select name from user where userid in select dis...