表與表之間連線式on,using以及自然連線的區別
on比較好理解,on後面可以出現關聯條件也可以出現非關聯條件:
SQL> create table t1(id int) tablespace users;
表已建立。
SQL> create table t2(id int,name varchar2(10)) tablespace users;
表已建立。
SQL> select t1.*,t2.* from t1 join t2 on t1.id=t2.id and t2.name='a';
未選定行
SQL> insert into t1 values(1);
已建立 1 行。
SQL> insert into t2 values(1,'a');
已建立 1 行。
SQL> insert into t2 values(2,'b');
已建立 1 行。
SQL> insert into t2 values(2,'a');
已建立 1 行。
SQL> commit;
提交完成。
SQL> select t1.*,t2.* from t1 join t2 on t1.id=t2.id and t2.name='a';
ID ID NAME
---------- ---------- ----------
1 1 a
--========================
下面是using:
SQL> select t1.*,t2.* from t1 join t2 using(id);
select t1.*,t2.* from t1 join t2 using(id)
*
第 1 行出現錯誤:
ORA-25154: USING 子句的列部分不能有限定詞
SQL> select t1.id,t2.id,t2.name from t1 join t2 using(id);
select t1.id,t2.id,t2.name from t1 join t2 using(id)
*
第 1 行出現錯誤:
ORA-25154: USING 子句的列部分不能有限定詞
SQL> select id,name from t1 join t2 using(id);
ID NAME
---------- ----------
1 a
SQL> alter table t1 add name varchar2(10) default 'a';
表已更改。
SQL> select id,name from t1 join t2 using(id,name);
ID NAME
---------- ----------
1 a
SQL> select id,name from t1 join t2 using(id);
select id,name from t1 join t2 using(id)
*
第 1 行出現錯誤:
ORA-00918: 未明確定義列
SQL> select id,t2.name from t1 join t2 using(id);
ID NAME
---------- ----------
1 a
SQL> select t2.id,t2.name from t1 join t2 using(id);
select t2.id,t2.name from t1 join t2 using(id)
*
第 1 行出現錯誤:
ORA-25154: USING 子句的列部分不能有限定詞
SQL> select id,name from t1 join t2 using(id,name);
ID NAME
---------- ----------
1 a
SQL> select id,name from t1 join t2 using(id,name);
所謂不能有限定詞是指using裡面的欄位前面不能有表別名。使用using要求表裡必須有相同的欄位,看的出來using和on想必靈活性差多了。
--==================================
自然連線:
SQL> select id,name from t1 natural join t2;
ID NAME
---------- ----------
1 a
SQL> select t1.id,t2.name from t1 natural join t2;
select t1.id,t2.name from t1 natural join t2
*
第 1 行出現錯誤:
ORA-25155: NATURAL 聯接中使用的列不能有限定詞
SQL>
所謂的自然連線就是說oracle會自動使用表裡面相同的欄位進行連線,這其實沒多少意義。同樣我們發現自然連結的欄位前面不允許有限定詞(表別名),這和using很相似。只不過using是和inner和outer join結合使用的,我到時覺得using應該和natural join結合使用更靈活,比如:
SQL> select id ,name from t1 natural join t2 using(id);
select id ,name from t1 natural join t2 using(id)
*
第 1 行出現錯誤:
ORA-00933: SQL 命令未正確結束
SQL>
如果上面sql可以執行,那麼就說明我們只需要透過id進行關聯,不需要name關聯。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-1056486/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 等值連線和自然連線的區別
- 表連線型別型別
- 表的連線是指在一個SQL語句中通過表與表之間的關連SQL
- 【SQL】表連線 --半連線SQL
- 轉載:內連線與外連線的區別
- oracle 各種表間連線Oracle
- 軟連線與硬連結的區別,以及如何刪除軟連結
- 【T01】理解面向連線和無連線協議之間的區別協議
- 表連線cost
- Oracle 表連線Oracle
- 表連線方法
- 表連線概念
- 兩表連線三:合併連線
- sql和hql中join語句區別,以及hibernate中內連線,迫切內連線,左外連線,迫切左外連線,右外連線的區別(合集)...SQL
- Oracle的表連線方法(三)雜湊連線Oracle
- 表空間離線與資料檔案離線的區別
- Oracle 表連線方式詳解(外連結、內連線、自連線)Oracle
- Oracle的表連線方法(一)排序合併連線Oracle排序
- ORACLE 表連線方式Oracle
- SQL 三表連線SQL
- 排序和表連線排序
- 表連線概念(轉)
- oracle表連線方式Oracle
- rbo下針對表與表之間的連線執行計劃的確定原則!
- unix系統當中 軟連線與硬連線的區別(轉)
- 兩表連線一:巢狀迴圈連線巢狀
- Oracle的表連線方法(二)巢狀迴圈連線Oracle巢狀
- ORACLE表連線方式的分析與優化Oracle優化
- SQL Server中內連線和外連線的區別SQLServer
- Oracle的表連線方法(七)Oracle
- Oracle的表連線方法(五)Oracle
- Oracle的表連線方法(六)Oracle
- 發表話題的連線
- 資料庫外連線,自然連線,內連線,條件連線,等值連線關係及詳解資料庫
- Oracle表連線操作——Hash Join(雜湊連線)下Oracle
- Oracle表連線操作——Hash Join(雜湊連線)上Oracle
- 使用表連線替代exists
- 【SQL 學習】表連線SQL