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; |