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