SQL Server 2005中的外聯結用法一:
有兩個表:學生表,學生選課表,表中數據為:
學生表:
學生選課表:
要查看所有學生的選課信息,
標准的SQL語句,外聯結語句為
use stu_course select L.sno,sname,ssex,sage,sdept,cno,grade from student L,sc where L.sno=sc.sno(*)
理論上的結果為:
但是,在SQLServer2005中運行會出現錯誤,錯誤提示為:
消息 102,級別 15,狀態 1,第 4 行
'*' 附近有語法錯誤。
在SQLServer2005中,相應的T-SQL語句應該為:
use stu_course select L.sno,sname,ssex,sage,sdept,cno,grade from student L left join sc on L.sno=sc.sno
運行結果為:
同時,還可以在on後面再加上where限定條件:
use stu_course select L.sno,sname,ssex,sage,sdept,cno,grade from student L left join sc on L.sno=sc.sno where L.sno in(95001,95002,95003,95004)
這時,運行結果為:
以上這個例子是左外聯結查詢,即:結果表中包含第一個表中所有滿足條件的
記錄,如果在第二個表中有滿足聯結條件的記錄,則返回相應的值,否則返回NULL
SQLServer2005中的外聯結查詢用法(續):
有三個表:學生表,學生選課表,課程表,表中數據為:
學生表:
學生選課表:
課程表:
左聯結查詢舉例:
use stu_course select L.sno,sname,ssex,sage,sdept,cno,grade from student L left join sc on L.sno=sc.sno
結果為:
右聯結查詢舉例:
use stu_course select sno,course.cno,course.cname from sc right join course on sc.cno=course.cno
結果為:
全外聯結查詢舉例:
use stu_course select sno,course.cno,course.cname from sc full join course on sc.cno=course.cno
結果為:
如果將這個全外聯中的左右兩個表交換順序:
use stu_course select sno,course.cno,course.cname from course full join sc on sc.cno=course.cno
結果仍為:
由以上例子可以看出:
對於左外聯結,結果表中包含第一個表中所有滿足條件的記錄,如果在第二個表中有滿足聯結條件的記錄,則返回相應的值,否則返回NULL;
對於右外聯結,結果表中包含第二個表中所有滿足條件的記錄,如果在第一個表中有滿足聯結條件的記錄,則返回相應的值,否則返回NULL;
對於全外聯結,結果表中包含兩個表中所有滿足條件的記錄,如果在其中一個表中有滿足聯結條件的記錄,則返回相應的值,否則返回NULL;