首页 > 试题广场 >

请问两个语句执行结果为

[不定项选择题]
2 个表,表 1 为邮轮订单表: CruiseOrder ,表 2 为用户表: B2CUser
CruiseOrder:
OrderSerialId B2CUserld OrderPersons OrderAmount
Dc00001 1 2 4000
Dc00002 2 3 6000
Dc00003 3 4 8000
B2CUser:
B2CUserId B2CUserName
1 赵先生

2 钱女士

3 孙先生

小明写了两个 SQL 语句:

SELECT OrderSerialId,B2CUserName,OrderPersons,OrderAmount FROM CruiseOrder co
LEFT JOIN B2CUser bu ON co.B2CUserId=bu.B2CUserId and bu.B2CUserName=’赵先生’
SELECT OrderSerialId,B2CUserName,OrderPersons,OrderAmount FROM CruiseOrder co
LEFT JOIN B2CUser bu ON co.B2CUserId=bu.B2CUserId WHERE bu.B2CUserName=’赵先生’
请问两个语句执行结果为:()
  • 一样
  • 不一样
  • 一样,执行结果为Dc00001 赵先生 2 4000
  • 不一样,
    第一个语句结果为 
                     Dc0001 赵先生 2 4000
                     Dc0002 钱女士 3 6000
                     Dc0003 孙先生 4 8000
    第二个语句结果为
                     Dc0001 赵先生 2 4000
推荐
两次执行结果不一样:选择B。【欢迎批评指正】

补充说明:
A left join B是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的。换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID)。B表记录不足的地方均为NULL。


第1步:首先咱们先看看,两个sql语句共同的sql语句(SELECT OrderSerialId,b2cusername,orderpersons,OrderAmount  FROM  cruiseorder co LEFT JOIN b2cuser bu on 
bu.B2cuserid = co.b2cuserid )执行的结果,结果集记为RESULT(方便后面):

这个结果应该是大家都知道为什么,不再多说。

第2步:第一个sql语句没有where语句,只有on条件语句,这个就是用上面补充说明的那个结论。记录不足的部分变为NULL

第3部:.第二个sql语句用的是where  bu.b2cusername='赵先生',这里是用第1步的结果集RESULT之后,设置的where条件,所以只会筛选一条。





编辑于 2017-05-24 14:30:33 回复(4)
 在使用left jion时,on和where条件的区别如下: 
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。 2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉
发表于 2017-08-20 11:10:20 回复(2)
第一个sql语句执行的结果
第二条sql语句执行的结果

结果就出来了
编辑于 2021-09-12 22:10:21 回复(1)
简单来讲: 
  • 第一点: A LEFT JOIN B ON 【连接条件】   
将A表作为被匹配表用B去匹配A对于没有匹配成功的用null代替最终的结果会将A表(左表)和B中匹配数据和未匹配数据(用null代替)输出
  • 第二点:ON co.B2CUserID = bu.B2CUserId AND bu.B2CUserName = '赵先生' 
AND bu.B2CUserName = '赵先生' 是对B表的输出增加的条件不影响整体结果的输出
  • 第三点:ON co.B2CUserId=bu.B2CUserId WHERE bu.B2CUserName=’赵先生’
WHERE bu.B2CUserName='赵先生'是对整体结果的输出增加的条件最终输出的数据必须包含bu.B2CuserName='赵先生'
发表于 2021-08-06 17:22:33 回复(0)
第一句的赵先生是作为连接条件,由于是左连接所以有多条记录。第二句是在连接之后再用赵先生作为条件筛选出一条,结果只有一条记录
发表于 2020-02-18 11:35:26 回复(0)
这题是个单选题
发表于 2021-07-25 19:40:06 回复(0)