連線查詢指基於兩個或兩個以上表或檢視的查詢,在實際應用中,可能僅僅查詢單個表無法
滿足實際的需求,例如顯示sales部門位置以及雇員名,這種情況就需要進行連線查詢(dept和emp表)。
當使用連線查詢時,必須在from後指定兩個或兩個以上的表。
當使用連線查詢時,應該在列名前加表名作字首,如果不同表之間的列名不同就不用,但不同表之間存在相同列名時就要加字首,
當使用連線查詢時,必須在where子句中指定有效地連線條件,如果有錯失,可能會造成笛卡爾集。
☆相等連線:用 = 指定連線條件
select name,sal,dname from emp,dept
where emp.deptno = dept.deptno and dept.deptno=10;
☆不等連線:其實是between...and...
select ename,sal,grade from emp,salgrade
where emp.sal between salgrade.losal and salgrade.hisal;
☆自連線
指同一張表之間的連線查詢,主要用在自參照表上顯示上下級關係或者層次關係。(自參表
指在不同列之間具有參照關係或主從關係的表),例如,emp表包含有empno(雇員號)和
mgr(管理者號),二者就有參照關係。
select manager.enamec from emp manager,emp worker
where manager.empno = worker.mgr
and worker.ename='blake';
☆內連線和外連線
1.內連線,預設情況下,在執行連線查詢時如果沒有指定任何連線操作符,都屬於內連線
select a.dname,b.ename from dept a,emp b
where a.deptno=b.deptno and a.deptno=10;
另外,通過在from子句中指定inner join也可以指定內連線
select a.dname,b.ename from dept a inner join emp b
on a.deptno = b.deptno and a.deptno=10;
如果主表的主鍵列和從表的外部鍵列名相同,那麼還可以使用natural join 關鍵字自動執
行內連線操作
select dname,ename from dept natural join emp;
2.左外連線
左外連線是通過指定left[outer]join選項來實現的。不僅會返回滿足連線條件的所有記錄
,而且還會返回不滿足連線條件的連線操作符左邊表的其他行。
select a.dname,b.ename from dept a left join emp b
on a.deptno=b.deptno and a.deptno=10;
3.右外連線
跟左外連線一樣
4.完全外連線
通過full[outer]join選項來實現的,不僅會返回滿足連線條件的所有行,而且還會返回不
滿足連線條件的所有其他行。
select a.dname,b.ename from dept a full join emp b
on a.deptno=b.deptno and a.deptno=10;
5.使用(+)操作符
當執行外連線時,儘管可以用連線操作符(+)來完成,但還是建議用outer join執行外連線。使用(+)進行外連線時,where條件中,對於附表的字段都應帶上(+)。
1.使用(+)操作符執行左外連線
select a.dname,b.ename from dept a,emp b
where a.deptno=b.deptno(+)
and b.deptno(+)=10;
2.使用(+)操作符執行右外連線
select a.dname,b.ename from dept a,emp b
where a.deptno(+)=b.deptno and a.deptno(+)=10
order by a.dname;
oracle查詢連線
select from emp select from dept 左連線 1 查詢與左邊表dept 4 相關聯的資料,如deptno 40在右邊沒有對應的資料,則顯示為空 select from dept left join emp on dept.deptno emp.deptno 查詢與左邊表相...
Oracle連線查詢
1 內連線 select e.d.dname from emp e,dept d where e.deptno d.deptno 隱式內連線查詢實際的語句可以為 select e.d.dname from emp e inner join dept d on d.deptno e.deptno 2 ...
oracle連線查詢
8i create table dali.test1 a int,b int create table dali.test2 a int,b int insert into dali.test1 values 1,456 insert into dali.test1 values 2,427 ins...