一. 查询商品分类id为10或11的商品对应的商品信息(多表查询)
本题目要求编写SQL语句, 以sh_goods_category表为主表,sh_goods表为从表,查询商品分类id为10或11的商品对应的商品id、商品名称、分类id及分类名称。注意:查询结果显示字段依据输出样例设置。 提示:请使用SELECT语句作答
作为一个初学者, 相信有很多人在第一次做这道题的时候都遇见了自己的问题, 接下来给大家分析一下这道题的坑(有点多啊)
- 当两个表单做外连接操作时, 要分清楚以谁为主表, 右边的表是主表则使用
right join
, 反之使用left join
- 当两个表单做外连接操作时, 除了要写上连接条件外, 如若还有其他的条件, 要以主表的的字段为判断属性
- 此外, 这道题由题意可知,
sh_goods
和sh_goods_category
做完外连接后, 查询商品分类id为10或11的商品
这里, 咱们主要说一下条件放在on
和放在where
后面的区别;
- 当条件放在
on
后面, 后面的条件视为连接条件, 如果不满足, 则显示主表的数据, 从表中的数据以NULL
填充 - 当条件放在
where
后面, 后面的条件视为查询条件, 是在两表做连接之后, 再进行查询过滤的条件, 如果不满足, 则过滤掉, 所以查询的结果是空
故这道题的最终答案为
select g.id gid, g.name gname, c.id cid, c.name cname from sh_goods g right join sh_goods_category c on g.category_id = c.id where c.id = 10 or c.id = 11;