資料庫外連線,自然連線,內連線,條件連線,等值連線關係及詳解
Join操作基本分為3大類:外連線(細分為:左連線、右連線、全連線)、自然連線、內連線
Join操作的共性:第一步均為將所有參與操作的表進行了一個笛卡兒積,然後才依據各連線
條件進行記錄的篩選
SQL> select * from employees;
NAME |
DEPARTMENT_ID |
SALARY |
Getz |
10 |
3000 |
Davis |
20 |
1500 |
King |
20 |
2200 |
Davis |
30 |
5000 |
Kochhar |
|
5000 |
SQL> select * from departments;
DEPARTMENT_ID |
DEPARTMENT_NAME |
10 |
Sales |
20 |
Marketing |
30 |
Accounts |
40 |
Administration |
------------------Left outer join----------------
SQL> select * from employees e left outer join departments d on e.department_id=d.department_id;
附加:Oracle9i以前版本中左連線的寫法如下:
SQL> select * from employees e ,departments d on e.department_id=d.department_id(+);
---------------------------Right outer join------------------------
SQL> select * from employees right outer join departments using(department_id);
附加:Oracle9i以前版本中左連線的寫法如下:
SQL> select * from employees e ,departments d where e.department_id(+)=d.department_id;
--------------------------------Full join----------------------------
SQL> select * from employees full join departments using(department_id);
說明:[1]外連線必須使用on或using子句提供相應的連線條件
[2]不能為using子句中所列舉的列指定表別名,即使在group by和select子句中也是如此
[3]外連線規則:左連右補,右連左補,全連左右合併
如:對錶departments表進行右連線時,在兩表完成笛卡兒積後再依據連線條件 using(department_id)來篩選兩表中department_id值相同的記錄,但對DEPARTMENT_ID=40
employees表中沒有與之匹配的記錄,按常理此DEPARTMENT_ID=40所對應的記錄將被拋
棄,但就是為了保全連線表(departments表)中的所有記錄就必須在employees表中虛擬出
一條與之匹配的記錄來保全連線表的所有記錄,當然這條虛擬的記錄顯示時值全為null
--------------------------Natural join-----------------------------
SQL> select * from employees natural join departments;
說明:自然連線是通過對參與表關係中所有同名的屬性對取等(即相等比較)來完成的,故無須自己新增連線條件
與外連線的區別在於對於無法匹配的記錄外連線會虛擬一條與之匹配的記錄來保全連線表中的所有記錄,但自然連線不會
----------------------Inner join----------------
SQL> select * from employees inner join departments using(department_id);
說明:內連線與自然連線基本相同,不同之處在於自然連線只能是同名屬性的等值連線,而內連線可以使用using或on子句來指定連線條件,連線條件中指出某兩欄位相等(可以不同名)。
-------------------------------------------------------------------------------------------------------------------
連線的概念:
連線分為條件連線、等值連線和自然連線三種。
1、條件連線就是在多個表的笛卡爾積中選取滿足條件的行的連線,例如 select * from A,B where A.a > A.b 之類的有條件的查詢。
2、等值連線就是特殊的條件連線,當條件為某欄位=某欄位時,即為等值連線。如SELECT ename,sal,dname FROM emp,dept WHERE emp.deptno=dept.deptno;
3、自然連線是一種特殊的等值連線,他要求多個表有相同的屬性欄位,然後條件為相同的屬性欄位值相等,最後再將表中重複的屬性欄位去掉,即為自然連線。如A中a,b,c欄位,B中有c,d欄位,則select * from A natural join B 相當於 select A.a,A.b,A.c,B.d from A.c = B.c 。
內連線與等值連線的區別:
內連線:兩個表(或連線)中某一資料項相等的連線稱為內連線。等值連線一般用where字句設定條件,內連線一般用on字句設定條件,但內連線與等值連線效果是相同的。
內連線與等值連線其實是一回事情(等效)。
經常有人會問到select a.id,b.name from a,b where a.id=b.pid 與
select a.id,b.name from a inner join b on a.id=b.pid 有什麼區別,哪個效率更高一些。
實際上一回事情了。只是內連線是由SQL 1999規則定的書寫方式。兩個說的是一碼事。
相關文章
- 等值連線和自然連線的區別
- Oracle 表連線方式詳解(外連結、內連線、自連線)Oracle
- 【SQL】Oracle的內連線、左外連線、右外連線及全外連線SQLOracle
- 內連線、外連線
- SQL的四種連線:內連線 左外連線 右外連線 全連線SQL
- 例項解析外連線 內連線 自連線 全連線
- Oracle內連線、外連線、右外連線、全外連線小總結Oracle
- mysql INNER JOIN、LEFT JOIN、RIGHT JOIN;內連線(等值連線)、左連線、右連線MySql
- MYSQL語法:左連線、右連線、內連線、全外連線MySql
- 深入理解SQL的四種連線-左外連線、右外連線、內連線、全連線SQL
- sql 內連線和外連線SQL
- 內連線、外連線總結
- 內連線、左連線、右連線
- MySQL筆記3——內連線/外連線、多表連線MySql筆記
- 3.DQL資料查詢語言(內連線,外連線,自連線)
- 連線池和連線數詳解
- sql內連結,外連線SQL
- RMAN連線與oracle連線模式的關係Oracle模式
- 外連線與連線順序
- SQL SERVER 自連線、外連線SQLServer
- oracle sql內連線_左(右)連線_全外連線_幾種寫法OracleSQL
- Oracle左外連線、右外連線、完全外連線以及(+)號用法Oracle
- Oracle 左外連線、右外連線、全外連線小總結Oracle
- 關於外連線和where條件
- [資料庫連線字串] Access 連線字串(轉)資料庫字串
- [資料庫連線字串]Access連線字串(轉)資料庫字串
- 各種連線資料庫的連線字串資料庫字串
- 外連線轉換為內連線的情況
- 轉載:內連線與外連線的區別
- 你真的會玩SQL嗎?內連線、外連線SQL
- sql和hql中join語句區別,以及hibernate中內連線,迫切內連線,左外連線,迫切左外連線,右外連線的區別(合集)...SQL
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- java Jdbc連線oracle資料庫連線測試JavaJDBCOracle資料庫
- python 連線 mongo 資料庫連線超時PythonGo資料庫
- iis網站怎麼連線資料庫連線網站資料庫
- 連線和半連線
- 左連線,右連線
- MYSQL學習筆記23: 多表查詢(自連線內連線+左右外連線)MySql筆記