第五至十八章上机练习题图形说明含答案Word格式文档下载.docx
- 文档编号:21876112
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:21
- 大小:535.50KB
第五至十八章上机练习题图形说明含答案Word格式文档下载.docx
《第五至十八章上机练习题图形说明含答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第五至十八章上机练习题图形说明含答案Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
selecttop3*fromscoreorderbywrittenExamdesc--显示在表格结果页中,默认
end
elsebegin
本班成绩较差'
selecttop3*fromscoreorderbywrittenExamend
while练习
declare@minint
while(1=1)
select@min=min(writtenExam)fromscore
if(@min>
=60)break
updatescore
setwrittenExam=writtenExam+2
end或
select@n=count(*)fromscorewherewrittenExam<
60
while(@n>
0)begin
60end
updatescoresetwrittenExam=100wherewrittenExam>
100--可以忽略
case...when...end练习
selectwrittenExam,case
whenwrittenExam>
=90then'
A'
=80andwrittenExam<
90then'
B'
=70andwrittenExam<
80then'
C'
=60andwrittenExam<
70then'
D'
else'
E'
endfromscore或
selectwrittenExam,casewrittenExam/10
when9then'
when8then'
when7then'
when6then'
endfromscore
第五章
普通Select语句(表达式变形)
1.查询菜品信息:
列的名称为[菜品名称,单价,是否打折],要求是否打折的内容显示为可以打折,不打折
……
2.查询菜品信息:
列的名称为[菜品名称,单价],要求是如果菜品名称为空值或者空串时显示为未命名菜品,如果单价为空或者零时则显示未设置价格
……
注意:
类型转化cast,convert
3.查询各分类菜品的平均价格和菜品总数,[如果做得好请关联菜品分类表显示出各菜品分类名称,如右图]
或者
selectdishSortID分类菜品ID,avg(price)平均价格,count(*)菜品总数fromdbo.T_DishInfo
groupbydishSortID
selectdishsortname分类,avg(t.price)平均价格,count(t.dishID)菜品总数
fromT_DishInfotinnerjoinT_DishSort
ont.dishsortid=T_DishSort.dishsortid
groupbyt.dishSortID,dishsortname
4.查询出价格最贵的所有菜品信息(使用两种方法进行查询,课堂有讲过)
declare@maxpricenumeric(18,2)
select@maxprice=max(price)fromdbo.T_DishInfo
select*fromT_DishInfowhereprice=@maxprice
select*fromT_DishInfowherepricein(selectmax(price)fromdbo.T_DishInfo)
5.查询菜品名称含有蛋的菜品名称,价格及是否打折
6.查询出第4个字为肉且可以打折的菜品信息(至少使用两种方法进行查询)
select*fromT_DishInfowheredishnamelike'
___肉%'
肉前面有三个_
select*fromT_DishInfowheresubstring(dishname,4,1)='
肉'
或者其它函数charindex
select*fromT_DishInfowherecharindex('
dishname)=4
普通Select语句(排序,top,distinct,聚合函数)
1.查询价格比较高的十种菜品
selecttop10*fromdbo.T_DishInfoorderbypricedesc
2.查询菜品分类’甜点’类下所有的菜品信息,结果集并以单价进行升序排序
selectt1.*fromT_DishInfot1leftouterjoinT_DishSortt2ont1.dishsortid=t2.dishsortid
wheredishsortname='
甜点'
orderbyprice
3.查询菜品信息中有哪些价格
4.统计出07年八月份的销售总额,实收总额,优惠的打折总额,去尾总额.
selectsum(realPrice)销售总额,sum(factNum)实收总额,sum(favourNum)优惠的打折总额,sum(favourIntercept)去尾总额
fromdbo.T_Sell
wheredatediff(month,reckoningTime,'
2007-8-1'
)=0
5.统计出07年桌号名称为’A1’的销售总额
多表连接:
selectsum(realprice)销售总额
fromT_SellsleftouterjoinT_TableInfotont.tableid=s.tableid
wheret.tablename='
A1'
andyear(getdate())=year(reckoningTime)
6.统计出07年销售总额最高的桌号ID,如果有能力做关联可以显示出具体桌号名称销售总额最高
declare@maxsellnumeric(18,2)
select@maxsell=sum(realprice)fromdbo.T_Sell
wheredatediff(year,reckoningTime,'
2007-7-7'
groupbytableid
orderbysum(realprice)
selectt1.tableid,tablename,sum(realprice)销售金额fromdbo.T_Sellt1
leftouterjoint_tableinfot2ont1.tableid=t2.tableid
groupbyt1.tableid,tablename
havingsum(realprice)=@maxsell
[7.统计出07年八月份未有任何销售的菜品信息]
分析步骤
1)有销售的菜品信息:
T_SellDetail
2)关联T_Sell才能得知时间
3)以上可以构成07年八月份已经销售的数据集A
4)把总的菜品信息T_DishInfo与A进行比较
后面再提供
方法不只一种,还有其它做法比如利用子查询等
Select语句---分组,排序
1.按价格排序(升序)查询出前十道菜品的所有信息,如果第十一道(及后面N道)菜品的价格和第十道菜品价格一至则一起显示出来;
selecttop10withties*fromT_DishInfoorderbyprice
注意使用:
withties,这个参数只能在top环境下使用
2.查询出有打折的总菜数,没有打折的总菜数;
结果集要求列名为是否打折,菜数;
是否打折的行内容为不是显示0,1,而应该显示有打折或者没有打折等字样;
3.查询出各分类菜品的总菜数,且每个分类的总菜数应大于15道的菜品分类和总菜数;
4.查询出各分类菜品有打折/没有打折的总菜数,并合计出各分类菜品数及所有菜品分类的总菜品数;
要求在同一结果集中显示;
--注意使用withrollup时分组字段的顺序
5.查询出菜品信息:
菜名,价格,是否打折,且统计出菜品的总菜数;
要求在两个结果集中显示
第一个结果集还有数据…
附:
查询出各分类菜品信息:
菜名,价格,是否打折,且统计出各分类菜品的总菜数;
要求在多个结果集中显示
……(奇数结果集还有会有其它数据,还有其它结果集未能显示)
注意使用compute与computeby的区别
多表连接
1.使用交叉连接显示菜品分类和菜品信息两张表所有信息,条件是两张表的分类ID值在一致;
Select*fromT_DishInfot1,T_DishSortt2
Wheret1.dishsortid=t2.dishsortid
*可以使用t1.*,t2.*代替,效果一样
2.查询各分类菜品的平均价格和菜品总数,要求关联T_dishSort和T_dishInfo两张表,显示的结果集为分类菜品名称,平均价格,菜品总数;
参看普通Select语句(表达式变形)第三题
3.使用内连接T_TableSort和T_TableInfo显示餐桌主键,餐桌名称,餐桌分类名称,餐桌可容人数;
selecttableid餐号主键,tablename餐号名称,tablesortname餐号分类名称,seats餐桌可容人数
fromdbo.T_TableInfot1innerjoindbo.T_TableSortt2
ont1.TableSortID=t2.TableSortID
4.以销售信息T_Sell为主表关联T_TableInfo和T_EmployeInfo统计出桌号名称,收银员名称,销售金额,结帐日期;
selecttablename桌号名称,name收银员名称,realprice销售金额,reckoningTime结帐日期
fromdbo.T_Sellt1leftouterjoindbo.T_EmployeInfot2
ont1.EmployeID=t2.EmployeIDleftouterjoindbo.T_TableInfot3
ont3.tableID=t1.tableID
5.难:
以T_dishSort为主统计出07年八月份各分类菜品的销售总额,结果集为:
分类菜品名称,销售总额
子查询
要求:
1-2题使用内连接,子查询,Having三种方法实现
1.找出菜品名称相同的菜品信息
……共32行
内连接
selectdistinctt1.*fromt_dishinfot1innerjoint_dishinfot2
ont1.dishid<
>
t2.dishid
wheret1.dishname=t2.dishname
orderbyt1.dishname
selectt1.*fromt_dishinfot1wheret1.dishnamein(
selectt2.dishnamefromt_dishinfot2wheret2.dishid<
t1.dishid)
分组having
selectt1.*fromt_dishinfot1innerjoint_dishinfot2
groupbyt1.dishID,t1.dishSortID,t1.dishname,t1.dishCode,t1.price,t1.abate,t1.unit,t1.delSign,t2.dishname
havingt1.dishname=t2.dishname
注意分组字段的内容包括查询的结果集和条件中使用的字段
2.按分类找出价格大于各自分类平均价格的所有菜品信息,结果集为菜品ID,菜品分类名称,菜品分类平均价格,菜品名称,菜品价格,菜品单位,是否打折。
价格的比较:
同自身所处的分类的平均价格进行比较;
1.找出自身所处的分类AA
2.根据AA要获取AA分类的平均价格AVG
3.自身的price和AVG进行比较
……共88条记录
selectdishid菜品ID,dishsortname菜品分类名称,(selectavg(t6.price)fromT_DishInfot6wheret6.dishsortid=t1.dishsortid)菜品分类平均价格,dishname菜品名称,price菜品价格,unit菜品单位,abate是否打折
fromT_DishInfot1leftouterjoinT_DishSortt2ont1.dishsortid=t2.dishsortid
wheret1.price>
(selectavg(t3.price)fromT_DishInfot3wheret3.dishsortid=t1.dishsortid)
数据修改
1.使用事务将菜品分类,菜品信息两张表中的删除标志位为1的数据真正从表中删除掉.
删除标志位:
0表示正常,1表示已经删除
begintran
deletefromT_DishSortwheredelSign=1
deletefromt_dishinfowheredelsign=1
if@@error<
0rollbacktran
commit
2.由于近期物价上涨,餐厅拟定将单点牛排这类菜品每道菜价格上调5元.
updateT_DishInfosetprice=price+5
fromT_DishSortt1
单点牛排'
andt1.dishsortid=T_DishInfo.dishsortid
3.难:
使用事务添加一条测试的营业信息:
收银员杨丹丹在A1餐桌2007年11月09日晚上7点半收了现金95,顾客所消费的金额也是95,没有打折和去尾,消费的顾客人数是5人,消费内容为甜点类所有的菜品各一道,营业的流水号billcode为2007110900001同时更新T_SELL,T_SELLDETAIL两张表.可以直接使用杨丹丹000049,甜点01,A1餐桌000001的ID号
insertintoT_Sell(billCode,EmployeID,tableID,customerCount,realPrice,factNum,favourNum,favourIntercept,reckoningTime)
values('
2007110900001'
'
000049'
000001'
5,95...)
insertintoT_SellDetail(detailSellId,billCode,dishID,dishName,amount,oldPrice,price,abateNum)
selec[键],'
dishID,dishname,1,price,price,100fromT_DishInfowheredishsortid='
01'
[主键]:
前八位是当前日期20071109,后面还有7位是自增长的数据(个数),保证不重复
1.根据甜点分类下的菜数构造一个临时表#AA:
要有自增长的列,且记录数为分类下菜数
2.在insertintoselectfrom关联到#AA,依据补零规则
3.补零规则:
补零的个数是总长度减去前八位和后面自增长的列长度;
len,cast(convert),substring,while或者replace
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五 十八 上机 练习题 图形 说明 答案