SQL Server full join & cross join 谁来讲解下?

BlackMoon_MBA 2009-07-01 08:01:51
声明: 我是个学员 很菜很菜的菜鸟...

上课老师 讲了 [多表联查] inner join 、 left (outer) join 、 right (outer) join

让我们 full & cross 感兴趣的去了解下..

我很想知道详细的解释...

比如:

例举几个实例让我看下 可以么?

(可以用SQL语句,最好是T-SQL语句)

小弟在此谢过...
...全文
2447 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
幸运的意外 2009-07-02
  • 打赏
  • 举报
回复
这些东西往上应该有很多的说明。full就是根据等值关系将两个表连起来,两个表的所有行都会显示出来。
而cross就是不依赖等值关系而将2个表连起来,有很多数据是没有实际意义的。
hui_hui_2007 2009-07-02
  • 打赏
  • 举报
回复
!= 与 <> 在实际中没有任何区别呀?
mustudent 2009-07-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 blackmoon_mba 的回复:]
请问这位大哥

full join & cross join 用于了哪段中哦?

还有 记得数据库里 怎么老师说 不等于 不是 '!=' 而是 ' <>'这样的额?

为什么呢?
[/Quote]
另:
不等于使用"<>"符,是T-SQL的规定,没办法...
mustudent 2009-07-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 blackmoon_mba 的回复:]
请问这位大哥

full join & cross join 用于了哪段中哦?

还有 记得数据库里 怎么老师说 不等于 不是 '!=' 而是 ' <>'这样的额?

为什么呢?
[/Quote]
Full Join 相当于只把两个表的字段相加到了一起,而行数等于行数较多的表,不会增加行数(我的理解)
Cross Join 是笛卡尔积,比如一个表有2行,而另外的表有3行,那么Cross Join后就是6行
使用Cross Join的时候不需要设置ON条件,而Full Join的时候需要
Four 2009-07-01
  • 打赏
  • 举报
回复

--Test Data
CREATE TABLE #First
(
userID smallint,
userName nvarchar(50),
userAddress nvarchar(200)
)
INSERT INTO #First
SELECT 1, 'Kim', 'China' UNION ALL
SELECT 2, 'Tom', 'America' UNION ALL
SELECT 3, 'Lily', 'Japan'

CREATE TABLE #Second
(
userID smallint,
userName nvarchar(50),
userAddress nvarchar(200)
)
INSERT INTO #Second
SELECT 2, 'Kim', 'China' UNION ALL
SELECT 5, 'Tom', 'America' UNION ALL
SELECT 6, 'Lily', 'Japan'

--FULL JOIN
/*
FULL JOIN就是把两个表完全连起来,不管对应的连接值是否存在
*/
SELECT * FROM #First a
FULL JOIN #Second b
ON a.userID = b.userID

--CROSS JOIN
/*
CROSS JOIN按笛卡尔积连接,也就是两表组合的任何形式
*/
SELECT * FROM #First a
CROSS JOIN #Second b

DROP TABLE #First
DROP TABLE #Second
BlackMoon_MBA 2009-07-01
  • 打赏
  • 举报
回复
请问这位大哥

full join & cross join 用于了哪段中哦?

还有 记得数据库里 怎么老师说 不等于 不是 '!=' 而是 '<>'这样的额?

为什么呢?
jiangshun 2009-07-01
  • 打赏
  • 举报
回复
--查找学生数据库中每个学生的情况和选修的课程情况
use xscj
select *
from xs inner join xs_kc
on xs.学号=xs_kc.学号
go


--从数据库xscj中查询学生的姓名、课程名和成绩
use xscj
select 姓名,课程名,成绩
from xs join xs_kc
on xs.学号=xs_kc.学号
join kc
on kc.课程号=xs_kc.课程号
go


--内连接— …inner join… on…
--查找选修了‘计算机基础’课程且成绩在80分以上的学生的学号、姓名、课程名及成绩
use xscj
select 学号,姓名,课程名,成绩
from xs join xs_kc
on xs.学号=xs_kc.学号
join kc
on kc.课程号=xs_kc.课程号
where 课程名=‘计算机’ and 成绩>=80
go

--查找不同课程但成绩相同的学生的学号、课程号和成绩
use xscj
select a.学号,a.课程号,b.课程号,b.成绩
from xs_kc a join xs_kc b
on a.成绩=b.成绩 and a.学号=b.学号
and a.课程号!=b.课程号
go

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