笛卡尔集基本原理,等值连接,不等值连接,外连接,自连接
1笛卡爾集基本原理
兩個表如果笛卡爾集運算
(1)行數是兩個表行數相乘的結果
(2)列是兩個表合集
案例:
錯誤查詢方式:
select count(e.EMPNO)
from emp e,dept d;
正確查詢方式:
select count(e.EMPNO)
from emp e,dept d
where e.deptno = d.deptno;
2.等值連接
Eg:查詢員工信息,員工號,姓名,月薪,部門名稱
select e.empno,e.ename,e.sal,d.dname
from emp e,dept d
where e.deptno = d.deptno;
3.不等值連接
Eg:查詢員工信息,員工號,姓名,月薪,薪水級別
select e.empno,e.ename,e.sal,s.grade
from emp e,salgrade s
where e.sal >= s.losal and e.sal <=s.hisal;(可以用between and來替換)
4.外連接
Eg:按部門統計員工人數:部門號部門名稱各部門人數
思路:
A:求各部門的人數..要把各個部門數據劃分開….,要分組…..
???B:各部門人數,要關聯員工表(因為部門人數是由員工表確定的,所以還要檢索員工表)
所以需要多表查詢
現象一(漏掉了一個部門)
select d.deptno,d.dname,count(e.empno)
from dept d,emp e
where d.deptno = e.deptno
group by d.deptno,d.dname;
分析:
我們的期望想把40號部門給統計出來...
40號部門沒有被統計出來的原因:員工表中沒有40號部門的員工...d.deptno = e.deptno (d.40 = e.40)
????????本質:等值條件不滿足...
????????外連接技術出現的原因
????????+左外連接:?????+號在..=號的右邊,左外連接....
????????+右外連接:?????+號在..=號的左邊,左外連接....
???????????????????????????我想把部門表的所有列都顯示出來,就需要找到部門表..在對方寫(+)
左外連接:
select d.deptno,d.dname,count(e.empno)
??????from dept d,emp e
??????where d.deptno = e.deptno(+)
??????group by d.deptno,d.dname;
總結:關于(+),它在那邊就以它為標準,讓它的數據都顯示。上面的截圖中的意思是e表中的都顯示,以e表為標準。e表和d表連接,因為d.deptno在e.deptno的左邊,隨意上面的叫左外連接。
5自連接
--查詢員工信息 ,老板信息
???????????????????????????顯示:??****的老板是****
???????????????????????????
---思路1:員工信息查員工表
???????????????????????????查老板信息,還要查員工表...
???????????????????????????
---思路2員工表的老板是?老板表的員工???????????????
???????????????????????????selecte.ename, b.ename
???????????????????????????fromemp e, emp b
???????????????????????????wheree.mgr = b.empno
?
自連接案例:
select e.ename || '的老板是'||nvl(b.ename,'他自己')
from emp e,emp b
where e.mgr = b.empno(+);
?
?
?
?
?
總結
以上是生活随笔為你收集整理的笛卡尔集基本原理,等值连接,不等值连接,外连接,自连接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基金种类繁多,选择至关重要
- 下一篇: okb是什么币