我有一个家庭作业问题,请帮助我做一些解释,以便我能理解。
您正在撰写查询,寻找从未订购意大利辣香肠比萨的所有客户。哪个查询最匹配?
select distinct
c.customer_name
from
customer c,
orders o
where
o.customer_id = c.customer_id
and o.pizza_type = ‘pepperoni
select
c.customer_name
from
customer c
where
c.customer_id not in
(
select
o.customer_id
from
orders o
where
o.pizza_type != ‘pepperoni’
)
select distinct
c.customer_name
from
customer c
left join orders o
on on.customer_id = c.customer_id
and o.pizza_type = ‘pepperoni’
where
o.pizza_type is null
select
c.customer_name
from
customer c,
orders o
where
o.customer_id = c.customer_id
and o.pizza_type = ‘pepperoni’
group by
c.customer_name
having count(*) = 0
答案 0 :(得分:2)
3 ,假设on.customer_id
是您的错字,应为o.customer_id
说明:
1 :选择所有订购意大利辣香肠披萨的客户。
2 :选择所有只订购意大利辣香肠披萨的客户。
3 :选择所有从未订购意大利辣香肠披萨的客户。
4 :不会选择任何人。
答案 1 :(得分:1)
not in
和!= ‘pepperoni’
)为真答案 2 :(得分:1)
此查询选择已经订购意大利辣香肠的人,而不是那些没有订购意大利辣香肠的人。
这也选择了所有订购意大利辣香肠的人。在子查询中,它选择所有不是意大利辣香肠的订单,然后(在主查询中),它查找不在该子查询中的所有客户。因此,你得到所有没有订购“不辣椒”比萨饼的人,所以每个人都订购了意大利辣香肠。
这是正确的查询。
这不会返回任何结果。