Oracle 10g數據庫基礎之基本查詢語句-下-鏈接&子查詢sql
當多張表在一塊兒查詢時,沒有給定正確的鏈接條件,結果是第一張表的全部行和第二張表的全部行進行矩陣相乘,獲得n*m行的結果集。數據庫
SQL> select ename,dname from emp,dept;ide
---------- --------------spa
結果爲每一個員工在每一個部門上了一次班,4*14=56,這並非咱們想獲得的結果。3d
SQL> select ename,dname from emp e,dept d where e.deptno=d.deptno;blog
select ename,dname from emp e join dept d on (e.deptno=d.deptno);get
效率是相同的,SQL99是國標it
from emp e,dept dclass
where e.deptno=d.deptno;效率
上述顯示有兩個列名稱都叫deptno,咱們沒法區分。
SQL> select ename,dname,e.deptno "員工表",d.deptno "部門表"
SQL> select ename,sal,grade
SQL> select ename,dname,emp.deptno from emp,dept
這句話不會顯示40號部門,由於40部門沒有員工。
SQL> select ename,dname,dept.deptno from emp,dept where emp.deptno(+)=dept.deptno;
+號的意思爲將沒有員工的部門,用NULL來匹配
+號不能同時放在等號的兩邊,只能出如今一邊。
SQL> select w.ename "下級" ,m.ename "上級"
其中「下級」和「上級」爲列的別名。區分相同的列。
W和m 爲表的別名。區分相同的表。別名的本質。
(+)爲了將沒有上級的人也顯示。
想在結果中過濾去一些內容請用and運算。
SQL> select w.ename "下級" ,m.ename "上級"
該實驗的目的是掌握新的ORACLE表之間的聯合查詢語法.
. Nature(天然)鏈接
這是SQL99規則。
SQL> select ename,deptno,dname from emp natural join dept;
select ename,dname,dept.deptno
from dept left outer join emp
select ename,dname from emp,dept
where emp.deptno(+)=dept.deptno;
6。SQL99的書寫格式
SQL> --查詢工資總和高於10號部門工資總和的部門。
SQL> select deptno,sum(sal)
having sum(sal)>(select sum(sal) from emp where deptno=10);
SQL> select deptno,ename,sal from emp
(select deptno,max(sal) from emp group by deptno);
子查詢返回多行,用=不能夠,得用in。
SQL> select ename,sal from emp where sal<any(1000,2000);
小於2000就能夠
SQL> select ename,sal from emp where sal<all(1000,2000);
小於all小於最小,大於all大於最大
SQL> select ename,sal,deptno from emp
where sal<all(select avg(sal) from emp group by deptno);
小於any小於最大,大於any大於最小
select ename,sal,deptno from emp
where sal>any(select avg(sal) from emp group by deptno)
select ename,e.deptno,sal,asal
(select deptno ,avg(sal) asal from emp group by deptno) a
where e.deptno=a.deptno and sal>asal;
A爲視圖,爲何要使用別名asal,由於表達式不能當列的名稱,別名的本質使用方法是使非法的合法化。
select ename,sal ,deptno
where sal>(select avg(sal) from emp where deptno=o.deptno) ;
先運行主查詢,獲得第一行,將DEPTNO傳入到子查詢,由子查詢求出AVG(SAL),在斷定主查詢的行是否符合查詢的條件。
執行計劃是將子查詢看做視圖的關聯。這叫作SQL的自動改寫。
找領導,其中3是常量,你寫什麼均可以。
當子查詢有行時,Exists返回true
當子查詢沒有行時爲假,Exists返回false
select ename,empno,mgr from emp o
where exists(select 3 from emp where mgr=o.empno);
《完》
--xjzhujunjie
--2012/05/17