当前位置: 代码迷 >> Sql Server >> 请教,实际场合下什么时候使用交叉连接cross join,在select语句中交叉连接经常与什么clause配合使用
  详细解决方案

请教,实际场合下什么时候使用交叉连接cross join,在select语句中交叉连接经常与什么clause配合使用

热度:77   发布时间:2016-04-24 10:21:40.0
请问,实际场合下什么时候使用交叉连接cross join,在select语句中交叉连接经常与什么clause配合使用
麻烦举个例子,
如题,谢谢!
------解决方案--------------------
我面试的时候经历过一次cross join的用法的问题,当时没答出来。
下面这个问题应该是很典型的吧?





create table Student
(
S# varchar(50),
Sname varchar(50),
Ssex varchar(2)
)

insert into Student values ('A001','张三','1')
insert into Student values ('A002','李四','1')
insert into Student values ('A003','王五','0')

create table Course2
(
C# varchar(50),
CName varchar(50),
)

insert into Course2 values('C001','语文')
insert into Course2 values('C002','数学')
insert into Course2 values('C003','英语')


create Table SC 
(
S# varchar(50),
C# varchar(50),
Score varchar(50)
)
insert into SC values ('A001','C001','88')
insert into SC values ('A001','C002','89')
insert into SC values ('A001','C003','98')
insert into SC values ('A002','C001','78')
insert into SC values ('A002','C002','97')
insert into SC values ('A003','C001','65')

select * from Student

select * from Course2

select * from SC



select * from Course2 A cross apply SC B where A.C#=B.C#





--查询缺考的学生及缺考的科目。
--思路: 先找出所有学生应该参加那些考试(cross join); 然后再左连接成绩信息,并选择null的项
select * from
(
select * from  Student A cross join Course2 B
)t left join SC on t.C#=SC.C# and t.S#=sc.S#
where SC.C# is null



A002 李四 1 C003 英语 NULL NULL NULL
A003 王五 0 C002 数学 NULL NULL NULL
A003 王五 0 C003 英语 NULL NULL NULL
  相关解决方案