面试题,一条看不懂的SQL语句,求大牛指导

woshi787070135 2017-10-31 07:43:40
表T1(三条记录) 表T2(两条记录)
字段Id 字段A 字段Id 字段B
1 10 1 100
2 20 2 200
3 30
执行下面SQL语句
select id, a, (select b from t2 where t2.id=t1.id) from t1

会出现什么结果?为什么会是这样的结果?
...全文
579 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssiaqgpv 2017-11-21
  • 打赏
  • 举报
回复
这是个左连接。 不建议这样写,如果估化器没有对语句等价改写,而且A的记录多,B的记录也不算太少时,会导致效率很低。
帽子思发 2017-11-21
  • 打赏
  • 举报
回复
我感觉我能去面试了
acen_chen 2017-11-17
  • 打赏
  • 举报
回复
这公司的题目也不怎样啊。。。
  • 打赏
  • 举报
回复
哪家单位的面试题,我也去试试
吉普赛的歌 版主 2017-11-16
  • 打赏
  • 举报
回复
t2 中没有对应的值时, 自然为 NULL, 很正常的了。 楼主只是以前没见过这种写法, 见多了也就习惯了。
xzxmustwin 2017-11-16
  • 打赏
  • 举报
回复
引用 9 楼 zbdzjx 的回复:
这样的子查询,相当于,t1中的每一条记录,都会执行一次子查询。 也就是,t1的id=1时,执行一下子查询,得到100这个值;t1的id=2时,执行一下子查询,得到200这个值;t1的id=3时,执行一下子查询,但没查到值。
这个说法很好 学习了
小野马1209 2017-11-16
  • 打赏
  • 举报
回复
和左关联出来的结果是一样的,只是用了子查询
zbdzjx 2017-11-01
  • 打赏
  • 举报
回复
这样的子查询,相当于,t1中的每一条记录,都会执行一次子查询。 也就是,t1的id=1时,执行一下子查询,得到100这个值;t1的id=2时,执行一下子查询,得到200这个值;t1的id=3时,执行一下子查询,但没查到值。
jinhx 2017-11-01
  • 打赏
  • 举报
回复
不知道题主想问什么,但是子查询最好加一个TOP 1,ID唯一的情况下没问题,但ID也许不是唯一的呢,就异常了
听雨停了 2017-11-01
  • 打赏
  • 举报
回复
就是个左连接,只不过写成了子查询的方式显示
不会VS 2017-11-01
  • 打赏
  • 举报
回复
SELECT b FROM #t2 WHERE #t2.id = #t1.id 这条语句将t1与t2中id相同的连接,
wtujedp 2017-11-01
  • 打赏
  • 举报
回复
就是一个包含子查询的SQL语句。
OwenZeng_DBA 2017-11-01
  • 打赏
  • 举报
回复
引用 楼主 woshi787070135 的回复:
表T1(三条记录) 表T2(两条记录) 字段Id 字段A 字段Id 字段B 1 10 1 100 2 20 2 200 3 30 执行下面SQL语句 select id, a, (select b from t2 where t2.id=t1.id) from t1 会出现什么结果?为什么会是这样的结果?
实际出真知,,有疑问的时候最好自己运行一下
日月路明 2017-11-01
  • 打赏
  • 举报
回复
版主说的对,语句没什么问题,可以理解成是一个左连接等价于 select id, a, b from t1 left outer join  t2 on t2.id=t1.id
二月十六 版主 2017-11-01
  • 打赏
  • 举报
回复
结果什么样,实践一下就知道了
--测试数据
if not object_id(N'Tempdb..#T1') is null
drop table #T1
Go
Create table #T1([id] int,[A] int)
Insert #T1
select 1,10 union all
select 2,20 union all
select 3,30
GO
if not object_id(N'Tempdb..#T2') is null
drop table #T2
Go
Create table #T2([id] int,[B] int)
Insert #T2
select 1,100 union all
select 2,200
Go
--测试数据结束
SELECT id ,
a ,
( SELECT b
FROM #t2
WHERE #t2.id = #t1.id
)
FROM #t1




为什么会出现这个结果,是因为t2中没有和id和t1的id=3的数据对应,所以是空的
shoppo0505 2017-11-01
  • 打赏
  • 举报
回复
你哪里觉得不对?

34,588

社区成员

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

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