单选题
11.
设在SQL Server 2008某数据库中有商品表(商品号,商品名,类别,单价)和销售表(商品号,销售时间,销售数量)。现要查询2015年9月没有被卖出过的“手机”类商品的商品名和单价。下列查询语句中能正确完成该查询要求的是______。
A、
SELECT 商品名, 单价 FROM 商品表
JOIN 销售表 ON 商品表.商品号 = 销售表.商品号
WHERE 销售时间 NOT BETWEEN '2015/9/1' AND '2015/9/30'
AND 类别 = '手机'
B、
SELECT 商品名, 单价 FROM 商品表
WHERE 商品号 IN (
SELECT 商品号 FROM 销售表
WHERE 销售时间 BETWEEN '2015/9/1' AND '2015/9/30'
AND 类别 != '手机')
AND 类别 = '手机'
C、
SELECT 商品名, 单价 FROM 商品表
WHERE 商品号 NOT IN (
SELECT 商品号 FROM 销售表
WHERE 销售时间 BETWEEN '2015/9/1' AND '2015/9/30'
AND 类别 = '手机')
AND 类别 = '手机'
D、
SELECT 商品名, 单价 FROM 商品表
JOIN 销售表 ON 商品表.商品号 = 销售表.商品号
WHERE 销售时间 BETWEEN '2015/9/1' AND '2015/9/30'
AND 类别 != '手机'
【正确答案】
C
【答案解析】
使用子查询进行基于集合的测试时,通过运算符IN和NOT IN,将一个表达式的值与子查询返回的结果集进行比较。其形式是:
WHERE 表达式 [NOT] IN(子查询)
这种形式的子查询的语句是分步骤实现的,即先执行子查询,然后再子查询的结果基础上再执行外层查询。本题中子查询查询的是在2015年9月卖出的手机,然后再查询不属于这个范围的商品名和单价。故答案为C项。
提交答案
关闭