程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 數據表的左連接與右連接,數據表連接連接

數據表的左連接與右連接,數據表連接連接

編輯:Oracle教程

數據表的左連接與右連接,數據表連接連接


http://www.cnblogs.com/LeoTerry/archive/2010/03/26/1696988.html

 

數據表的連接有:
1、內連接(自然連接): 只有兩個表相匹配的行才能在結果集中出現
2、外連接: 包括
(1)左外連接 (左邊的表不加限制)
(2)右外連接(右邊的表不加限制)
(3)全外連接(左右兩表都不加限制)
3、自連接(連接發生在一 張基表內)

sql標准語法:
select table1.column,table2.column
from table1 [inner | left | right | full ] join table2 on table1.column1 = table2.column2;

inner join 表示內連接;left join表示左外連接;right join表示右外連接;full join表示完全外連接;
on子句用於指定連接條件。注意,如果使用from子句指定內、外連接,則必須要使用on子句指定連接條件;
如果使用(+)操作符指定外連接,則必須使用where子句指定連接條件。

如果主表的主鍵列和從表的外部鍵列名稱相同,那麼可以使用 natural join 關鍵字自動執行內連接操作。
select  dname,ename from dept natural join emp;


select a.studentno, a.studentname, b.classname
from students a, classes b
where a.classid(+) = b.classid;
STUDENTNO STUDENTNAM CLASSNAME
---------- ---------- ------------------------------
1 周虎     一年級一班
2 周林     一年級二班
一年級三班
以上語句是右連接:
即"(+)"所在位置的另一側為連接的方向,右連接說明 等號右側的所有
記錄均會被顯示,無論其在左側是否得到匹配。也就是說上例中,無
論會不會出現某個班級沒有一個學生的情況,這個班級的 名字都會在
查詢結構中出現。
反之:
select a.studentno, a.studentname, b.classname
from students a, classes b
where a.classid = b.classid(+);
STUDENTNO STUDENTNAM CLASSNAME
---------- ---------- ------------------------------
1 周虎     一年級一班
2 周林     一年級二班
3 鐘林達
則是左連接,無論這個學生有沒有一個能在一個班級中得到匹配的部門號,
這 個學生的記錄都會被顯示。
select a.studentno, a.studentname, b.classname
from students a, classes b
where a.classid = b.classid;
這個則是通常 用到的內連接,顯示兩表都符合條件的記錄
總之,
左連接顯示左邊全部的和右邊與左邊相同的
右連接顯示右邊全部的和左邊與右邊 相同的
內連接是只顯示滿足條件的! ......

----------------------------------------------------------------
補充:
使用(+)的注意事項:
1.(+)操作符只能出現在where子句中,並且不能與outer join語法同時使用。
2.當使用(+)操作符執行外連接時,如果在where子句中包含有多個條件,則必須在所有條件中都包含(+)操作符。
3.(+)操作符只適用於列,而不能用在表達式上。
4.(+)操作符不能與or和in操作符一起使用。
5.(+)操作符只能用於實現左外連接和右外連接,而不能用於實現完全外連接。
for example:
select a.dname,b.ename from dept a,emp b where a.deptno = b.deptno(+) and b.deptno(+) = 10; ===============================

以下的文章主要是通過代碼的方式來引出Oracle join的正確用法,其在實際中的應用比例還是占為多數的,如果你對這一新開發的技術,心存好奇的話,以下的文章將會揭開它的神秘面紗。希望你在浏覽完之後會有所收獲。



 

內連接



左連接



右連接



完全連接



迪卡爾



9i和sqlserver一樣 left join,right join,full join

 

分為1. INNER JOIN 2. LEFT JOIN 3. RIGHT JOIN 4.LEFT OUTER JOIN

首先設定一個我們要用的兩個表

表A 表B

ID NAME ID CLASS

1 IBM 1 C1

2 SONY 3 C3

3 BMW 4 C4

1 INNER JOIN: SELECT * FROM A INNER JOIN B ON A.ID=B.ID

得表 ID NAME CLASS

1 IBM C1

3 BMW C3

對了 就是 兩個表的ID都存在並相同 得到這兩個表的組合表

2 LEFT JOIN : SELECT * FROM A LEFT JOIN B ON A.ID=B.ID

得表 ID NAME CLASS

1 IBM C1

2 SONY null

3 BMW C3

沒暈吧 如果還有方向感 就行 LEFT(左) 得到的是A(left語句的左邊的表)的所有記錄 而B表對應的記錄沒有的話也要補齊 (真霸道! 呵呵)

