1. 程式人生 > >Oracle子查詢和多表查詢

Oracle子查詢和多表查詢

左外連接 查詢 sele 多表查詢 字段 ora 需要 avg lar

多表查詢需要用到表的連接

連接可以分為:(自行百度)

  交叉連接(數字邏輯的笛卡爾積,不做解釋)

    等值連接

      例如: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子查詢和多表查詢