ORACLE复杂查询之连接查询
一、傳統的連接查詢
1、交叉連接:返回笛卡爾積
?
WHERE中限定查詢條件,可以預先過濾掉掉不符合條件的記錄,返回的只是兩個表中剩余記錄(符合條件的記錄)的笛卡爾積。
2、內連接:參與連接的表地位平等,不分主次。兩表均可能有丟棄。
(1)等值連接:表間記錄的連接是通過相等的字段值為條件建立起來的。
(2)非等值連接:與等值連接類似。如果表間記錄的連接條件使用除“=”以外的其它比較運算符(>,>=,<,<=,!>,!<,<>以及BETWEEN…AND等)比較被連接的字段值。注意“BETWEEN (較小值)AND (較大值)”對應閉區間,
3、外連接:參與連接的表分主次。主表不丟棄,從表可能有丟棄。
(1)左外連接:主表在左,從表一側(右側)使用“(+)”。
(2)右外連接:同理。
4、自連接:同一個表上的連接查詢,令一個表與其自身連接。
注:SELECT子句中的字段別名可以中間使用AS,可以省略;但表名與表別名之間不允許使用AS。
二、SQL92連接語法
在SQL92標準中,除支持前述傳統的連接語法之外,還定義了一組新的連接語法體系--在FROM子句中指定連接條件(之前是在WHERE子句中),二者功能幾乎完全相互覆蓋,只是語法格式有所不同、且SQL92中增加了一種全外連接。SQL92連接語法基本格式如下:
注意:連接條件仍是由被連接表中的字段和比較運算符、邏輯運算符等構成的表達式,使用關鍵字ON或USING等。
連接類型可分為交叉連接、內連接、外連接三種,并可再細分(下圖):
(1)交叉連接的關鍵字是CROSS JOIN,返回笛卡爾積。例:
(2)等值連接、非等值連接用關鍵字:[INNER] JOIN,并且用ON代替WHERE指定連接條件及其他查詢限定條件;
等值連接可以使用USING子句指定用于等值連接的字段(參照字段)。
自然連接的關鍵字是NATURAL [INNER] JOIN,基于兩個表中的全部同名字段建立等值連接。如果類型不一致會出錯。
注意:USING和NATURAL不允許在參照字段(包括SELECT列表中出現的參照字段)上使用表名或表別名作為前綴。此外,ON子句的等值連接不會去除查詢結果集中的重復字段,但USING或NATURAL中則會自動去掉重復字段。例如:
(3)左外連接(右外連接同理):主表在左,關鍵字是LEFT [OUTER] JOIN,ON代替WHERE指定連接條件;
相當于前述傳統方式中的從表側加入“(+)”:
全外連接:關鍵字是FULL [OUTER] JOIN,ON代替WHERE指定連接條件。
?
轉載于:https://www.cnblogs.com/seven7seven/p/3662437.html
總結
以上是生活随笔為你收集整理的ORACLE复杂查询之连接查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos上那装qq2012
- 下一篇: Windows任务管理器被procexp