SQL练习题及答案1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL练习题:商品销售数据库
商品销售数据库
Article(商品号char(4),商品名char(16),单价Numeric(8,2),库存量int)
Customer(顾客号char(4),顾客名char(8),性别char(2),年龄int)
OrderItem(顾客号char(4),商品号char(4),数量int,日期date)
1. 用SQL建立三个表,须指出该表的实体完整性和参照完整性,对性别和
年龄指出用户自定义的约束条件。(性别分成男女,年龄从10到100)。顾客表的数据用插入语句输入数据,其它两表可用任意方式输入数据。
createtableOrderltem(顾客号char(4),商品号char(4),日期datetime,数量smallint,primarykey(顾客号,商品号,日期),
foreig nkey(商品号)refere ncesArticle(商品号),
foreig nkey(顾客号)refere ncesCustommer(顾客号));
2. 检索定购商品号为,0001?的顾客号和顾客名。
selectdistinct 顾客号,顾客名fromOrderltem
where 商品号='000 1 '
3. 检索定购商品号为,0001?或,0002?的顾客号。
selectdistinct 顾客号fromOrderltem
where 商品号='0001'or 商品号二'0002:
4. 检索至少定购商品号为,0001?和,0002?的顾客号。
select 顾客号fromOrderltemwhere 商品号='0001'and 顾客号in
(select 顾客号fromOrderltemwhere 商品号='0002');
5. 检索至少定购商品号为,0001?和,0002?的顾客号。(用自表连接方法)
selectX顾客号fromOrderltemX,OrderltemY
whereX.顾客号二Y顾客号andX商品号二'0001'andY商品号二'0002:
6. 检索没定购商品的顾客号和顾客名。
select 顾客号,顾客名fromCustommerwhere 顾客号notin
(select 顾客号fromOrderltem);
7. 检索一次定购商品号,0001?商品数量最多的顾客号和顾客名。
select 顾客号,顾客名fromCustommerwhere 顾客号in
(select 顾客号fromOrderItemwhere 商品号='0001'and 数量二
(selectMAX(数量fromOrderItemwhere 商品号='0001'));
8. 检索男顾客的人数和平均年龄。
selectcount(*)人数,avg(年龄)平均年龄fromCustommerwhere 性别='男';
9 .检索至少订购了一种商品的顾客数。
selectcount(distinct 顾客号)fromOrderItem;
10. 检索订购了商品的人次数。
selectco unt(顾客号)fromOrderItem;
selectcount(distinct 顾客号)fromOrderItem;
11. 检索顾客张三订购商品的总数量及每次购买最多数量和最少数量之差。
select sum(数量),MAX(数量)-MIN(数量)fromOrderltem,Custommer whereOrderItem.顾客号二Custommer顾客号and顾客名二'张三';
12 .检索至少订购了3单商品的顾客号和顾客名及他们定购的商品次数和商品
总数量,并按商品总数量降序排序。
selectCustommer.顾客号,顾客名,count(*),Sum(数
量)fromOrderltem,CustommerwhereOrderltem.顾客号二Custommer顾客号groupbyCustommer.顾客号,顾客名havingcount(*)>3orderby4desc;
13. 检索年龄在30 至40 岁的顾客所购买的商品名及商品单价。
select 商品名,单价fromCustommer,Article,Orderltem
whereCustommer.顾客号=Orderltem.顾客号andArticle.商品号=Orderltem.商品号and 年龄between30and40;
14. 创建一个视图GM,字段包括:顾客号,顾客名和定购的商品名,日期和金额(金额=数量* 单价)。指定用内连接方式做。
createviewGMas
selectCustommer顾客号,顾客名,商品名,日期,单价*数量as金额
fromCustommer,Article,Orderltem
whereCustommer.顾客号=Orderltem.顾客号andArticle.商品号=Orderltem.商品号createviewGM1as
selectCustommer顾客号,顾客名,商品名,日期,单价*数量as金额
from(CustommerinnerjoinOrderltemonCustommer.顾客号=OrderItem.顾客号)inn erjo in Article on Article.商品号=OrderItem .商品号
15. 检索购买的商品的单价至少有一次高于或等于1000 元的顾客号和顾客名。
selectCustommer.顾客号,顾客名
fromCustommer,Orderltem,Article
where Custommer.顾客号=Orderltem.顾客号and Article.商品号=OrderItem.商品号and 单价>1000