解析資料庫查詢中的外連線
在資訊管理系統的開發中,外連線通常用來完成一些複雜特殊的多表查詢,雖不常用,但其作用舉足輕重。
什麼是外連線呢?簡而言之,外連線是指它返回查詢結果集合中,不僅包含符合連線條件的行,而且還包括左表
(左外連線時
)、右表
(右外連線時
)或兩個邊接表
(全外連線
)中的所有資料行,共分為左外連線、右外連線、全外連線三種方式,實際開發中使用較多的是左外連線和右外連線,筆者以一例項來解析這兩種外連線。
假設某資料庫中有兩個資料表,表一是客戶表
costomer,
表二是訂單表
order
,表結構及記錄如下:
customer
表結構:
cno:客戶編號
name:
客戶名稱
address:
客戶位址
age:
客戶年齡
customer
表內容:
cnonameaddressage1張三
長沙25 2
李四北京21
3王五上海36
order
表結構:
cno:客戶編號
ono:訂單號
goods
:所訂貨物
order
表內容:
cnoonogoods
1101
牙刷3301
電風扇我們現在需要查詢輸出乙個客戶列表,如果該客戶有訂單表中,要求包含訂單資料。這個查詢能使用內連線嗎?我們試試:
select customer.*,order.one,order.goods fromcustomer,order where customer.cno=order.cno
輸出結果為:
cnonameaddress
age onogoods1張三
長沙25
101牙刷3王五
上海36
301電風扇
很顯然,這不是我們所要的結果,由於內連線返回查詢結果集合中的僅是符合查詢條件和連線條件的行,在
order
表中找不到對應李四這個客戶編號的任何訂單記錄,不滿足連線條件,因此李四沒有出現在查詢結果中。必須使用左外連線才能得到預期結果。
以custmoer
為左表,以
order
表為右表,左外連線的特點是保證左表的滿足查詢條件的所有記錄無論是否符合連線條件,都會出現在查詢結果中,那些不滿足條件的左表記錄的右表相應欄位將輸出為空值。
下面是完成這個查詢功能的左連線
sql語句。實際開發中,
oracle
、sqlserver
主流資料庫管理系統使用較多,因此對本文所有的外連線操作,筆者分別列出了這兩種資料庫的
sql語句。
oracle
:(oracle
的風格與眾不同,可理解為左連線中符號
+所在邊的表就是右表)
select customer.*,order.one,order.goods fromcustomer,order where customer.cno=order.cno(+)
sql server(access
與sqlserver相同)
:select customer.*,order.one,order.goods from customer leftjoin order on customer.cno=order.cno
執行一下,查詢結果如下:
cnonameaddress
age onogoods1張三
長沙25
101牙刷2李四
北京213王五
上海36
301電風扇
完全符合要求,上述例子,如果以
custmoer
為左表,以
order
表為右表,進行右外連線查詢,完成的功能是查詢所有訂了貨的客戶名單。
oracle
:(oracle
的風格與眾不同,可理解為右連線中符號
+所在邊的表就是左表)
select customer.*,order.one,order.goods fromcustomer,order where customer.cno(+)=order.cno
sql server(access
與sqlserver相同)
:select customer.*,order.one,order.goods from customerright join order on customer.cno=order.cno
執行後查詢結果與使用內連線結果居然一致辭,細想一下,對於右連線而言,右表
order
中的所有滿足查詢條件的記錄都會在輸出結果中,
order
表中沒有不符合連線條件的記錄,因此與內連線一樣。
外連線雖方便實用,但消耗的資源非常之多,因為它們包含與
null
(不存在)資料匹配的資料,只能在不可避免的情況下使用它,被過度使用,代價可能非常高。避免使用外連線最簡單方法是盡可能多地圍繞它們設計資料庫,避免資料庫的人為設計造成外連線語句的過多使用。
資料庫外連線
外連線的理解 就是具有外來鍵關係的兩張表之間的關係,比如學生表student裡面的studentid可能在分數表score裡面是乙個外來鍵stuid,正常情況下,學生表裡面有了學生的資訊資料之後,那麼在score表裡面也應該對應的有資訊,但是現在存在的問題就是有了studentid不一定會在分數表中...
資料庫查詢內連線,外連線,各種查
一 外連線 1.概念 包括左向外聯接 右向外聯接或完整外部聯接 2.左連線 left join 或 left outer join 1 左向外聯接的結果集包括 left outer 子句中指定的左表的所有 行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有 匹配行,則在相關聯的結果集行中右表...
資料庫多表連線查詢 外連線和內連線
本文主要列舉兩張和三張表來講述多表連線查詢。新建兩張表 表1 student 截圖如下 表2 course 截圖如下 此時這樣建表只是為了演示連線sql語句,當然實際開發中我們不會這樣建表,實際開發中這兩個表會有自己不同的主鍵。一 外連線 外連線可分為 左連線 右連線 完全外連線。1 左連線 lef...