Oracle子查詢和多表查詢
多表查詢需要用到表的連接
連接可以分為:(自行百度)
交叉連接(數字邏輯的笛卡爾積,不做解釋)
等值連接
例如:select * from t_a, t_b where t_a.xx = t_b.xx
不等值連接
例如:select * from t_a, t_b where t_a.sal >= t_b.sal
內連接
例如:select * from t_a inner join t_b on t_a.xx = t_b.xx
內連接寫法和等值連接不同,但是效果是一樣的,所以隨意使用一種即可。
左外連接(左連接)
內連接是把非空的行給連接在一起,形成一個新表。而左連接是以第一張表為基礎,把符合條件的字段補充到第一張表上。
語句:
標準寫法:select * from t_a inner left join t_b on t_a.xx = t_b.xx;
Oracle自創:select * from t_a, t_b where t_a.xx = t_b.xx(+);
右外連接(右連接)
與右連接一樣,方向反過來。
select * from t_a, t_b where t_a.xx(+) = t_b.xx;
自連接
自身與自身相連接
例如:select * from t_a, t_a t_a2 where t_a.xx = t_a2.yy;
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
子查詢(當查詢條件為不確定值時必須使用子查詢)
可以分為:
常規子查詢:
先執行子查詢,然後執行主查詢,子查詢參數與主查詢無關。
例如:select * from users where salary > (select avg(salary) from users)
相關子查詢:
主查詢的某些條件當作參數傳入子查詢,然後執行查詢。
例如:select * from users u where salary > (select avg(salary) from users where u.部門 = users.部門 order by 部門)
Oracle子查詢和多表查詢