数据库-数据查询实验报告

  • 格式:doc
  • 大小:96.50 KB
  • 文档页数:9

第 1 页 共 9 页 实 验 报 告 课程名称 数据库原理与应用 实验名称 数据查询 系别 专业班级 指导教师 学号 姓名 实验日期 _

实验名称:数据查询 一、实验目的 1. 熟悉各种基本的数据查询的含义。 2. 掌握数据查询的SQL语句编写方法。 3. 能根据要求写出正确的查询语句。 4. 掌握基本的调试方法。

二、实验环境 1. 硬件环境:微机 2. 软件环境: Windows,Sql server2000或更高版本

三、实验内容及步骤 题目 根据要求编写以下SQL查询语句 第一题 简单查询 1. 查询病人表,显示所有病人的病人编号、保险公司名称、电话号码(别名:病人电话)。 2. 查询病人表,显示病人编号、病人姓名(病人姓+病人名)、保险公司名称,并在每个“电话号码”前面显示字符串“病人电话:”。 3. 查询病人表,要求显示保险公司名称,并消除重复的值。 4. 查询病人表,要求只显示前五条的全部病人信息。 5. 查询病人表,要求显示最年轻的前6位病人的病人编号,病人姓名,病人年龄 6. 给医生表取别名:doctors,并显示医生表的所有信息 7. 要求查询在“人民保险公司”投保的所有病人的信息 8. 要求查询病人年龄在20~60岁之间的所有病人信息 9. 要求查询姓“王”、姓“李”或姓“关”的所有病人的信息。(提示:用“in”或者用“or”两种方法查询。) 10. 查询电话号码为空的病人信息 11. 要求按年龄从大到小显示病人信息 12. 要求先按病人姓的升序;如果姓一样,再按年龄的降序,来显示病人信息 13. 要求查询电话号码的最后一个数字为6的病人编号,病人姓名,电话号码 14. 要求查询倒数第二个数字为7的病人编号,病人姓名,电话号码。 15. 要求查询除区号外的第二个数字为2的病人编号,病人姓名,电话号码。(注:手机号不算。) 第 2 页 共 9 页

16. 要求查询电话号码的最后一个数字为6、为3、为1的病人编号,病人姓名,电话号码。(注:至少两种方法可以实现) 17. 要求查询电话号码的最后一个数字除1、3、6外的病人编号,病人姓名,电话号码。 步骤(写出以上SQL语句) --1.查询病人表,显示所有病人的病人编号、保险公司名称、电话号码(别名:病人电话)。 select 病人编号,保险公司名称,电话号码病人电话 from 病人表 go --2.查询病人表,显示病人编号、病人姓名(病人姓+病人名)、保险公司名称,并在每个“电话号码”前面显示字符串“病人电话:”。 select 病人编号,病人姓+病人名病人姓名,保险公司名称,'病人电话:' 病人电话,电话号码 from 病人表 go --3.查询病人表,要求显示保险公司名称,并消除重复的值。 select distinct 保险公司名称 from 病人表 go --4.查询病人表,要求只显示前五条的全部病人信息。 select top 5 * from 病人表 go --5.查询病人表,要求显示最年轻的前位病人的病人编号,病人姓名,病人年龄 select top 5 病人编号,病人姓+病人名病人姓名,病人年龄 from 病人表 order by 病人年龄ASC go --6.给医生表取别名:doctors,并显示医生表的所有信息 select * from 医生表as doctors go --7.要求查询在“人民保险公司”投保的所有病人的信息 select * from 病人表 where 保险公司名称= '人民保险公司' go --8.要求查询病人年龄在~60岁之间的所有病人信息 select * from 病人表 where 病人年龄between 20 and 60 go --9.要求查询姓“王”、姓“李”或姓“关”的所有病人的信息。(提示:用“in”或者用“or”两种方法查询。) select * from 病人表 where 病人姓in('李','王','关') go --10.查询电话号码为空的病人信息 第 3 页 共 9 页

select * from 病人表 where 电话号码is null go --11.要求按年龄从大到小显示病人信息 select * from 病人表 order by 病人年龄DESC go --12.要求先按病人姓的升序;如果姓一样,再按年龄的降序,来显示病人信息 select * from 病人表 order by 病人姓ASC,病人年龄DESC go --13.要求查询电话号码的最后一个数字为的病人编号,病人姓名,电话号码 select 病人编号,病人姓+病人名病人姓名,电话号码 from 病人表 where 电话号码like '%6' go --14.要求查询倒数第二个数字为的病人编号,病人姓名,电话号码。 select 病人编号,病人姓+病人名病人姓名,电话号码 from 病人表 where 电话号码like '%7_' go --15.要求查询除区号外的第二个数字为的病人编号,病人姓名,电话号码。(注:手机号不算。) select 病人编号,病人姓+病人名病人姓名,电话号码 from 病人表 where 电话号码like'____-_2%' go --16.要求查询电话号码的最后一个数字为、为、为的病人编号,病人姓名,电话号码。(注:至少两种方法可以实现) select 病人编号,病人姓+病人名病人姓名,电话号码 from 病人表 where 电话号码like'%6' or 电话号码like'%3' or 电话号码like'%1' go select 病人编号,病人姓+病人名病人姓名,电话号码from 病人表 where 电话号码like'%[6,3,1]' go --17.要求查询电话号码的最后一个数字除、、外的病人编号,病人姓名,电话号码。 select 病人编号,病人姓+病人名病人姓名,电话号码 from 病人表 where 电话号码not like'%[6,3,1]' go 第二题 分组查询 1. 查询病人表,要求显示最大年龄值、最小年龄值、平均年龄值 2. 查询病人表,要求统计在“太平洋保险公司”投保的病人数 第 4 页 共 9 页

