多表查詢就是使用兩張表及其以上的查詢。首先需要知道幾個名詞,笛卡爾積,內連接,外連接,子查詢。
1)笛卡爾積
所謂笛卡爾積其實就是兩張表數據的條數相乘得到的最后結果,例如表1有10條數據,表2有4條數據,那么經過笛卡爾積之后最后的結果為40條數據,使用笛卡爾積缺點比較多,會產生很多沒有用的數據。
2)內連接
內連接分為隱式和顯示兩種,顯示就是使用inner join關鍵字,而隱式就是使用where關鍵字,根據關聯字段建立的條件,例如where t1.id=t2.id 這就是隱式。
3)外連接
外連接也分兩種,左外連接,右外連接。
左外連接:使用left join 關鍵字,它返回的是左表的所有記錄,如果右表中沒有滿足條件的記錄,則返回空值。
右外連接:使用right join 關鍵字,意思和左外連接相反。
在oracle中有一個特殊的符號(+),用它也可以達到左右外連接的效果,用法例如:e2.empno(+) =e3.empno,表示如果e3表在e2表中沒有滿足關系的記錄,就返回空值。
4)子查詢
子查詢就是嵌套查詢,例如 select .. from (selec....) where(select....),寫法不一樣,但就是這樣的。
5)exists 關鍵字
exists(查詢語句):數據量大時非常高效,當查詢語句有結果的時候返回true否則返回false
例如查詢有員工的部門信息
select *
from dept d
where exists
(select * from emp e where e.deptno=d.deptno);
6)集合運算
集合運算:(將查詢結果合並,應用場景:應用在來自不同數據的表時)
交集:intersect
並集:union(去除重復的,並且排序)/union all(不去除重復的)
差集:minus關鍵字
集合運算的注意事項:
1.列的類型要一致
2.按照順序書寫
3.列的數量要一致,如果不足用null空值補全。