Oracle inner join和where區別
2 .無論怎麼連線,都可以用join子句,但是連線同一個表的時候,注意要定義別名,否則產生錯誤!
> inner join:理解為“有效連線”,兩張表中都有的資料才會顯示left join:理解為“有左顯示”,比如on a.field=b.field,則顯示a表中存在的全部資料及a\\b中都有的資料,A中有、B沒有的資料以null顯示
> right join:理解為“有右顯示”,比如on a.field=b.field,則顯示B表中存在的全部資料及a\\b中都有的資料,B中有、A沒有的資料以null顯示
> full join:理解為“全連線”,兩張表中所有資料都顯示,實際就是inner +(left-inner)+(right-inner)
3 .join可以分主次表 外聯接有三種類型:完全外聯,左聯,右聯.
完全外聯包含兩張表的所有記錄.
左聯是以左邊的表為主,右邊的為輔,右聯則相反
4.一般要使得資料庫查詢語句效能好點遵循一下原則:
在做表與表的連線查詢時,大表在前,小表在後
不使用表別名,通過欄位字首區分不同表中的欄位
查詢條件中的限制條件要寫在表連線條件前
儘量使用索引的欄位做為查詢條件
在 SQL-92 標準中,內聯接可在 FROM 或 WHERE 子句中指定。這是 WHERE 子句中唯一一種 SQL-92 支援的聯接型別。WHERE 子句中指定的內聯接稱為舊式內聯接。
下面的 Transact-SQL 查詢是內聯接的一個示例:
USE pubs
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city = p.city
ORDER BY a.au_lname DESC
此內聯接稱為相等聯接。它返回兩個表中的所有列,但只返回在聯接列中具有相等值的行。
下面是結果集:
au_id au_lname au_fname phone address city
----------- -------- -------- ------------ --------------- --------
238-95-7766 Carson Cheryl 415 548-7723 589 Darwin Ln. Berkeley
409-56-7008 Bennet Abraham 415 658-9932 6223 Bateman St. Berkeley
state zip contract pub_id pub_name city state country
----- ----- -------- ------ --------------------- -------- ----- -------
CA 94705 1 1389 Algodata Infosystems Berkeley CA USA
CA 94705 1 1389 Algodata Infosystems Berkeley CA USA
(2 row(s) affected)
在結果集中,city 列出現兩次。由於重複相同的資訊沒有意義,因此可以通過更改選擇列表消除兩個相同列中的一個。其結果稱為自然聯接。可以重新表述前面的 Transact-SQL 查詢以形成自然聯接。例如:
USE pubs
SELECT p.pub_id, p.pub_name, p.state, a.*
FROM publishers p INNER JOIN authors a
ON p.city = a.city
ORDER BY a.au_lname ASC, a.au_fname ASC
下面是結果集:
pub_id pub_name state au_id au_lname au_fname
------ --------------- -------- ----------- -------- -------- 1389 Algodata Infosystems CA 409-56-7008 Bennet Abraham
1389 Algodata Infosystems CA 238-95-7766 Carson Cheryl
phone address city state zip contract
--------------- ------------- -------- ----- ----- ---------
415 658-9932 6223 Bateman St. Berkeley CA 94705 1
415 548-7723 589 Darwin Ln. Berkeley CA 94705 1
(2 row(s) affected)