简单SQL语句,你知道它的运行结果吗?(欢迎讨论!)

pbsql 2006-09-22 09:17:39
有两表a和b,前两字段完全相同:(id int,name varchar(10)...),都有下面的数据(当然还有其它字段,这里不列出来了):
id name
----------- ----------
1 a
2 b
3 c

以下的查询语句,你知道它的运行结果吗?:
1.
select * from a left join b on a.id=b.id where a.id=1
2.
select * from a left join b on a.id=b.id and a.id=1
3.
select * from a left join b on a.id=b.id and b.id=1
4.
select * from a left join b on a.id=1
...全文
2812 148 打赏 收藏 转发到动态 举报
写回复
用AI写文章
148 条回复
切换为时间正序
请发表友善的回复…
发表回复
fellowcheng 2006-12-27
  • 打赏
  • 举报
回复
再看一次
zhang_yzy 2006-12-27
  • 打赏
  • 举报
回复
听老大一席话,受益非浅!
zxbyhcsdn 2006-12-27
  • 打赏
  • 举报
回复
学校的东西还是有用啊!!
tianyan316 2006-12-27
  • 打赏
  • 举报
回复
学习
sp4 2006-12-27
  • 打赏
  • 举报
回复
这个题目不错,很适合了解SQL基础
zxbyhcsdn 2006-12-26
  • 打赏
  • 举报
回复
倒!还有问题5:
偶来解释:

偶上学学习数据库原理的时候,讲join的时候好像是这样讲的哈:
首先要认识倒笛卡儿集,这个是join的基础如下两种方法都可以得到

select * from testA full outer join testB on 1=1;
或者
select * from testA,testB ;

a.id a.name b.id b.name
-------------------------------
1 a 1 a
1 a 2 b
1 a 3 c
2 b 1 a
2 b 2 b
2 b 3 c
3 c 1 a
3 c 2 b
3 c 3 c


内连接时,返回查询结果集合中的仅是笛卡儿集中符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件
的行。
而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外
连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

下面针对问题4和问题5来解释:

问题4:
select * from test1 a left join test2 b on a.id=1

1 a 1 a
1 a 2 b
1 a 3 c
2 b NULL NULL
3 c NULL NULL

结果就是笛卡儿集中的a.id=1的记录(就是前面三条),并保留左表testA的所有数据行(就是后面两条)

问题5:
select * from test1 a left join test2 b on b.id=1

1 a 1 a
2 b 1 a
3 c 1 a

结果就是笛卡儿集中的b.id=1的记录(正好三条就包含了TestA表的所有数据行)


偶不太赞成邹老大的Left join 就是用左边的记录去匹配右边的记录的理解,

还是数据库原理一书上对left join 的解释来理解比较好!!

Dennis0529 2006-12-26
  • 打赏
  • 举报
回复
学习!!!
yudi010 2006-12-26
  • 打赏
  • 举报
回复
ok
wlyok 2006-12-26
  • 打赏
  • 举报
回复
还真没注意过,学习还是要坚持阿!!

csdn还是要常混的
b1688890284 2006-12-26
  • 打赏
  • 举报
回复
請問 select * from test1 a left join test2 b on b.id=1
結果為
1 a 1 a
2 b 1 a
3 c 1 a
又怎么解釋?
b1688890284 2006-12-26
  • 打赏
  • 举报
回复
1.
select * from test1 a left join test2 b on a.id=b.id where a.id=1
2.
select * from test1 a left join test2 b on a.id=b.id and a.id=1
3.
select * from test1 a left join test2 b on a.id=b.id and b.id=1
4.
select * from test1 a left join test2 b on a.id=1
5
select * from test1 a left join test2 b on b.id=1
1
1 a 1 a

2
1 a 1 a
2 b NULL NULL
3 c NULL NULL

3
1 a 1 a
2 b NULL NULL
3 c NULL NULL

4
1 a 1 a
1 a 2 b
1 a 3 c
2 b NULL NULL
3 c NULL NULL

5
1 a 1 a
2 b 1 a
3 c 1 a
zhuaiman 2006-12-26
  • 打赏
  • 举报
回复
支持邹建的严谨精神!
nowkok 2006-12-26
  • 打赏
  • 举报
回复
学习
zxbyhcsdn 2006-12-26
  • 打赏
  • 举报
回复
强烈B4 在开发中写 2,3,4这样的Sql的人!!

就又点类似用两个变量实现变量的值互换一样,又什么意义捏!!容易出错,而且别人半天看不懂!

不过用来深刻理解Left join 还是很有用的.避免开发的时候犯错误哈!!
zxbyhcsdn 2006-12-26
  • 打赏
  • 举报
回复
哼哼!!偶全做对了的!!

这又何难, 上学的时候<<数据库原理>>一书上讲的那么清楚.
NoThiNg2050 2006-12-26
  • 打赏
  • 举报
回复
学习,飘过……
vivdnet 2006-12-26
  • 打赏
  • 举报
回复
拿去给俺老板做,他也做错了,然后他说:“谁要这样写SQL,就开除谁。”
akuzou 2006-12-26
  • 打赏
  • 举报
回复
今天才理解了join的联接方式,受教了!
feixiangVB 2006-12-26
  • 打赏
  • 举报
回复
學習了~~~~~~`
Andy__Huang 2006-12-26
  • 打赏
  • 举报
回复
看一次
加载更多回复(128)

34,590

社区成员

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

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