还剩6页未读,继续阅读
文本内容:
实验报告课程名称数据库原理与应用实验名称数据查询系别专业班级指导教师学号姓名实验日期_实验名称数据查询
一、实验目的熟悉各种基本的数据查询的含义
1.掌握数据查询的语句编写方法
2.SQL能根据要求写出正确的查询语句
3.掌握基本的调试方法
4.
二、实验环境硬件环境微机
1.软件环境或者更高版本
2.Windows,Sql server2000
三、实验内容及步骤题目根据要求编写以下查询语句SQL第一题简单查询查询病人表,显示所有病人的病人编号、保险公司名称、电话号码(别名病人电话)
1.查询病人表,显示病人编号、病人姓名(病人姓+病人名)、保险公司名称,并在每一个“电话号码”前面显示字
2.符串“病人电话”O查询病人表,要求显示保险公司名称,并消除重复的值
3.查询病人表,要求只显示前五条的全部病人信息
4.查询病人表,要求显示最年轻的前位病人的病人编号,病人姓名,病人年龄
5.6给医生表取别名并显示医生表的所有信息
6.doctors,要求查询在“人民保险公司”投保的所有病人的信息
7.要求查询病人年龄在岁之间的所有病人信息
8.20-60要求查询姓“王”、姓“李”或者姓“关”的所有病人的信息(提示用或者用两种方法查询)
9.“in”“or”查询电话号码为空的病人信息
10.要求按年龄从大到小显示病人信息
11.要求先按病人姓的升序;如果姓一样,再按年龄的降序,来显示病人信息
12.要求查询电话号码的最后一个数字为的病人编号,病人姓名,电话号码
13.6要求查询倒数第二个数字为的病人编号,病人姓名,电话号码
14.7要求查询除区号外的第二个数字为的病人编号,病人姓名,电话号码(注手机号不算)
15.2要求查询电话号码的最后一个数字为、为、为的病人编号,病人姓名,电话号码(注至少两种方法可
16.631以实现)要求查询电话号码的最后一个数字除、、外的病人编号,病人姓名,电话号码
17.136步骤(写出以上语句)SQL一查询病人表,显示所有病人的病人编号、保险公司名称、电话号码(别名病人电话)病人编号,保险公司名称,电话号码病人电话
1.病人表selectfrom.查询病人表,显示病人编号、病人姓名(病人姓+病人名)、保险公司名称,并在每一个“电话号码”前面显示字符go串“病人电话--2病人编号,病人姓+病人名病人姓名,保险公司名称「病人电话,病人电话,电话号码病人表selectfrom・,查询病人表,要求显示保险公司名称,并消除重复的值go保险公司名称-3病人表select distinctfrom一.查询病人表,要求只显示前五条的全部病人信息go4病人表select top5from・.查询病人表,要求显示最年轻的前位病人的病人编号,病人姓名,病人年龄go病人编号,病人姓+病人名病人姓名,病人年龄-5病人表select top5病人年龄fromorder byASC一,给医生表取别名并显示医生表的所有信息go6doctors,医生表selectfrom asdoctors,要求查询在“人民保险公司”投保的所有病人的信息go-7病人表select保险公司名称=人民保险公司’fromwhere.要求查询病人年龄在岁之间的所有病人信息〜go-860病人表select*病人年龄fromwhere between20and
60.要求查询姓〃王”、姓“李”或者姓“关”的所有病人的信息(提示用或者用两种方法查询)go--9“in“or”病人表select病人姓(李‘王’关)fromwhere inJ J.查询电话号码为空的病人信息go-10病人表电话号码select fromwhere is null.要求按年龄从大到小显示病人信息go-11病人表select*病人年龄fromorder byDESC一.要求先按病人姓的升序;如果姓一样,再按年龄的降序,来显示病人信息go12病人表select病人姓病人年龄fromorder byASC,DESC一.要求查询电话号码的最后一个数字为的病人编号,病人姓名,电话号码go病人编号,病人姓+病人名病人姓名,电话号码13病人表select电话号码%6fromwhere like.要求查询倒数第二个数字为的病人编号,病人姓名,电话号码go病人编号,病人姓+病人名病人姓名,电话号码-14病人表select电话号码from1where like1%7_一.要求查询除区号外的第二个数字为的病人编号,病人姓名,电话号码(注手机号不算)病人编号,病人go姓+病人名病人姓名,电话号码15select病人表电话号码______fromwhere like2%・.要求查询电话号码的最后一个数字为、为、为的病人编号,病人姓名,电话号码(注至少两种方法可以实现)go病人编号,病人姓+病人名病人姓名,电话号码-16病人表select电话号码电话号码%电话号码%1from,,where like%6or like3or like病人编号,病人姓+病人名病人姓名,电话号码病人表go电话号码select from.要求查询电话号码的最后一个数字除、、外的病人编号,病人姓名,电话号码where like,%[6,3,1],go病人编号,病人姓+病人名病人姓名,电话号码-17病人表select电话号码fromwhere notlike%[6,3,1],第二题分组查询go查询病人表,要求显示最大年龄值、最小年龄值、平均年龄值
1.查询病人表,要求统计在“太平洋保险公司”投保的病人数
2.查询一下病人表,要求统计有电话号码的病人数
3.查询病人表,要求统计在各个保险公司投保的各自病人数(两种方法与)
4.group bycompute by查询病人表,要求统计投保人数人以上(含人)的保险公司名称与投保人数
5.22查询病历表,要求统计一下病人编号为的病人结算总金额(注结算金额相同的只算一个记入总金额
6.“Pat0002”中)查询病历表,要求统计一下病人编号为的病人结算总金额(注结算金额相同的不记入总金额中)
7.“Pat0002”步骤・查询病人表,要求显示最大年龄值、最小年龄值、平均年龄值(病人年龄)最大年龄,(病人年龄)最小年龄,(病人年龄)平均年龄-1病人表select maxmin avgfrom•查询病人表,要求统计在“太平洋保险公司”投保的病人数go(保险公司名称)太平洋保险公司投保的病人数-2病人表select count保险公司名称=太平洋保险公司’fromwhere,查询一下病人表,要求统计有电话号码的病人数go(电话号码)有电话号码的病人数-3病人表select count电话号码fromwhere isnot null.查询病人表,要求统计在各个保险公司投保的各自病人数(两种方法与)(保go险公司名称)--4group bycompute byselect count病人表保险公司名称from保险公司名称whereisnot nullgroup by•查询病人表,要求统计投保人数人以上(含人)的保险公司名称与投保人数go保险公司名称,(*)投保人数-5病人表select count保险公司名称from()group byhaving count*=2一.查询病历表,要求统计一下病人编号为的病人结算总金额(注结算金额相同的只算一个记入总金额中)go(结算金额)结算总金额6“Pat0002”病历表select distinctsum病人编号=,from1where PatO
002.查询病历表,要求统计一卜病人编号为叩的病人结算总金额(注结算金额相同的不记入总金额中)go(结算金额)结算总金额--7at0002”select病历表sum as病人编号=fromwhere PatO002第三题多表联接查询go查询所有有看过病的病人编号,病人姓名,住院日期,病历
1.查询所有病人的病人编号,病人姓名,住院日期,病历(注如果有的病人暂时还没有看过病,则相应内容显示
2.为)NULL显示“王太山”该病人的所有的看病资料(病人编号,病人姓名,住院日期,病历)
3.统计一下“柳四二”该病人的看病次数,以及结算总金额
4.查询医生编号为的医生看过的所有病人资料(病人编号,病人姓名,医生编号)
5.‘docekOOI,查询张明仁医生看过的所有病人资料(病人编号,病人姓名,医生姓名)
6.显示出院日期在年间每一个病人的最高的一笔结算金额(注要显示的信息有--病人编号,病人姓名,最
7.2022高的结算金额)查询具有相同专业的医生(注显示的信息有--医生编号,医生姓名,科室)
8.步骤,查询所有有看过病的病人编号,病人姓名,住院日期,病历病人表.病人编号,病人姓+病人名病人姓名,住院日期,病历病人表,病历表病人表.病人编号=病历表.病人编号select fromwhere.查询所有病人的病人编号,病人姓名,住院日期,病历(注如果有的病人暂时还没有看过病,则相应内容显示为go)-2病人表.病人编号,病人姓+病人名病人姓名,住院日期,病历NULL病人表病历表(病人表,病人编号=病历表.病人编号)selectfrom leftouter joinon一.显示“王太山”该病人的所有的看病资料(病人编号,病人姓名,住院日期,病历)go病人表.病人编号,病人姓+病人名病人姓名,住院日期,病历3病人表,病历表select病人表.病人编号=病历表.病人编号病人姓+病人名=王太山’fromwhere and.统计一下“柳四二”该病人的看病次数,以及结算总金额go(病历)看病次数,(结算金额)结算总金额-4病人表,病历表select countcount病人姓+病人名=柳四二’fromwhere,查询医生编号为,的医生看过的所有病人资料(病人编号,病人姓名,医生编号)go病人表.病人编号,病人姓+病人名病人姓名,医生表.医生编号-5‘docekOOl病人表,医生表,病历表病人表.病人编号=病历表.病人编号医生表.医生编号=病历表.医生编号医生select表.医生编号=from where and anddocekO01一•查询,张明仁,医生看过的所有病人资料•(病人编号,病人姓名,医生姓名)go病人表.病人编号,病人姓+病人名病人姓名,医生姓+医生名医生姓名6病人表,医生表,病历表select病人表.病人编号=病历表.病人编号医生表.医生编号=病历表.医生编号医生表.医生姓+医生表医生名=张from明仁’where andand.显示出院日期在年间每一个病人的最高的一笔结算金额(注要显示的信息有--病人编号,病人姓名,最高的结go算金额)--7病人表.病人编号,病人姓+病人名病人姓名,(结算金额)最高的结算金额病人表,病历表select max病人表.病人编号=病历表.病人编号出院日期・2022病人表,病人编号,from病人姓+病人名where and between2022-11and-12-311group by一.查询具有相同专业的医生(注显示的信息有一医生编号,医生姓名,科室)go医生编号,医生姓+医生名医生姓名,,科室医生表医生表
8.科室=,科室select one,one.one.one fromone,two医生编号,,科室,医生姓,医生名where onetwo(.科室)〉group byone.one one.one.第四题子查询having countone1go使用两种子查询的方法要求查询病历表,要求统计一下病人编号为“的病人结算总金额(注结算金
1.Pat0002”额相同的不记入总金额中)请用“相关子查询作为表达式”方法写出语句,来统计并显示每一个医生的医生编号、医生姓名以及每
2.SELECT一个医生看过的病人数要求如果还没看过病人的医生,则显示看过的病人数为0o请用“派生表”的子查询方法写出语句,来统计并显示每一个医生的医生编号、医生姓名以及每一个医
3.SELECT生看过的病人数要求如果还没看过病人的医生,则显示看过的病人数为0o请用“相关子查询作为表达式”的子查询方法写出语句,来统计并显示每一个医生的医生编号、医生姓
4.SELECT名以及每一个医生看过的病人数要求如果还没看过病人的医生,不显示信息请用“派生表”的子查询方法写出语句,来统计并显示每一个医生的医生编号、医生姓名以及每一个医
5.SELECT生看过的病人数要求如果还没看过病人的医生,不显示信息查询具有相同专业的医生(注显示的信息有-医生编号,医生姓名,科室)(提示可使用或者关键
6.in exists字实现)查询看过所有医生的病人信息
7.查询至少看过病人编号为看过的全部医生的病人编号
8.‘PatOOOd查询结算总金额最多的病人编号,病人姓名和相应的结算总金额
9.步骤一,使用两种子查询的方法要求查询病历表,要求统计一下病人编号为“的病人结算总金额(注结算金额相同的不记入总金额中)1Pat0002”--第一种方法(结算金额)结算总金额病历表select sum as结算金额(from结算金额where not in病历表select病人编号=from结算金额where*PatO002(结算金额)>)病人编号=group by1having count1and PatO002--第二种方法go(结算金额)结算总金额病历表select sumas结算金额=fromwhere any结算金额select病历表病人编号=from结算金额where PatO002结算金额group by病人编号=having count=1and Pat0002,请用“相关子查询作为表达式”方法写出语句,来统计并显示每一个医生的医生编号、医生姓名以及每一个go医生看过的病人数要求如果还没看过病人的医生,则显示看过的病人数为-2SELECT医生编号力,医生姓+医生名医生姓名,’该医生看过的病人数=病人编号病历表医生编号医生编号select b.b.as医生表select countfrom as a wherea.=b.医生编号from as border byb.一.请用“派生表”的子查询方法写出语句,来统计并显示每一个医生的医生编号、医生姓名以及每一个医生看go过的病人数要求如果还没看过病人的医生,则显示看过的病人数为3SELECT医生编号,医生姓+医生名医生姓名,该医生看过的病人数,医生表select a.a.a.as isnullb.0from asa leftouter join医生编号,该医生看过的病人数病历表select count*as医生编号from.医生编号=,医生编号group byas bon a
1.请用“相关子查询作为表达式”的子查询方法写出语句,来统计并显示每一个医生的医生编号、医生姓名以go及每一个医生看过的病人数要求如果还没看过病人的医生,不显示信息-4SELECT病历表.医生编号,医生姓+医生名医生姓名,该医生看过的病人数病历表医生表select ascount*as病历表.医生编号=医生表.医生编号from inner join病历表,医生编号,医生姓+医生名ongroup by医生表.医生编号,医生姓+医生名医生姓名,病人编号union病历表医生表select as=0病历表.医生编号=医生表,医生编号from rightouter join病人编号onwhere isnull,请用“派生表〃的子查询方法写出语句,来统计并显示每一个医生的医生编号、医生姓名以及每一个医生看go过的病人数要求如果还没看过病人的医生,不显示信息--5SELECT医生编号,医生姓+医生名医生姓名,该医生看过的病人数医生表select a,a.a.as b,医生编号,该医生看过的病人数from asa innerjoin病历表select count*as医生编号from医生编号=),医生编号group byas bona.1一.查询具有相同专业的医生(注显示的信息有一医生编号,医生姓名,科室)(提示可使用或者关键go6in exists字实现)医生编号,医生姓+医生名医生姓名科室医生表医生表.科室.科室.医生编号〉医生编号.科室(select distincta.a.a.as from asa innerjoin asb ona.科室=b wherea=b.andbnotin医生表医生表科室.科室select a.医生编号>医生编号,科室from asa innerjoin asb ona.=b(,科室)=wherea=b.group bya)havingcountb
1.查询看过所有医生的病人信息go病人编号,病人姓+病人名病人姓名,保险公司名称,年龄,电话号码病人表-7(医生表(病历表病人编号=病人表.病人编号医生编号=select asfrom where not exists医生表.医生编号)select from wherenot exists select fromwhereand).查询至少看过病人编号为看过的全部医生的病人编号病人编号go病历表--8Pat0004select distinct(病历表病人编号=(from as C_A wherenotexists1病历表.病人编号=.病人编号select fromas C_B wherePatO004and notexists医生编号=(医生编号selectfromasC_C whereC_C C_Aand C_C.2_
8.).查询结算总金额最多的病人编号,病人姓名和相应的结算总金额go.病人编号,病人姓+病人名病人姓名,(结算金额)结算总金额-9病历表病历表,病人编号=.病人编号select aas sumas.病人编号,病人姓,病人名fromasainnerjoinasbona6(结算金额)=((结算总金额)groupbya(病人编号,(结算金额)结算总金额having sumselect max病历表from selectsumas病人编号))fromgroup byas Tgo
五、实验小结。