3. 查询一下病人表,要求统计有电话号码的病人数 4. 查询病人表,要求统计在各个保险公司投保的各自病人数。(两种方法:group by与compute by) 5. 查询病人表,要求统计投保人数2人以上(含2人)的保险公司名称与投保人数。 6. 查询病历表,要求统计一下病人编号为"Pat0002"的病人结算总金额。(注:结算金额相同的只算一个记入总金额中) 7. 查询病历表,要求统计一下病人编号为"Pat0002"的病人结算总金额。(注:结算金额相同的不记入总金额中)

步骤 --1.查询病人表,要求显示最大年龄值、最小年龄值、平均年龄值 select max(病人年龄) 最大年龄,min(病人年龄) 最小年龄, avg(病人年龄) 平均年龄 from 病人表 go --2.查询病人表,要求统计在“太平洋保险公司”投保的病人数 select count(保险公司名称) 太平洋保险公司投保的病人数 from 病人表 where 保险公司名称= '太平洋保险公司' go --3.查询一下病人表,要求统计有电话号码的病人数 select count(电话号码) 有电话号码的病人数 from 病人表 where 电话号码is not null go --4.查询病人表,要求统计在各个保险公司投保的各自病人数。(两种方法:group by与compute by) select count(保险公司名称) from 病人表 where 保险公司名称is not null group by 保险公司名称 go --5.查询病人表,要求统计投保人数人以上(含人)的保险公司名称与投保人数。 select 保险公司名称,count(*) 投保人数 from 病人表 group by 保险公司名称 having count(*)>=2 go --6.查询病历表,要求统计一下病人编号为"Pat0002"的病人结算总金额。(注:结算金额相同的只算一个记入总金额中) select distinct sum(结算金额) 结算总金额 from 病历表 where 病人编号='Pat0002' go --7.查询病历表,要求统计一下病人编号为"Pat0002"的病人结算总金额。(注:结算金额相同的不记入总金额中) select sum(结算金额) as 结算总金额 from 病历表 where 病人编号='Pat0002' go 第 5 页 共 9 页

第三题 多表联接查询 1. 查询所有有看过病的病人编号,病人姓名,住院日期,病历。 2. 查询所有病人的病人编号,病人姓名,住院日期,病历。(注:如果有的病人暂时还没有看过病,则相应内容显示为NULL) 3. 显示“王太山”该病人的所有的看病资料(病人编号,病人姓名,住院日期,病历)。 4. 统计一下“柳四二”该病人的看病次数,以及结算总金额。 5. 查询医生编号为'docek001'的医生看过的所有病人资料(病人编号,病人姓名,医生编号)。 6. 查询'张明仁'医生看过的所有病人资料(病人编号,病人姓名,医生姓名)。 7. 显示出院日期在2008年间每个病人的最高的一笔结算金额。(注:要显示的信息有--病人编号,病人姓名,最高的结算金额) 8. 查询具有相同专业的医生。(注:显示的信息有--医生编号,医生姓名,科室)

步骤 --1.查询所有有看过病的病人编号,病人姓名,住院日期,病历。 select 病人表.病人编号,病人姓+病人名病人姓名,住院日期,病历from 病人表,病历表 where 病人表.病人编号= 病历表.病人编号 go --2.查询所有病人的病人编号,病人姓名,住院日期,病历。(注:如果有的病人暂时还没有看过病,则相应内容显示为NULL) select 病人表.病人编号,病人姓+病人名病人姓名,住院日期,病历 from 病人表left outer join 病历表on(病人表.病人编号= 病历表.病人编号) go --3.显示“王太山”该病人的所有的看病资料(病人编号,病人姓名,住院日期,病历)。 select 病人表.病人编号,病人姓+病人名病人姓名,住院日期,病历 from 病人表,病历表 where 病人表.病人编号= 病历表.病人编号and 病人姓+病人名='王太山' go --4.统计一下“柳四二”该病人的看病次数,以及结算总金额。 select count(病历) 看病次数,count(结算金额) 结算总金额 from 病人表,病历表 where 病人姓+病人名= '柳四二' go --5.查询医生编号为'docek001'的医生看过的所有病人资料(病人编号,病人姓名,医生编号)。 select 病人表.病人编号,病人姓+病人名病人姓名,医生表.医生编号 from 病人表,医生表,病历表 where 病人表.病人编号= 病历表.病人编号and 医生表.医生编号= 病历表.医生编号and 医生表.医生编号= 'docek001' go --6.查询'张明仁'医生看过的所有病人资料(病人编号,病人姓名,医生姓名)。 select 病人表.病人编号,病人姓+病人名病人姓名,医生姓+医生名医生姓名 from 病人表,医生表,病历表 where 病人表.病人编号= 病历表.病人编号and 医生表.医生编号= 病历表.医生编号and 医生表.医生姓+医生表.医生名= '张明仁' go --7.显示出院日期在年间每个病人的最高的一笔结算金额。(注:要显示的信息有--病人编号,病人姓名,最高的结算金额)