oracle 建表id自增长_oracle 左连接、右连接、全外连接、内连接、以及 (+) 号用法...
Oracle中的連接可分為,內連接(INNER JOIN)、外連接(OUTER JOIN)、全連接(FULL JOIN),不光是 Oracle,其他很多的數據庫也都有這3種連接查詢方式。
Oracle 外連接(OUTER JOIN),又分為左外連接和右外連接,即左連接和右連接。
左外連接 LEFT OUTER JOIN == 左連接 LEFT JOIN(左邊的表不加限制)
右外連接 RIGHT OUTER JOIN == 右連接 RIGHT JOIN(右邊的表不加限制)
全外連接 FULL OUTER JOIN == 全連接 FULL JOIN(左右兩表都不加限制)
注意:通常寫 SQL 的時候會省略 OUTER 關鍵字。
在左連接和右連接時都會以一張 A 表為基礎表,該表的內容會全部顯示,然后加上 A 表和 B 表匹配的內容。 如果 A 表的數據在 B 表中沒有記錄。 那么在相關聯的結果集行中列顯示為空值(NULL)。
對于外連接,也可以使用 "(+)" 操作符來表示。使用時的一些注意事項:
1. 操作符只能出現在 WHERE 子句中,并且不能與 OUTER JOIN 語法同時使用;
2. 操作符執行外連接時,如果在 WHERE 子句中包含有多個條件,則必須在所有條件中都包含 (+) 操作符;
3. 操作符只適用于列,而不能用在表達式上;
4. 操作符不能與 OR 和 IN 操作符一起使用;
5. 操作符只能用于實現左外連接和右外連接,而不能用于實現全外連接;
SELECT * FROM t_A;
SELECT * FROM t_B;
左外連接,又名左連接(OUTER LEFT JOIN / LEFT JOIN)
LEFT JOIN 是以左表的記錄為基礎的,t_A 可以看成左表,t_B 可以看成右表,它的結果集是 t_A 表中的全部數據,再加上 t_A 表和 t_B 表匹配后的數據。換句話說,左表 t_A 的記錄將會全部表示出來,
而右表 t_B 只會顯示符合搜索條件的記錄。t_B 表記錄不足的地方均為 NULL。
SELECT * FROM t_A a LEFT JOIN t_B b ON a.id = b.id;
或 SELECT * FROM t_A a LEFT OUTER JOIN t_B b ON a.id = b.id;
用 (+) 來實現,這個 + 號可以這樣來理解:+ 表示補充,即哪個表有加號,這個表就是匹配表。如果加號寫在右表,左表就是全部顯示,所以是左連接。
SELECT * FROM t_A a,t_B b WHERE a.id=b.id(+);
右外連接,又名右連接(RIGHT OUTER JOIN / RIGHT JOIN)
和 LEFT JOIN 的結果剛好相反,是以右表 t_B 為基礎的。它的結果集是 t_B 表所有記錄,再加上 t_A 和 t_B 匹配后的數據。 t_A 表記錄不足的地方均為 NULL。
SELECT * FROM t_A a RIGHT JOIN t_B b ON a.id = b.id;
或 SELECT * FROM t_A a RIGHT OUTER JOIN t_B b ON a.id = b.id;
用 (+) 來實現,這個 + 號可以這樣來理解: + 表示補充,即哪個表有加號,這個表就是匹配表。如果加號寫在左表,右表就是全部顯示,所以是右連接。
SELECT * FROM t_A a,t_B b WHERE a.id(+)=b.id;
全外連接,又名全連接(FULL OUTER JOIN / FULL JOIN)
左表和右表都不做限制,所有的記錄都顯示,兩表不足的地方均為 NULL。 全外連接不支持 (+) 寫法。
以 id 為限制的用法:
SELECT * FROM t_A a FULL JOIN t_B b ON a.id = b.id;
或 SELECT * FROM t_A a FULL OUTER JOIN t_B b ON a.id = b.id;
不加限制的用法:
SELECT * FROM t_A FULL JOIN t_B ON 1=1;
內連接,又名自連接(INNER JOIN / JOIN)
查出的記錄既存在于 t_A,又存在于 t_B,即查出匹配兩張表的數據。
SELECT * FROM t_A a,t_B b WHERE a.id = b.id;
或 SELECT * FROM t_B b,t_A a WHERE b.id = a.id;
或 SELECT * FROM t_A a JOIN t_B b ON a.id = b.id;
或 SELECT * FROM t_A a INNER JOIN t_B b ON a.id = b.id;
或 SELECT * FROM t_B b JOIN t_A b ON b.id = a.id;
或 SELECT * FROM t_B b INNER JOIN t_A a ON b.id = a.id;
笛卡爾乘積,又名笛卡爾積(CROSS JOIN)
不加任何條件,達到 M*N 的結果集
SELECT * FROM t_A a CROSS JOIN t_B b;
或 SELECT * FROM t_A a,t_B b;
注意:如果 CROSS JOIN 加上 WHERE ON a.id = b.id 條件,會產生跟內連接(自連接)一樣的結果(CROSS JOIN 后 加上 ON 會報錯);
即 SELECT * FROM t_A a CROSS JOIN t_B b WHERE a.id = b.id;(不需要 ON) 相當于 SELECT * FROM t_A a JOIN t_B b ON a.id = b.id;
總結
以上是生活随笔為你收集整理的oracle 建表id自增长_oracle 左连接、右连接、全外连接、内连接、以及 (+) 号用法...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 儿童节快乐!小时候最喜欢的动画片上热搜
- 下一篇: mfc 设置子窗口只打开一遍_MFC 判