3 RIGHT JOIN : SELECT * FROM A RIGHT JOIN B ON A.ID=B.ID

得表 ID NAME CLASS

1 IBM C1

3 BMW C3

4 null C4

對了RIGHT(右) 得到的是B(right語句的右邊的表)的所有記錄 而A表對應的記錄沒有的話也要補齊 (我也翻身了! 呵呵)

4 FULL OUTER JOIN: SELECT * FROM A FULL OUTER JOIN B ON A.ID=B.ID

得表 ID NAME CLASS

1 IBM C1

2 SONY null

3 BMW C3

4 null C4

上述的相關內容就是對Oracle join的用法的描述,希望會給你帶來一些幫助在此方面。

------------------------------------------   數據表的連接有: 
1、內連接(自然連接): 只有兩個表相匹配的行才能在結果集中出現 
2、外連接: 包括 
(1)左外連接(左邊的表不加限制) 
(2)右外連接(右邊的表不加限制) 
(3)全外連接(左右兩表都不加限制) 
3、自連接(連接發生在一張基表內) 

select a.studentno, a.studentname, b.classname 
  from students a, classes b 
  where a.classid(+) = b.classid;
 

STUDENTNO STUDENTNAM CLASSNAME 
---------- ---------- ------------------------------ 
    1 周虎     一年級一班 
    2 周林     一年級二班 
            一年級三班 

以上語句是右連接: 
即"(+)"所在位置的另一側為連接的方向,右連接說明等號右側的所有 
記錄均會被顯示,無論其在左側是否得到匹配。也就是說上例中,無 
論會不會出現某個班級沒有一個學生的情況,這個班級的名字都會在 
查詢結構中出現。 


反之: 
select a.studentno, a.studentname, b.classname 
  from students a, classes b 
  where a.classid = b.classid(+);
 

STUDENTNO STUDENTNAM CLASSNAME 
---------- ---------- ------------------------------ 
    1 周虎     一年級一班 
    2 周林     一年級二班 
    3 鐘林達 

則是左連接,無論這個學生有沒有一個能在一個班級中得到匹配的部門號, 
這個學生的記錄都會被顯示。 

select a.studentno, a.studentname, b.classname 
  from students a, classes b 
  where a.classid = b.classid;
 

這個則是通常用到的內連接,顯示兩表都符合條件的記錄 
總之, 
左連接顯示左邊全部的和右邊與左邊相同的 
右連接顯示右邊全部的和左邊與右邊相同的 
內連接是只顯示滿足條件的!

mysql數據庫的左連接,右連接,內鏈接有何不同

一般所說的左連接,外連接是指左外連接,右外連接。做個簡單的測試你看吧。
先說左外連接和右外連接:
[TEST1@orcl#16-12月-11] SQL>select * from t1;

ID NAME
---------- --------------------
1 aaa
2 bbb

[TEST1@orcl#16-12月-11] SQL>select * from t2;

ID AGE
---------- ----------
1 20
3 30
左外連接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 left join t2 on t1.id=t2.id;

ID NAME ID AGE
---------- -------------------- ---------- ----------
1 aaa 1 20
2 bbb
右外連接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 right join t2 on t1.id=t2.id;

ID NAME ID AGE
---------- -------------------- ---------- ----------
1 aaa 1 20
3 30

從上面的顯示你可以看出:左外連接是以左邊的表為基准。通俗的講,先將左邊的表全部顯示出來,然後右邊的表id與左邊表id相同的記錄就“拼接”上去,比如說id為1的記錄。如果沒有匹配的id,比如說t1中id為2的t2中就沒有。那邊就以null顯示。
右外連接過程正好相反。

再看內連接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 inner join t2 on t1.id=t2.id;

ID NAME ID AGE
---------- -------------------- ---------- ----------
1 aaa 1 20

看到沒有? 只有一條記錄。內連接就是只取出符合過濾條件的記錄 也就是t1.id=t2.id 那麼符合t1.id=t2.id的記錄只有id=1這一條,所以只顯示一條。 不像外連接,是將你作為基准的表(左外連接就是左邊表為基准,右外連接就是右邊表為基准)的所有行都顯示出來。

綜上所述,你應該能明白了吧?如果不明白請留言。...余下全文>>
 

數據庫中兩個表怎分左右,來確定左連接或右連接?

sql裡面的餓
左連接 關鍵字語法
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
右連接 JOIN 關鍵字語法
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved