《SQL练习题及答案.doc》由会员分享,可在线阅读,更多相关《SQL练习题及答案.doc(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、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)。顾客表的数据用插入语句输入数据,其它两表可用任意方式输入数据。create table OrderI
2、tem (顾客号 char(4),商品号 char(4),日期 datetime,数量 smallint, primary key (顾客号,商品号,日期), foreign key (商品号) references Article (商品号), foreign key (顾客号) references Custommer(顾客号) );2. 检索定购商品号为0001的顾客号和顾客名。 select distinct 顾客号,顾客名from OrderItemwhere 商品号=0001 3. 检索定购商品号为0001或0002的顾客号。 select distinct 顾客号 from Or
3、derItemwhere 商品号=0001 or 商品号=0002; 4. 检索至少定购商品号为0001和0002的顾客号。 select顾客号 from OrderItem where 商品号=0001 and 顾客号 in( select 顾客号 from OrderItem where 商品号=0002); 5. 检索至少定购商品号为0001和0002的顾客号。(用自表连接方法) select X. 顾客号 from OrderItem X,OrderItem Y where X.顾客号=Y.顾客号 and X.商品号=0001 and Y. 商品号=0002; 6. 检索没定购商品的顾
4、客号和顾客名。 select 顾客号,顾客名 from Custommer where 顾客号 not in (select 顾客号 from OrderItem); 7. 检索一次定购商品号0001商品数量最多的顾客号和顾客名。 select 顾客号,顾客名 from Custommer where 顾客号 in(select 顾客号 from OrderItem where 商品号=0001and 数量=(select MAX(数量)from OrderItem where 商品号=0001);8. 检索男顾客的人数和平均年龄。 select count(*) 人数,avg(年龄) 平均年
5、龄 from Custommer where 性别=男; 9. 检索至少订购了一种商品的顾客数。 select count(distinct 顾客号) from OrderItem; 10. 检索订购了商品的人次数。select count( 顾客号) from OrderItem;select count(distinct 顾客号) from OrderItem;11. 检索顾客张三订购商品的总数量及每次购买最多数量和最少数量之差。 selectsum( 数量),MAX(数量)-MIN(数量) from OrderItem,Custommer where OrderItem.顾客号=Cust
6、ommer.顾客号 and 顾客名=张三;12. 检索至少订购了3单商品的顾客号和顾客名及他们定购的商品次数和商品总数量,并按商品总数量降序排序。 select Custommer.顾客号,顾客名,count( *),Sum(数量) from OrderItem,Custommer where OrderItem.顾客号=Custommer.顾客号group by Custommer.顾客号,顾客名having count( *)3 order by 4 desc;13. 检索年龄在30至40岁的顾客所购买的商品名及商品单价。 select 商品名,单价 from Custommer,Arti
7、cle,OrderItemwhere Custommer.顾客号=OrderItem.顾客号 and Article.商品号=OrderItem.商品号and 年龄 between 30 and 40;14. 创建一个视图GM,字段包括:顾客号,顾客名和定购的商品名,日期和金额(金额=数量*单价)。指定用内连接方式做。 create view GM asselect Custommer.顾客号,顾客名,商品名,日期,单价*数量 as 金额from Custommer,Article,OrderItemwhere Custommer.顾客号=OrderItem.顾客号 and Article.商
8、品号=OrderItem.商品号 create view GM1 asselect Custommer.顾客号,顾客名,商品名,日期,单价*数量 as 金额from (Custommer inner join OrderItem on Custommer.顾客号=OrderItem.顾客号)inner join Article onArticle.商品号=OrderItem.商品号15. 检索购买的商品的单价至少有一次高于或等于1000元的顾客号和顾客名。 select Custommer.顾客号,顾客名from Custommer,OrderItem,Article whereCustomm
9、er.顾客号=OrderItem.顾客号 andArticle.商品号=OrderItem.商品号and 单价100016. 检索购买的购买价都高于或等于1000元的顾客号和顾客名。 select Custommer.顾客号,顾客名 from Custommer where 顾客号 in (select 顾客号 from OrderItem where 顾客号 not in(select 顾客号 from OrderItem,Article where OrderItem.商品号=Article.商品号 and 单价10)23.建立断言:顾客的年龄必须大于18岁。 Create ASSERTION A1 check ( not exists (select * from Custommer where 年龄=18)24. 把修改商品单价的权限授给用户Wang, 用户Wang可以转授该权限。 Grant update (单价) on Article to Wang with grant option25. 把修改商品单价的权限用户Wang收回,转授出去的也级联收回。 revoke update (单价) on Article from Wangcascade