SQL JOIN,sqljoin
在機房收費系統個人重構的時候,很多的功能都需要根據資料庫中的一個表中的資訊,去查詢另一個表中相匹配的資訊,我們用到了視圖,但是你有沒有注意到下面的SQL語句呢?(SELECT...FROM...JOIN...ON...),接下來我們就一起來瞭解SQL中的JOIN.
1、什麼是JOIN?
Join是關係型資料庫系統的重要操作之一,SQL Server中包含的常用Join:內聯結、外聯結和交叉聯結等,Join用於根據兩個或者多個表中的列之間的關係,從這些表中查詢資料。
2、怎麼使用JOIN?
建立兩張表作為例子,表如下
●INNER JOIN
SQL語句
<span style="color:#333333;">select * from T_NumA </span><span style="color:#ff0000;">inner join</span><span style="color:#333333;"> T_NumB </span><span style="color:#ff0000;">on</span><span style="color:#333333;"> T_NumA .aID =T_NumB .bID </span>
結果如下
啟動並執行結果是得到兩個表之間的交集。用右邊的圖可以看出,Inner join符合交換律:“A inner join B”,“B inner join A”一樣。
●OUTER JOIN 1)、LEFT(OUTER)JOIN和RIGHT(OUTER)JOIN
SQL語句
<span style="color:#333333;">select * from T_NumA </span><span style="color:#ff0000;">left outer join</span><span style="color:#333333;"> T_NumB on T_NumA .aID =T_NumB .bID </span>
<span style="color: rgb(51, 51, 51); ">select * from T_NumA </span><span style="color:#ff0000;">right outer join</span><span style="color:#333333;"> T_NumB on T_NumA .aID =T_NumB .bID </span>
運行結果
LEFT:
啟動並執行結果:產生表A的完全集,而B表中匹配的則有值,沒有匹配的則以null值取代。
RIGHT:
從啟動並執行結果一眼就可以看出來,該聯結產生表B的完全集,而A表中匹配的則有值,沒有匹配的則以null值取代。
2)、FULL(OUTER)JOIN
SQL語句
<span style="color:#555555;">select * from T_NumA </span><span style="color:#ff0000;">full outer join</span><span style="color:#555555;"> T_NumB on T_NumA .aID =T_NumB .bID </span>
運行結果:
由結果可知:該聯結產生A和B的並集。但是需要注意的是,對於沒有匹配的記錄,則會以null做為值。
●CROSS JOIN
SQL語句
<span style="color:#555555;">select * from T_NumA </span><span style="color:#ff0000;">cross join</span><span style="color:#555555;"> T_NumB </span>
運行結果:
由運行結果可知:交叉聯結啟動並執行結果就是咱們在資料庫系統原理中學的笛卡爾積(Cartesian Product),產生一個6*6=36行記錄的結果集。
3、結束語
本文章所講的聯結語句都是將不同表的列進行縱向拼接,因為在做機房收費系統個人重構的時候,只涉及到縱向拼接表的查詢,有縱向,那麼肯定也有橫向,橫向拼接也有多種方式:Not in,Union和Intersect,這裡只做簡單介紹,Not in是去兩個結果集的差集。Union是兩個集合的並集,會自動重複資料刪除的記錄,也可以用Union All來保留所有記錄行。Intersect是兩個集合的交集,即同時存在於兩個集合中的記錄。
如果有什麼不妥的地方,歡迎各位博友斧正!!!
對於SQL中join on 的用法神馬的
SELECT 顧客號,顧客點菜表.菜編號,菜名,單價,數量;
FROM 顧客點菜表 JOIN 菜單表;
ON 顧客點菜表.菜編號 = 菜單表.菜編號;
WHERE 單價 >= 40;
ORDER BY 顧客點菜表.菜編號 DESC;
可以 替換為:
SELECT 顧客號,顧客點菜表.菜編號,菜名,單價,數量
FROM 顧客點菜表, 菜單表
WHERE
顧客點菜表.菜編號 = 菜單表.菜編號
AND 單價 >= 40
ORDER BY 顧客點菜表.菜編號 DESC
關於 JOIN 的具體例子, 可參考:
INNER / LEFT / RIGHT / CROSS / FULL JOIN
hi.baidu.com/...2.html
對於SQL中join on 的用法神馬的
SELECT 顧客號,顧客點菜表.菜編號,菜名,單價,數量;
FROM 顧客點菜表 JOIN 菜單表;
ON 顧客點菜表.菜編號 = 菜單表.菜編號;
WHERE 單價 >= 40;
ORDER BY 顧客點菜表.菜編號 DESC;
可以 替換為:
SELECT 顧客號,顧客點菜表.菜編號,菜名,單價,數量
FROM 顧客點菜表, 菜單表
WHERE
顧客點菜表.菜編號 = 菜單表.菜編號
AND 單價 >= 40
ORDER BY 顧客點菜表.菜編號 DESC
關於 JOIN 的具體例子, 可參考:
INNER / LEFT / RIGHT / CROSS / FULL JOIN
hi.baidu.com/...2.html