oracle 建表id自增长_oracle 左连接、右连接、全外连接、内连接、以及 (+) 号用法...
Oracle中的連接可分為,內(nèi)連接(INNER JOIN)、外連接(OUTER JOIN)、全連接(FULL JOIN),不光是 Oracle,其他很多的數(shù)據(jù)庫(kù)也都有這3種連接查詢方式。
Oracle 外連接(OUTER JOIN),又分為左外連接和右外連接,即左連接和右連接。
左外連接 LEFT OUTER JOIN == 左連接 LEFT JOIN(左邊的表不加限制)
右外連接 RIGHT OUTER JOIN == 右連接 RIGHT JOIN(右邊的表不加限制)
全外連接 FULL OUTER JOIN == 全連接 FULL JOIN(左右兩表都不加限制)
注意:通常寫(xiě) SQL 的時(shí)候會(huì)省略 OUTER 關(guān)鍵字。
在左連接和右連接時(shí)都會(huì)以一張 A 表為基礎(chǔ)表,該表的內(nèi)容會(huì)全部顯示,然后加上 A 表和 B 表匹配的內(nèi)容。 如果 A 表的數(shù)據(jù)在 B 表中沒(méi)有記錄。 那么在相關(guān)聯(lián)的結(jié)果集行中列顯示為空值(NULL)。
對(duì)于外連接,也可以使用 "(+)" 操作符來(lái)表示。使用時(shí)的一些注意事項(xiàng):
1. 操作符只能出現(xiàn)在 WHERE 子句中,并且不能與 OUTER JOIN 語(yǔ)法同時(shí)使用;
2. 操作符執(zhí)行外連接時(shí),如果在 WHERE 子句中包含有多個(gè)條件,則必須在所有條件中都包含 (+) 操作符;
3. 操作符只適用于列,而不能用在表達(dá)式上;
4. 操作符不能與 OR 和 IN 操作符一起使用;
5. 操作符只能用于實(shí)現(xiàn)左外連接和右外連接,而不能用于實(shí)現(xiàn)全外連接;
SELECT * FROM t_A;
SELECT * FROM t_B;
左外連接,又名左連接(OUTER LEFT JOIN / LEFT JOIN)
LEFT JOIN 是以左表的記錄為基礎(chǔ)的,t_A 可以看成左表,t_B 可以看成右表,它的結(jié)果集是 t_A 表中的全部數(shù)據(jù),再加上 t_A 表和 t_B 表匹配后的數(shù)據(jù)。換句話說(shuō),左表 t_A 的記錄將會(huì)全部表示出來(lái),
而右表 t_B 只會(huì)顯示符合搜索條件的記錄。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;
用 (+) 來(lái)實(shí)現(xiàn),這個(gè) + 號(hào)可以這樣來(lái)理解:+ 表示補(bǔ)充,即哪個(gè)表有加號(hào),這個(gè)表就是匹配表。如果加號(hào)寫(xiě)在右表,左表就是全部顯示,所以是左連接。
SELECT * FROM t_A a,t_B b WHERE a.id=b.id(+);
右外連接,又名右連接(RIGHT OUTER JOIN / RIGHT JOIN)
和 LEFT JOIN 的結(jié)果剛好相反,是以右表 t_B 為基礎(chǔ)的。它的結(jié)果集是 t_B 表所有記錄,再加上 t_A 和 t_B 匹配后的數(shù)據(jù)。 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;
用 (+) 來(lái)實(shí)現(xiàn),這個(gè) + 號(hào)可以這樣來(lái)理解: + 表示補(bǔ)充,即哪個(gè)表有加號(hào),這個(gè)表就是匹配表。如果加號(hào)寫(xiě)在左表,右表就是全部顯示,所以是右連接。
SELECT * FROM t_A a,t_B b WHERE a.id(+)=b.id;
全外連接,又名全連接(FULL OUTER JOIN / FULL JOIN)
左表和右表都不做限制,所有的記錄都顯示,兩表不足的地方均為 NULL。 全外連接不支持 (+) 寫(xiě)法。
以 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;
內(nèi)連接,又名自連接(INNER JOIN / JOIN)
查出的記錄既存在于 t_A,又存在于 t_B,即查出匹配兩張表的數(shù)據(jù)。
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)
不加任何條件,達(dá)到 M*N 的結(jié)果集
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 條件,會(huì)產(chǎn)生跟內(nèi)連接(自連接)一樣的結(jié)果(CROSS JOIN 后 加上 ON 會(huì)報(bào)錯(cuò));
即 SELECT * FROM t_A a CROSS JOIN t_B b WHERE a.id = b.id;(不需要 ON) 相當(dāng)于 SELECT * FROM t_A a JOIN t_B b ON a.id = b.id;
總結(jié)
以上是生活随笔為你收集整理的oracle 建表id自增长_oracle 左连接、右连接、全外连接、内连接、以及 (+) 号用法...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 儿童节快乐!小时候最喜欢的动画片上热搜
- 下一篇: 网传理想汽车疫情期间违规裁员:不允许被裁