1. 程式人生 > >oracle子查詢和表連線

oracle子查詢和表連線

有如下兩張表:部門表和教師表

1、查詢出招生部門所有男老師姓名(子查詢放在where語句中)

select tname, deptno from teacher where deptno in (select deptno from dept where dname='招生部');

2、查詢出所有老師的姓名和部門(子查詢放在列中)

select tname,deptno,(select dname from dept where dept.deptno=teacher.deptno) dname from teacher;

3、查詢出所有在招生部,人力部的老師列表

select tname,deptno from teacher where deptno in (select deptno from dept where dept.deptno=teacher.deptno and dname in ('招生部','人力部'));

連線查詢:

表連線的執行順序:先執行where條件,再連線;

內連線,左外連線和右外連線的區別:

內連線:滿足on連線條件的資料才顯示出來;

左外連線:即使不滿足on連線條件,也會把所有左邊的資料顯示出來;

右外連線同理;

例如:

查詢出所有老師的姓名和部門

1、使用內連線

select t.tname,d.dname from teacher t inner join dept d on t.deptno=d.deptno;

這樣查詢得到的結果如下

得到71條資料;

2、使用左外連線

select t.tname,d.dname from teacher t left join dept d on t.deptno=d.deptno;

得到77條資料;

自連線:

示例

查詢出所有老師的姓名及其導師

select t1.tname as '老師' ,t2.tname as ‘導師’ from teacher t1 inner join teacher t2 on t1.mgrno=t2.tno;

因為是兩張相同表進行連線,所以叫自連線;

三表連線:

示例

查詢出所有老師的姓名,部門及其導師

select t1.tname as '老師' ,t2.tname as ‘導師’ dept.dname from teacher t1 inner join teacher t2 on t1.mgrno=t2.tno left join dept on t1.deptno=dept.deptno;