关于SQL查询

关于SQL查询

SELECT
       s.shop_id,
       s.shop_name,
       s.shop_desc,
       s.shop_addr,
       s.phone,
       s.shop_img,
       s.priority,
       s.create_time,
       s.last_edit_time,
       s.enable_status,
       s.advice,
       a.area_id,
       a.area_name,
       sc.shop_category_id,
       sc.shop_category_name
FROM
     tb_shop s,
     tb_area a,
     tb_shop_category sc
WHERE
    s.area_id=a.area_id
  AND
    s.shop_category_id = sc.shop_category_id
  AND
    s.shop_id = 1

http://img1.sycdn.imooc.com//climg/5e5281a3091850be03280484.jpg

http://img1.sycdn.imooc.com//climg/5e5281b009a7d16b05460335.jpg

老师你好,我测试过程中发现一个问题,我的表中有一个数据没有shop_category_id,然后我用上面这段SQL查询的时候得到的是空,查询其他的行是正常的,当我将shop_category_id补上以后,执行同样的查询就可以查到了,我想不明白这是为什么,麻烦老师看一下谢谢

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕酷酷 2020-02-24 16:46:41

同学你好,

1、同学要首先明白这个sql语句的含义:表示通过店铺id查询店铺信息。

2、这里的这个sql语句有三个限定条件,分别是:s.area_id=a.area_id   和s.shop_category_id = sc.shop_category_id 和   s.shop_id = 1,这里同学编写的语句中限定店铺id为1,也就只有一条数据,并且店铺表中的shop_category_id为null,所以也就没有与分类表匹配值相等的数据,所以查询出来为null。

例如:

这里同学可以尝试将限定店铺id的条件删除。则就可以查询出其他匹配的数据,如:

老师将shop_category_id置为null,如:

http://img1.sycdn.imooc.com/climg/5e538d550912f4bc06800156.jpg

http://img1.sycdn.imooc.com/climg/5e538d6309612c6407370353.jpg

3、老师这里所描述的外键查询,表示进行等值连接,查询数据,而不是进行约束查询哦!

4、这里使用left join的结果会与当前sql的结果不一致,以为left join表示左连接,也就是以左表为基准,右表进行匹配,会将null的值进行查出,如:

SELECT
    s.shop_id,
    s.shop_name,
    s.shop_desc,
    s.shop_addr,
    s.phone,
    s.shop_img,
    s.priority,
    s.create_time,
    s.last_edit_time,
    s.enable_status,
    s.advice,
    a.area_id,
    a.area_name,
    sc.shop_category_id,
    sc.shop_category_name
FROM
    tb_shop s
        left join tb_area a on s.area_id=a.area_id
        left join tb_shop_category sc on s.shop_category_id = sc.shop_category_id
where s.shop_id = 1

http://img1.sycdn.imooc.com//climg/5e538de009bc59c305390094.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕酷酷 2020-02-24 11:57:41

同学你好,这里应该是由于同学限定s.shop_category_id = sc.shop_category_id并且限定shop_id=1,当shop_category_id为null时,没有与之对应的,所以输出的为空。如果同学将shop_category_id补上,两个表与之对应,因为使用外键关联,所以可以查出信息。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 关于shop_category_id的缺失会导致整个查询为空我还是不太理解,比如例子中s.shop_category_id = sc.shop_category_id,那关于shop_category的信息查不到,那返回其他的可以查到的内容不可以吗?比如shop和area的内容。还有老师提到了外键外键还能约束查询?我可能学的时候没学好,我的理解是外键只对于插入操作约束。最后一个,如果是leftjoin来写SQL有什么差别呢?学到最后了我的一些基础不足就暴露出来了,还请老师细心解答一下,辛苦了
    2020-02-24 12:04:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师