Get格雅SQL习题.docx
- 文档编号:17331744
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:11
- 大小:17.70KB
Get格雅SQL习题.docx
《Get格雅SQL习题.docx》由会员分享,可在线阅读,更多相关《Get格雅SQL习题.docx(11页珍藏版)》请在冰点文库上搜索。
Get格雅SQL习题
SQL习题
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〕。
顾客表的数据用插入语句输入数据,其它两表可用任意方式输入数据。
createtableOrderItem(顾客号char(4),商品号char(4),日期datetime,数量smallint,
primarykey(顾客号,商品号,日期),
foreignkey(商品号)referencesArticle(商品号),
foreignkey(顾客号)referencesCustommer(顾客号));
2.检索定购商品号为‘0001’的顾客号和顾客名。
selectdistinct顾客号fromOrderItem
where商品号='0001'or商品号='0002';
3.检索定购商品号为‘0001’或‘0002’的顾客号。
selectdistinct顾客号fromOrderItem
where商品号='0001'or商品号='0002';
4.检索至少定购商品号为‘0001’和‘0002’的顾客号。
(用交的方法)
select 顾客号fromOrderItemwhere商品号='0001'and顾客号in
(select顾客号fromOrderItemwhere商品号='0002');
5.检索至少定购商品号为‘0001’和‘0002’的顾客号。
(用自表连接方法)
selectX.顾客号fromOrderItemX,OrderItemY
whereX.顾客号=Y.顾客号andX.商品号='0001'andY.商品号='0002';
6.检索没定购商品的顾客号和顾客名。
select顾客号,顾客名fromCustommerwhere顾客号notin
(select顾客号fromOrderItem);
7.检索一次定购商品号‘0001’商品数量最多的顾客号和顾客名。
select顾客号,顾客名fromCustommerwhere顾客号in
(select顾客号fromOrderItemwhere商品号='0001'and数量=
(selectMAX(数量)fromOrderItemwhere商品号='0001'));
8.检索男顾客的人数和平均年龄。
selectcount(*)人数,avg(年龄)平均年龄fromCustommerwhere性别='男';
9.检索至少订购了一种商品的顾客数。
selectcount(distinct顾客号)fromOrderItem;
10.检索订购了商品的人次数。
selectcount(顾客号)fromOrderItem;
selectcount(distinct顾客号)fromOrderItem;
11.检索顾客张三订购商品的总数量及每次购置最多数量和最少数量之差。
select sum(数量),MAX(数量)-MIN(数量)fromOrderItem,Custommer
whereOrderItem.顾客号=Custommer.顾客号and顾客名='张三';
12.检索至少订购了3单商品的顾客号和顾客名及他们定购的商品次数和商品总数量,并按商品总数量降序排序。
selectCustommer.顾客号,顾客名,count(*),Sum(数量)fromOrderItem,Custommer
groupbyCustommer.顾客号,顾客名
havingcount(*)>3orderby4desc;
13.检索年龄在30至40岁的顾客所购置的商品名及商品单价。
select商品名,单价fromCustommer,Article,OrderItem
and年龄between30and40;
14.创立一个视图GM,字段包括:
顾客号,顾客名和定购的商品名,日期和金额〔金额=数量*单价〕。
指定用内连接方式做。
createviewGMas
selectCustommer.顾客号,顾客名,商品名,日期,单价*数量as金额
fromCustommer,Article,OrderItem
createviewGM1as
selectCustommer.顾客号,顾客名,商品名,日期,单价*数量as金额
from(CustommerinnerjoinOrderItemonCustommer.顾客号=OrderItem.顾客号)
innerjoinArticleon
15.检索购置的商品的单价至少有一次高于或等于1000元的顾客号和顾客名。
selectCustommer.顾客号,顾客名
fromCustommer,OrderItem,Article
where Custommer.顾客号=OrderItem.顾客号and
and单价>1000
16.检索购置的购置价都高于或等于1000元的顾客号和顾客名。
selectCustommer.顾客号,顾客名fromCustommerwhere顾客号in
(select顾客号fromOrderItemwhere顾客号notin
(select顾客号fromOrderItem,Article
whereOrderItem.商品号=Article.商品号and单价<=1000))
17.检索女顾客购置的商品号,商品名和数量合计。
selectArticle.商品号,商品名,sum(数量)fromCustommer,Article,OrderItem
whereOrderItem.顾客号=Custommer.顾客号andOrderItem.商品号=Article.商品号
and性别='女'
groupbyArticle.商品号,商品名
18.检索所有的顾客号和顾客名以及它们所购置的商品号。
〔包括没买商品的顾客〕
selectCustommer.顾客号,顾客名,商品号
19.检索这样的顾客号,顾客名,他们定购了所有的商品〔除法〕
selectCustommer.顾客号,顾客名fromCustommerwherenotexists
(select*fromArticlewherenotexists
(select*fromOrderItem
whereOrderItem.顾客号=Custommer.顾客号andOrderItem.商品号=Article.商品号))
20.检索这样的顾客号,他们至少订购了顾客号为“0002”所订购的所有商品〔除法〕
selectdistinct顾客号fromOrderItemXwherenotexists
(select*fromOrderItemYwhere顾客号='0002'andnotexists
(select*fromOrderItemZwhereZ.顾客号=X.顾客号andZ.商品号=Y.商品号))
21.向Article表插入一条纪录。
删除无人购置的商品。
〔检验一下刚插入的记录是否已被删除〕
deletefromArticlewhere商品号notin
(select商品号fromOrderItem)
22.降低已售出的数量总合超过10件的商品单价为原价的95%。
updateArticleset单价=单价*0.95where商品号in
(select商品号fromOrderItemgroupby商品号havingsum(数量)>10)
23.建立断言:
顾客的年龄必须大于18岁。
CreateASSERTIONA1check
(notexists(select*fromCustommerwhere年龄<=18))
24.把修改商品单价的权限授给用户Wang,用户Wang可以转授该权限。
Grantupdate(单价)onArticletoWangwithgrantoption
25.把修改商品单价的权限用户Wang收回,转授出去的也级联收回。
revokeupdate(单价)onArticlefromWang cascade
SQL练习题一
问题描述:
关系模式:
CARD(CNO,NAME,CLASS)
借书卡关系。
CNO卡号,NAME姓名,CLASS班级
BOOKS(BNO,BNAME,AUTHOR,PRICE,QUANTITY)
图书关系。
BNO书号,BNAME书名,AUTHOR作者,PRICE单价,QUANTITY库存册数
BORROW(CNO,BNO,RDATE)
借书记录关系。
CNO借书卡号,BNO书号,RDATE还书日期
说明:
限定每人每种书只能借一本;库存册数随借书、还书而改变。
要求实现如下12个处理:
1.写出建立BORROW表的SQL语句,要求定义主码完整性约束和外码参照完整性约束。
2.找出借书超过5本的读者,输出借书卡号及所借图书册数。
3.查询借阅了"水浒"一书的读者,输出姓名及班级。
4.查询过期未还图书,输出借阅者〔卡号〕、书号及还书日期。
5.查询书名包括"网络"关键词的图书,输出书号、书名、作者。
6.查询现有图书中价格最高的图书,输出书名及作者。
7.查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。
8.将"C01"班同学所借图书的库存册数都增加100本。
9.从BOOKS表中删除当前无人借阅的图书记录。
10.建立一个视图,显示"C01"班学生的借书信息〔只要求显示姓名和书名〕。
11.查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。
12.对CARD表做如下修改:
a.将NAME最大列宽增加到10个字符〔假定原为6个字符〕。
b.为该表增加1列NAME〔系名〕,可变长,最大20个字符。
------------------------------------------------------------------
1.写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束
--实现代码:
CREATETABLEBORROW(
CNOintFOREIGNKEYREFERENCESCARD(CNO),
BNOintFOREIGNKEYREFERENCESBOOKS(BNO),
RDATEdatetime,
PRIMARYKEY(CNO,BNO))
2.找出借书超过5本的读者,输出借书卡号及所借图书册数
--实现代码:
SELECTCNO,借图书册数=COUNT(*)
FROMBORROW
GROUPBYCNO
HAVINGCOUNT(*)>5
3.查询借阅了"水浒"一书的读者,输出姓名及班级
--实现代码:
SELECT*FROMCARDc
WHEREEXISTS(
SELECT*FROMBORROWa,BOOKSb
ANDb.BNAME=N'水浒'
ANDa.CNO=c.CNO)
4.查询过期未还图书,输出借阅者〔卡号〕、书号及还书日期
--实现代码:
SELECT*FROMBORROW
WHERERDATE 5.查询书名包括"网络"关键词的图书,输出书号、书名、作者 --实现代码: SELECTBNO,BNAME,AUTHORFROMBOOKS WHEREBNAMELIKEN'%网络%' 6.查询现有图书中价格最高的图书,输出书名及作者 --实现代码: SELECTBNO,BNAME,AUTHORFROMBOOKS WHEREPRICE=( SELECTMAX(PRICE)FROMBOOKS) 7.查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出 --实现代码: FROMBORROWa,BOOKSb WHEREa.BNO=b.BNOANDb.BNAME=N'计算方法' ANDNOTEXISTS( SELECT*FROMBORROWaa,BOOKSbb ANDbb.BNAME=N'计算方法习题集' ANDaa.CNO=a.CNO) ORDERBYa.CNODESC 8.将"C01"班同学所借图书的还期都延长一周 --实现代码: UPDATEbSETRDATE=DATEADD(Day,7,b.RDATE) FROMCARDa,BORROWb ANDa.CLASS=N'C01' 9.从BOOKS表中删除当前无人借阅的图书记录 --实现代码: DELETEAFROMBOOKSa WHERENOTEXISTS( SELECT*FROMBORROW WHEREBNO=a.BNO) 10.如果经常按书名查询图书信息,请建立适宜的索引 --实现代码: CREATECLUSTEREDINDEXIDX_BOOKS_BNAMEONBOOKS(BNAME) 11.在BORROW表上建立一个触发器,完成如下功能: 如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中〔注ORROW_SAVE表结构同BORROW表〕 --实现代码: CREATETRIGGERTR_SAVEONBORROW FORINSERT,UPDATE AS IF@@ROWCOUNT>0 INSERTBORROW_SAVESELECTi.* FROMINSERTEDi,BOOKSb ANDb.BNAME=N'数据库技术及应用' 12.建立一个视图,显示"力01"班学生的借书信息〔只要求显示姓名和书名〕 --实现代码: CREATEVIEWV_VIEW AS FROMBORROWab,CARDa,BOOKSb ANDa.CLASS=N'力01' 13.查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出 --实现代码: FROMBORROWa,BOOKSb ANDb.BNAMEIN(N'计算方法',N'组合数学') HAVINGCOUNT(*)=2 ORDERBYa.CNODESC 14.假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句 --实现代码: ALTERTABLEBOOKSADDPRIMARYKEY(BNO) 15.1将NAME最大列宽增加到10个字符〔假定原为6个字符〕 --实现代码: ALTERTABLECARDALTERCOLUMNNAMEvarchar(10) 15.2为该表增加1列NAME〔系名〕,可变长,最大20个字符 --实现代码: ALTERTABLECARDADD系名varchar(20)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Get 格雅 SQL 习题
![提示](https://static.bingdoc.com/images/bang_tan.gif)