还剩6页未读,继续阅读
文本内容:
实验报告课程名称数据库原理与应用实验名称数据查询系别专业班级指导教师学号姓名实验日期_实验名称数据查询
一、实验目的.熟悉各种基本的数据查询的含义.掌握数据查询的SQL语句编写方法.能根据要求写出正确的查询语句.掌握基本的调试方法
二、实验环境.硬件环境微机.软件环境WindowsSqlserver2000或者更高版本
三、实验内容及步骤题目根据要求编写以下SQL查询语句第一题简单查询.查询病人表,显示所有病人的病人编号、保险公司名称、电话号码(别名病人电话).查询病人表,显示病人编号、病人姓名(病人姓+病人名)、保险公司名称,并在每一个“电话号码”前面显示字符串“病人电话”O.查询病人表,要求显示保险公司名称,并消除重复的值.查询病人表,要求只显示前五条的全部病人信息.查询病人表,要求显示最年轻的前6位病人的病人编号,病人姓名,病人年龄.给医生表取别名doctors并显示医生表的所有信息.要求查询在“人民保险公司”投保的所有病人的信息.要求查询病人年龄在20-60岁之间的所有病人信息.要求查询姓“王”、姓“李”或者姓“关”的所有病人的信息(提示用“in”或者用“or”两种方法查询).查询电话号码为空的病人信息.要求按年龄从大到小显示病人信息.要求先按病人姓的升序;如果姓一样,再按年龄的降序,来显示病人信息.要求查询电话号码的最后一个数字为6的病人编号,病人姓名,电话号码.要求查询倒数第二个数字为7的病人编号,病人姓名,电话号码.要求查询除区号外的第二个数字为2的病人编号,病人姓名,电话号码(注手机号不算).要求查询电话号码的最后一个数字为
6、为
3、为1的病人编号,病人姓名,电话号码(注至少两种方法可以实现).要求查询电话号码的最后一个数字除
1、
3、6外的病人编号,病人姓名,电话号码步骤(写出以上SQL语句)一
1.查询病人表,显示所有病人的病人编号、保险公司名称、电话号码(别名病人电话)select病人编号,保险公司名称,电话号码病人电话from病人表go-
2.查询病人表,显示病人编号、病人姓名(病人姓+病人名)、保险公司名称,并在每一个“电话号码”前面显示字符串“病人电话select病人编号病人姓+病人名病人姓名保险公司名称「病人电话病人电话,电话号码from病人表go・3查询病人表,要求显示保险公司名称,并消除重复的值selectdistinct保险公司名称from病人表go一
4.查询病人表,要求只显示前五条的全部病人信息selecttop5from病人表go・
5.查询病人表,要求显示最年轻的前位病人的病人编号,病人姓名,病人年龄selecttop5病人编号病人姓+病人名病人姓名,病人年龄from病人表orderby病人年龄ASCgo一6给医生表取别名doctors并显示医生表的所有信息selectfrom医生表asdoctorsgo7要求查询在“人民保险公司”投保的所有病人的信息selectfrom病人表where保险公司名称=人民保险公司’go
8.要求查询病人年龄在〜60岁之间的所有病人信息select*from病人表where病人年龄between20and60go-
9.要求查询姓〃王”、姓“李”或者姓“关”的所有病人的信息(提示用“in或者用“or”两种方法查询)selectfrom病人表where病人姓in(李‘J王’J关)go
10.查询电话号码为空的病人信息selectfrom病人表where电话号码isnullgo
11.要求按年龄从大到小显示病人信息select*from病人表orderby病人年龄DESCgo一
12.要求先按病人姓的升序;如果姓一样,再按年龄的降序,来显示病人信息selectfrom病人表orderby病人姓ASC病人年龄DESCgo一
13.要求查询电话号码的最后一个数字为的病人编号,病人姓名,电话号码select病人编号病人姓+病人名病人姓名,电话号码from病人表where电话号码like%6go
14.要求查询倒数第二个数字为的病人编号,病人姓名,电话号码select病人编号病人姓+病人名病人姓名,电话号码from病人表where电话号码like1%7_1go一
15.要求查询除区号外的第二个数字为的病人编号,病人姓名,电话号码(注手机号不算)select病人编号病人姓+病人名病人姓名,电话号码from病人表where电话号码like2%go・
16.要求查询电话号码的最后一个数字为、为、为的病人编号,病人姓名,电话号码(注至少两种方法可以实现)select病人编号病人姓+病人名病人姓名,电话号码from病人表where电话号码like%6or电话号码like%3or电话号码like%1goselect病人编号病人姓+病人名病人姓名,电话号码from病人表where电话号码like%
[631]go
17.要求查询电话号码的最后一个数字除、、外的病人编号,病人姓名,电话号码select病人编号病人姓+病人名病人姓名,电话号码from病人表where电话号码notlike%
[631]go第二题分组查询.查询病人表,要求显示最大年龄值、最小年龄值、平均年龄值.查询病人表,要求统计在“太平洋保险公司”投保的病人数.查询一下病人表,要求统计有电话号码的病人数.查询病人表,要求统计在各个保险公司投保的各自病人数(两种方法groupby与computeby).查询病人表,要求统计投保人数2人以上(含2人)的保险公司名称与投保人数.查询病历表,要求统计一下病人编号为“Pat0002”的病人结算总金额(注结算金额相同的只算一个记入总金额中).查询病历表,要求统计一下病人编号为“Pat0002”的病人结算总金额(注结算金额相同的不记入总金额中)步骤1・查询病人表,要求显示最大年龄值、最小年龄值、平均年龄值selectmax(病人年龄)最大年龄min(病人年龄)最小年龄,avg(病人年龄)平均年龄from病人表go2•查询病人表,要求统计在“太平洋保险公司”投保的病人数selectcount(保险公司名称)太平洋保险公司投保的病人数from病人表where保险公司名称=太平洋保险公司’go3查询一下病人表,要求统计有电话号码的病人数selectcount(电话号码)有电话号码的病人数from病人表where电话号码isnotnullgo-
4.查询病人表,要求统计在各个保险公司投保的各自病人数(两种方法groupby与computeby)selectcount(保险公司名称)from病人表where保险公司名称isnotnullgroupby保险公司名称go5•查询病人表,要求统计投保人数人以上(含人)的保险公司名称与投保人数select保险公司名称,count(*)投保人数from病人表groupby保险公司名称havingcount(*)=2go一
6.查询病历表,要求统计一下病人编号为“Pat0002”的病人结算总金额(注结算金额相同的只算一个记入总金额中)selectdistinctsum(结算金额)结算总金额from病历表where病人编号=1PatO002,go-
7.查询病历表,要求统计一卜病人编号为叩at0002”的病人结算总金额(注结算金额相同的不记入总金额中)selectsum(结算金额)as结算总金额from病历表where病人编号=PatO002go第三题多表联接查询.查询所有有看过病的病人编号,病人姓名,住院日期,病历.查询所有病人的病人编号,病人姓名,住院日期,病历(注如果有的病人暂时还没有看过病,则相应内容显示为NULL).显示“王太山”该病人的所有的看病资料(病人编号,病人姓名,住院日期,病历).统计一下“柳四二”该病人的看病次数,以及结算总金额.查询医生编号为‘docekOOI的医生看过的所有病人资料(病人编号,病人姓名,医生编号).查询张明仁医生看过的所有病人资料(病人编号,病人姓名,医生姓名).显示出院日期在2022年间每一个病人的最高的一笔结算金额(注要显示的信息有--病人编号,病人姓名,最高的结算金额).查询具有相同专业的医生(注显示的信息有--医生编号,医生姓名,科室)步骤查询所有有看过病的病人编号,病人姓名,住院日期,病历select病人表.病人编号病人姓+病人名病人姓名,住院日期,病历from病人表,病历表where病人表.病人编号=病历表.病人编号go
2.查询所有病人的病人编号,病人姓名,住院日期,病历(注如果有的病人暂时还没有看过病,则相应内容显示为NULL)select病人表.病人编号病人姓+病人名病人姓名,住院日期,病历from病人表leftouterjoin病历表on(病人表病人编号=病历表.病人编号)go一
3.显示“王太山”该病人的所有的看病资料(病人编号,病人姓名,住院日期,病历)select病人表.病人编号病人姓+病人名病人姓名,住院日期,病历from病人表,病历表where病人表.病人编号=病历表.病人编号and病人姓+病人名=王太山’go
4.统计一下“柳四二”该病人的看病次数,以及结算总金额selectcount(病历)看病次数count(结算金额)结算总金额from病人表,病历表where病人姓+病人名=柳四二’go5查询医生编号为‘docekOOl,的医生看过的所有病人资料(病人编号,病人姓名,医生编号)select病人表.病人编号病人姓+病人名病人姓名医生表.医生编号from病人表,医生表病历表where病人表.病人编号=病历表.病人编号and医生表.医生编号=病历表.医生编号and医生表.医生编号=docekO01go一6•查询,张明仁,医生看过的所有病人资料•(病人编号,病人姓名,医生姓名)select病人表.病人编号病人姓+病人名病人姓名医生姓+医生名医生姓名from病人表,医生表病历表where病人表.病人编号=病历表.病人编号and医生表.医生编号=病历表.医生编号and医生表.医生姓+医生表医生名=张明仁’go-
7.显示出院日期在年间每一个病人的最高的一笔结算金额(注要显示的信息有--病人编号,病人姓名,最高的结算金额)select病人表.病人编号病人姓+病人名病人姓名max(结算金额)最高的结算金额from病人表,病历表where病人表.病人编号=病历表.病人编号and出院日期between2022-1・1and2022-12-311groupby病人表病人编号病人姓+病人名go一
8.查询具有相同专业的医生(注显示的信息有一医生编号,医生姓名,科室)selectone医生编号one.医生姓+one.医生名医生姓名,one科室from医生表one医生表twowhereone.科室=two科室groupbyone.医生编号,one科室,one.医生姓,one.医生名havingcount(one.科室)〉1go第四题子查询.使用两种子查询的方法要求查询病历表,要求统计一下病人编号为“Pat0002”的病人结算总金额(注结算金额相同的不记入总金额中).请用“相关子查询作为表达式”方法写出SELECT语句,来统计并显示每一个医生的医生编号、医生姓名以及每一个医生看过的病人数要求如果还没看过病人的医生,则显示看过的病人数为0o.请用“派生表”的子查询方法写出SELECT语句,来统计并显示每一个医生的医生编号、医生姓名以及每一个医生看过的病人数要求如果还没看过病人的医生,则显示看过的病人数为0o.请用“相关子查询作为表达式”的子查询方法写出SELECT语句,来统计并显示每一个医生的医生编号、医生姓名以及每一个医生看过的病人数要求如果还没看过病人的医生,不显示信息.请用“派生表”的子查询方法写出SELECT语句,来统计并显示每一个医生的医生编号、医生姓名以及每一个医生看过的病人数要求如果还没看过病人的医生,不显示信息.查询具有相同专业的医生(注显示的信息有-医生编号,医生姓名,科室)(提示可使用in或者exists关键字实现).查询看过所有医生的病人信息.查询至少看过病人编号为‘PatOOOd看过的全部医生的病人编号.查询结算总金额最多的病人编号,病人姓名和相应的结算总金额步骤一1使用两种子查询的方法要求查询病历表,要求统计一下病人编号为“Pat0002”的病人结算总金额(注结算金额相同的不记入总金额中)--第一种方法selectsum(结算金额)as结算总金额from病历表where结算金额notin(select结算金额from病历表where病人编号=*PatO002groupby结算金额havingcount(结算金额)>1)and病人编号=1PatO002go--第二种方法selectsum(结算金额)as结算总金额from病历表where结算金额=anyselect结算金额from病历表where病人编号=PatO002groupby结算金额havingcount结算金额=1and病人编号=Pat0002go2请用“相关子查询作为表达式”方法写出SELECT语句,来统计并显示每一个医生的医生编号、医生姓名以及每一个医生看过的病人数要求如果还没看过病人的医生,则显示看过的病人数为selectb.医生编号力医生姓+b.医生名as医生姓名,’该医生看过的病人数=selectcount病人编号from病历表asawherea.医生编号=b.医生编号from医生表asborderbyb.医生编号go一
3.请用“派生表”的子查询方法写出SELECT语句,来统计并显示每一个医生的医生编号、医生姓名以及每一个医生看过的病人数要求如果还没看过病人的医生,则显示看过的病人数为selecta.医生编号a.医生姓+a.医生名as医生姓名,isnullb.该医生看过的病人数,0from医生表asaleftouterjoinselect医生编号,count*as该医生看过的病人数from病历表groupby医生编号asbona.医生编号=1医生编号go
4.请用“相关子查询作为表达式”的子查询方法写出SELECT语句,来统计并显示每一个医生的医生编号、医生姓名以及每一个医生看过的病人数要求如果还没看过病人的医生,不显示信息select病历表.医生编号医生姓+医生名as医生姓名count*as该医生看过的病人数from病历表innerjoin医生表on病历表.医生编号=医生表.医生编号groupby病历表医生编号医生姓+医生名unionselect医生表.医生编号医生姓+医生名as医生姓名,病人编号=0from病历表rightouterjoin医生表on病历表.医生编号=医生表医生编号where病人编号isnullgo-5请用“派生表〃的子查询方法写出SELECT语句,来统计并显示每一个医生的医生编号、医生姓名以及每一个医生看过的病人数要求如果还没看过病人的医生,不显示信息selecta医生编号a.医生姓+a.医生名as医生姓名,b该医生看过的病人数from医生表asainnerjoinselect医生编号count*as该医生看过的病人数from病历表groupby医生编号asbona.医生编号=1)医生编号go一
6.查询具有相同专业的医生(注显示的信息有一医生编号,医生姓名,科室)(提示可使用in或者exists关键字实现)selectdistincta.医生编号,a.医生姓+a.医生名as医生姓名科室from医生表asainnerjoin医生表asbona.科室=b.科室wherea.医生编号〉=b.医生编号andb.科室notin(selecta.科室from医生表asainnerjoin医生表asbona.科室=b.科室wherea.医生编号>=b.医生编号groupbya科室havingcount(b科室)=1)go
7.查询看过所有医生的病人信息select病人编号病人姓+病人名as病人姓名,保险公司名称年龄,电话号码from病人表wherenotexists(selectfrom医生表wherenotexists(selectfrom病历表where病人编号=病人表.病人编号and医生编号=医生表.医生编号))go-
8.查询至少看过病人编号为Pat0004看过的全部医生的病人编号selectdistinct病人编号from病历表asC_Awherenotexists(selectfrom病历表asC_Bwhere病人编号=1PatO004andnotexists(selectfrom病历表asC_CwhereC_C.病人编号=C_A.病人编号andC_C.医生编号=(2_
8.医生编号)go
9.查询结算总金额最多的病人编号,病人姓名和相应的结算总金额selecta.病人编号病人姓+病人名as病人姓名,sum(结算金额)as结算总金额from病历表asainnerjoin病历表asbona病人编号=
6.病人编号groupbya.病人编号,病人姓病人名havingsum(结算金额)=(selectmax(结算总金额)from(select病人编号,sum(结算金额)as结算总金额from病历表groupby病人编号)asT)go
五、实验小结。