單行子查詢是指子查詢只返回單列、單行數據,多行子查詢是指返回單列多行數據,都是針對單列而言的,而多列子查詢是指查詢返回多
1、Oracle多表查詢
多表查詢是指基于兩個和兩個以上的表或是視圖的查詢。
問題:顯示雇員名,,雇員工資及所在部門的名字【笛卡爾集】?
select t.ename,t.sal,t1.dnamefrom emp t,dept t1where t.deptno=t1.deptno;
問題:顯示部門號為10的部門名、員工名和工資?
SELECT d.dname, e.ename, e.sal FROM emp e, dept d WHERE e.deptno = d.deptno and e.deptno = 10;
問題:顯示雇員名,雇員工資及所在部門的名字,并按部門排序?
SELECT e.ename, e.sal, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno ORDER by e.deptno;
2、自連接
自連接是指在同一張表的連接查詢
問題:顯示某個員工的上級領導的姓名?
比如顯示員工‘FORD’的上級
SELECT worker.ename, boss.ename FROM emp worker,emp boss WHERE worker.mgr = boss.empno AND worker.ename = 'FORD';
3、子查詢
子查詢是指嵌入在其他sql語句中的select語句,也叫嵌套查詢。
3.1單行子查詢
單行子查詢是指只返回一行數據的子查詢語句
請思考:顯示與SMITH同部門的所有員工?
思路:
1 查詢出SMITH的部門號
select deptno from emp WHERE ename = 'SMITH';
2 顯示
SELECT * FROM emp WHERE deptno = (select deptno from emp WHERE ename = 'SMITH');
數據庫在執行sql 是從左到右掃描的,如果有括號的話,括號里面的先被優先執行。
3.2多行子查詢
多行子查詢指返回多行數據的子查詢
如何查詢和部門10的工作相同的雇員的名字、崗位、工資、部門號
SELECT DISTINCT job FROM emp WHERE deptno = 10;
SELECT * FROM emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno = 10);
(注意:不能用job=..,因為等號=是一對一的)
在多行子查詢中使用all操作符
問題:如何顯示工資比部門30的所有員工的工資高的員工的姓名、工資和部門號?
SELECT ename, sal, deptno FROM emp WHERE sal > all (SELECT sal FROM emp WHERE deptno = 30);
在多行子查詢中使用any操作符
問題:如何顯示工資比部門30的任意一個員工的工資高的員工姓名、工資和部門號?
SELECT ename, sal, deptno FROM emp WHERE sal > ANY (SELECT sal FROM emp WHERE deptno = 30);
等同于SELECT ename, sal, deptno FROM emp WHERE sal > (SELECT min(sal) FROM emp WHERE deptno = 30)
3.3多列子查詢
單行子查詢是指子查詢只返回單列、單行數據,多行子查詢是指返回單列多行數據,都是針對單列而言的,而多列子查詢是指查詢返回多個列數據的子查詢語句。
請思考如何查詢與SMITH的部門和崗位完全相同的所有雇員
Select * from emp where (deptno,job)=(select deptno,job from emp where ename=’SMITH’)
當在from子句中使用子查詢時,該子查詢會被作為一個視圖來對待,因此叫做內嵌視圖,當在from子句中使用子查詢時,必須給子查詢指定別名。
注意:別名不能用as,如:SELECT e.ename, e.deptno, e.sal, ds.mysal FROM emp e, (SELECT deptno, AVG(sal) mysal FROM emp GROUP by deptno) as ds WHERE e.deptno = ds.deptno AND e.sal > ds.mysal;
在ds前不能加as,否則會報錯(給表取別名的時候,不能加as;但是給列取別名,是可以加as的)
相關閱讀:
Oracle 并行查詢
Oracle用戶信息查詢操作語句
Oracle單表查詢某列最大最小值的性能問題
回收站引發Oracle查詢表空間使用緩慢
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com