在熟悉了表的增刪改查,表中數據的增刪改查,本文將着重闡述如何進行表連接以及子查詢。
所謂表連接,就是多張表在一起做笛卡爾乘積,它有多種形式;所謂子查詢就是把一個sql查詢的結果作爲另外一個sql執行之前的輸入。
1 系統、環境和前提約束
- win10 64
- oracle 11g https://www.jianshu.com/p/1609289f4c5f
2 操作
-
以系統管理員啓動cmd命令行
以系統管理員啓動cmd
表連接分爲以下幾種方式:
# 在windows命令行下連接scott
sqlplus scott/tiger
# 通常意義上的表連接
select * from emp e, dept d; --emp表有14行記錄、dept表有4行記錄,做笛卡爾乘積,共有56行記錄
select * from emp e, dept d where e.deptno=d.deptno -- 查詢出了emp中用戶對應的部門信息
# 內連接
select * from emp e inner join dept d on e.deptno=d.deptno; -- 查詢出了emp中用戶對應的部門信息
# 左外連接
insert into dept(deptno) values(50); --向dept表中加入一條只有deptno的空記錄
insert into emp(empno) values(16); --向dept表中加入一條只有empno的空記錄
select * from emp e left join dept d on e.deptno=d.deptno; --以join左邊的表爲主,不會查出右邊表的空記錄,但會查詢左邊表的空記錄
# 右外連接
select * from emp e right join dept d on e.deptno=d.deptno; --以join右邊的表爲主,不會查出左邊表的空記錄,但會查詢右邊表的空記錄
# 全外連接
select * from emp e fulljoin dept d on e.deptno=d.deptno; --以join兩邊的表爲主,既會查出左邊表的空記錄,也會查詢右邊表的空記錄
再看了表連接之後,我們執行以下語句,繼續熟悉子查詢:
# 查詢編號爲7788的員工所在部門名稱和地址
select dname, loc from dept where deptno=(select deptno from emp where empno=7788);
# 查詢工資最高的員工信息
select * from emp where sal >= all (select nvl(sal,0) from emp );
# 查詢編號爲7788的員工的領導信息
select * from emp where empno=(select mgr from emp where empno=7788);
以上就是我們常用的表連接和子查詢語句。