例項解析外連線 內連線 自連線 全連線
1. 首先看兩個測試表的結構
1)HR@ENMOEDU> desc employees #表1
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPLOYEE_ID NOT NULL NUMBER(6)
FIRST_NAME VARCHAR2(20)
LAST_NAME NOT NULL VARCHAR2(25)
EMAIL NOT NULL VARCHAR2(25)
PHONE_NUMBER VARCHAR2(20)
HIRE_DATE NOT NULL DATE
JOB_ID NOT NULL VARCHAR2(10)
SALARY NUMBER(8,2)
COMMISSION_PCT NUMBER(2,2)
MANAGER_ID NUMBER(6)
DEPARTMENT_ID NUMBER(4)
2)HR@ENMOEDU> desc departments #表2
Name Null? Type
----------------------------------------- -------- ----------------------------
DEPARTMENT_ID NOT NULL NUMBER(4)
DEPARTMENT_NAME NOT NULL VARCHAR2(30)
MANAGER_ID NUMBER(6)
LOCATION_ID NUMBER(4)
1利用上面兩個表做連線 連線條件是 DEPARTMENT_ID 可以這樣理解連線 你想在一個結果中同時顯示EMPLOYEE_ID,LAST_NAME,DEPARTMENT_NAME 你會發現 上面兩個表都不同時存在上述三個欄位,這時你只有做連線了
1)內連線:如圖所示
如果你想得到這樣的結果:顯示員工姓名,員工編號,部門名字 表1的DEPARTMENT_ID等於表2的DEPARTMENT_ID等於n ,則輸出DEPARTMENT_ID=n對應的EMPLOYEE_ID,LAST_NAME,DEPARTMENT_NAME。否則不返回結果。這時候你就用內連線, 格式為:表1 join 表2 on 表1.DEPARTMENT_ID=表2.DEPARTMENT_ID
所以應該這樣來完成任務:HR@ENMOEDU> select a.employee_id,a.last_name,b.department_name from employees a join departments b on a.department_id=b.department_id;
EMPLOYEE_ID LAST_NAME DEPARTMENT_NAME
----------- ------------------------- ------------------------------
200 Whalen Administration
201 Hartstein Marketing
202 Fay Marketing
114 Raphaely Purchasing
119 Colmenares Purchasing
115 Khoo Purchasing
116 Baida Purchasing
117 Tobias Purchasing
2)外連線:如圖
如果你想要得到 所有的 表1中的 員工姓名,員工編號 連線條件還是department_id ,就算是條件不符合 也要把表1中的想顯示的資料也顯示出來 這樣你就應該用外連線,若表2中沒有符合條件的則補空 你就應該用外連線,(一個都不能少)
左外連線:A left join B 右外連線:A right join B 可以這樣 記憶 左外連線中寫在左邊的表是那個內容多的(也就是A表一個都不能少的) 右外連線中寫在右邊的表內容多(也就是B表一個都不能少) 這樣你就會發現 A left join B 結果就等於 B right join A
看例子:左連線 表a內容多 b 有補空
HR@ENMOEDU> select a.employee_id,a.last_name,b.department_name from employees a left join departments b on a.department_id=b.department_id;
EMPLOYEE_ID LAST_NAME DEPARTMENT_NAME
----------- ------------------------- ------------------------------
112 Urman Finance
111 Sciarra Finance
110 Chen Finance
109 Faviet Finance
108 Greenberg Finance
206 Gietz Accounting
205 Higgins Accounting
178 Grant
右連線:HR@ENMOEDU> select a.employee_id,a.last_name,b.department_name from employees a right join departments b on a.department_id=b.department_id;
EMPLOYEE_ID LAST_NAME DEPARTMENT_NAME
----------- ------------------------- ------------------------------
108 Greenberg Finance
111 Sciarra Finance
112 Urman Finance
113 Popp Finance
109 Faviet Finance
206 Gietz Accounting
205 Higgins Accounting
Treasury
Corporate Tax
Control And Credit
Shareholder Services
全外連線:就是倆表都一個也不能少
HR@ENMOEDU> select a.employee_id,a.last_name,b.department_name from employees a full join departments b on a.department_id=b.department_id;
EMPLOYEE_ID LAST_NAME DEPARTMENT_NAME
----------- ------------------------- ------------------------------
168 Ozer Sales
169 Bloom Sales
170 Fox Sales
171 Smith Sales
172 Bates Sales
173 Kumar Sales
174 Abel Sales
175 Hutton Sales
176 Taylor Sales
177 Livingston Sales
178 Grant #右補空
190 Gates Shipping
191 Perkins Shipping
192 Bell Shipping
193 Everett Shipping
194 McCain Shipping
195 Jones Shipping
196 Walsh Shipping
197 Feeney Shipping
NOC #坐補空
Manufacturing
Government Sales
3)自連線:其實是內連線的一種特殊情況,只不過要連線的倆個表 是同一個表,比如說 你要得到比其經理來的早的員工的標號。那就只能用自連線了
思路 把一個employees 表看成員工表a 再把另一個 employees 表看成經理表b 連線條件是員工表的經理編號=經理表員工編號 具體看下邊:
HR@ENMOEDU> select a.EMPLOYEE_ID from employees a join employees b on a.MANAGER_ID=b.EMPLOYEE_ID where a.hire_date
EMPLOYEE_ID
-----------
122
114
102
108
205
204
203
200
105
109
185
總結:仔細思考一下 發現能用子查詢得到的結果,都可以用連線來做,但反過來就不一定了,例如自連線中的例子,你要想用子查詢 那就複雜了 本人暫時沒辦法用子查詢得到結果。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-1244016/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL的四種連線:內連線 左外連線 右外連線 全連線SQL
- Oracle內連線、外連線、右外連線、全外連線小總結Oracle
- MYSQL語法:左連線、右連線、內連線、全外連線MySql
- 【SQL】Oracle的內連線、左外連線、右外連線及全外連線SQLOracle
- 深入理解SQL的四種連線-左外連線、右外連線、內連線、全連線SQL
- 內連線、外連線
- Oracle 表連線方式詳解(外連結、內連線、自連線)Oracle
- sql 內連線和外連線SQL
- 內連線、外連線總結
- oracle sql內連線_左(右)連線_全外連線_幾種寫法OracleSQL
- SQL SERVER 自連線、外連線SQLServer
- Oracle 左外連線、右外連線、全外連線小總結Oracle
- MySQL筆記3——內連線/外連線、多表連線MySql筆記
- 內連線、左連線、右連線
- 3.DQL資料查詢語言(內連線,外連線,自連線)
- 資料庫外連線,自然連線,內連線,條件連線,等值連線關係及詳解資料庫
- MYSQL學習筆記23: 多表查詢(自連線內連線+左右外連線)MySql筆記
- sql內連結,外連線SQL
- Oracle左外連線、右外連線、完全外連線以及(+)號用法Oracle
- 外連線與連線順序
- 內聯,左外聯,右外聯,全連線,交叉連線 的區別
- 深入淺出SQL之左連線、右連線和全連線SQL
- 外連線轉換為內連線的情況
- 轉載:內連線與外連線的區別
- 你真的會玩SQL嗎?內連線、外連線SQL
- sql和hql中join語句區別,以及hibernate中內連線,迫切內連線,左外連線,迫切左外連線,右外連線的區別(合集)...SQL
- mysql INNER JOIN、LEFT JOIN、RIGHT JOIN;內連線(等值連線)、左連線、右連線MySql
- 行的儲存(塊內連線與塊外連線)
- SQL Server中內連線和外連線的區別SQLServer
- mysql 左連線,右連線,內連結,exists等MySql
- 連線和半連線
- 左連線,右連線
- 全連線層的作用解析
- oracle外連線Oracle
- T-SQL學習中–內聯接,外連線,交叉連線SQL
- sql 連線查詢例項(left join)三表連線查詢SQL
- Socket連線和Http連線HTTP
- 長連線和短連線