1. 程式人生 > >Oracle-26-內連線(等值、不等值連線、自然連線)&外連線(左外、右外、全連線)&using子句

Oracle-26-內連線(等值、不等值連線、自然連線)&外連線(左外、右外、全連線)&using子句

一、連線分類:

1.內連線

1)等值連線:在連線中使用等號(=)操作就是等值連線。

比如查詢部門編號為30的員工編號、姓名、部門名稱。

SQL>select empno, ename, dname from emp, dept

      2 where emp.deptno dept.deptno and dept.deptno = 30;

SQL>select empno, ename, dname from emp

      2 inner join dept on emp.deptnodept.depton where dept.deptno = 30;

2)不等值連線:主要用除了等號之外的操作符,比如:<>、>、<、>=、<=、LIKE、IN、BETWEEN…AND。

比如查詢工資為1500以上的員工所屬部門和所在的具體地點。

SQL>select distinct dname, loc from emp, dept

      2 where emp.deptno = dept.deptno and sal >1500;

SQL>select distinct dname, loc from emp inner join dept on

       2 emp.deptno = dept.deptno where sal >

1500;

3)自然連線:基於兩個表的同名的一個或多個列。

【注意】自然連線是根據兩個表中同名的列而進行連線的,當列不同名時,自然連線將失去意義。且語法中沒有on

比如:select empno,sname, deptno, loc from natural join dept.

可以少寫匹配條件,不需要寫a.sno=b.sno這種。

2.外連線:使用關鍵字outer join。用於檢索一個表的所有記錄和另一個表中的匹配行。

語法格式:

SELECT column_name, column_name [, column_name] FROM

table_name [LEFT / RIGHT /FULL] OUTER JOIN

table_nameON

table_name.ref_column_name join_operator table_name.

ref_column_name

1)左外連線:LEFT OUTER JOIN左外連線就是在結果中除了滿足連線條件之外的行,還包括LEFT OUTER JOIN左側表的所有行。

比如:

select ename, emp.deptno “emp表”, dept.deptno “dept表”, loc from left outer join emp on emp.deptno =dept.deptno;

select ename, emp.deptno “emp表”, dept.deptno “dept表”,loc from emp, dept where dept.deptno = emp.deptno(+)

【注意】第二個語句外連線的連線運算子為(+)。該連線運算子可以在等號的左面也可以在等號的右面。但一定要放在缺少相應資訊的那一面。(比如下圖中sc表沒有s002匹配資料,那麼+就放在sc表那一面)

【簡單說明左外連線的意思】

首先有student和sc兩張表:


輸入SQL語句:

select a.sno, sname, cno, score from student a left outer join sc c on a.sno = c.sno

然後查詢過程如下:

①對於student表中s001,查到名字為zhang,拿著s001去sc表 ,發現選了c001課程且得分為98,那麼s001-zhang-c001-98為第1條查詢到的資料,如下表;

②同理查到s001-zhang-c002-100為第2條資料,如下表;

③對於student表中s002-li,在sc表中沒有對應資料,那麼查詢結果中顯示null

(總結起來就是:兩表有匹配資料的顯示,沒有匹配資料的填入null


A left outer join B ——必須把左表A表所有行匹配出來,無限滿足左表,如果左表中相應資料在右表沒有匹配資料,那麼在對應位置上填入null,詳見上圖和例4

2)右外連線:RIGHT OUTER JOIN

與左外連線同理,無限滿足右表,即根據右表中資料去左表搜尋,如果沒有匹配資料,填入null

3)全連線:FULL OUTER JOIN

3.自連線,返回連線到同一表中的行

4.交叉連線

二、Using子句

如果兩個表中有同名的列,可以在聯接語句裡用Using子句。

比如:

select empno,ename, deptno, loc from emp join dept using(deptno);

【注意】語法中沒有on

1:練習內連線中的等值連線。

解:注意下圖中的SQL命令,用的是inner join:


2:練習內連線中的自然連線

解:


好處是不需要寫匹配條件,如a.sno= b.sno這些不需要寫,這裡直接student natural join sc即可,就是直接將student表和sc表相同的列關聯起來。

3:練習Using子句

解:student表和sc表有相同列名sno,所以直接using(sno)即可。


4:練習左外連線

解:當前student表中資料:


當前sc表中資料:


那麼用左外連線查詢:


發現依然是“無限滿足左表student”,也就是對於左表中s012,在右表sc中沒有匹配資料,那麼查詢結果相應位置填入null。