SQL SERVER 系列(6)子查詢、多表操作、聯合
當我們對數據庫進行操作的時候經常會遇到對多個表操作的情況,這時我們必須要用到一些特殊的操作,下面來看一看具體的內容。
子查詢:
首先來看一下子查詢,所謂的子查詢就是一個查詢語句在嵌套一個查詢語句。
關於子查詢這裏需要注意兩點:
1:內層查詢必須使用()括起來。
2:在執行的時候,先執行內層查詢,得到結果後將此結果返回給外層查詢,最後再執行外層查詢。
下面來看兩個實例以便我們更好的理解。
實例1:顯示a表和b表中都有的員工信息
select * from a where 姓名 in (select 姓名 from b)
實例2:顯示a表中有b表中沒有的員工信息
select * from a where 姓名 not in (select * from b)
多表操作:
來說一下多表連接的方法。有兩種方法笛卡爾乘積和join on連接。下面詳細的介紹這兩種連接方法。
1:笛卡爾乘積(交叉連接)
語法:
Select 字段名列表 from 表名1,表名2 …… [where條件]
(默認產生的記錄總數=兩個數記錄乘積)
實例:顯示員工表和公司表中員工的正確信息
select 員工表.姓名,性別,年齡,公司名稱,地址 from 員工表,公司表 where 員工表.姓名=公司表.姓名
2:join in連接
Join on連接可以分爲一下幾種連接:
內連接:inner join 必須是滿足條件的記錄
左外連接:left join 顯示左表所有的記錄,如果右表沒有與之相對應記錄則相應字段爲空
右外連接:right join顯示右表所有的記錄,如果左表沒有與之相對應記錄則相應字段爲空
全外連接:顯示所有記錄,如果另一個表中沒有與之相應得記錄,則相應字段爲空
內連接語法:
Select 字段名列表 from 表名1 inner join 表名2 on 條件
實例:以內連接顯示員工表和公司表的正確信息
select 員工表.姓名,性別,年齡,公司名稱,地址 from 員工表 inner join 公司表 on 員工表.姓名=公司表.姓名
左外連接語法:
Select 字段名列表 from 表名1 left join 公司表 on 條件
實例:用左外連接顯示員工表和公司表的信息
右外連接和左外連接用法本質是一樣的在這就不多介紹,按着葫蘆畫瓢就OK了。
全外連接:
現在看全外連接我們通過個實例來了解它。
實例:用全外連接顯示三個表的數據
select 員工表.姓名,性別,年齡,公司名稱,地址,網址 from 員工表 full join 公司表 on 員工表.姓名=公司表.姓名 full join 網址表 on 公司表.公司名稱=網址表.公司名
好了多表操作就說這些了。
聯合:
聯合的作用是顯示幾個表的內容在一個表上。
注意:
1:每個select語句字段必須要一致
2:如果字段名不同,則以第一個select語句爲準
3:要合併的數據類型必須兼容,即類型可以不同,但必須可以轉換
實例:顯示軟件班和網絡班的信息在一個表上
select * from 軟件班 union select * from 網絡班
·重複的記錄只顯示一條,如果顯示所有要用:all,例如上面的實例要顯示全部則改爲:
select * from 軟件班 union all select * from 網絡班
本篇文章又要到了畫句號的時候,本片文章講的都是對多個表進行操作的的內容,靈活運用對多表的操作將大大提高工作效率。