SQL Server 2005中的外联结用法


    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;