写在前面
1、基于2022级软件工程/计算机科学与技术实验指导书
2、成品仅提供参考
3、如果成品不满足你的要求,请寻求其他的途径
运行环境
window11家庭版
Navicat Premium 16
Mysql 8.0.36
实验要求
在实验三的基础上完成下列查询:
1、查询医生"陈斌"值班的日期、时段、诊室名称、诊室位置。
2、查询级别名称为 "二级专家"的医生姓名、诊疗费用、科室名称。
3、查询在2022年4月18一天中上午、下午均值班的医生的工作证号。
4、查询在2022年4月18和4月19日两天均未值班的医生的工作证号、姓名、科室名称。
5、查询每个科室的科室编码及医生人数(要求按科室编码分组)。
6、查询科室级别为"2"的每个科室的科室编码及医生人数(要求按科室编码分组)。
7、查询各个医生级别的级别编码、级别名称及其人数。(要求只按医生级别分组,统计人数建议用派生表)
8、查询每个医生的工作证号、姓名和值班次数。(半天算值班1次,要求只按工作证号分组,统计次数建议用派生表实现)
实验过程
1、查询医生"陈斌"值班的日期、时段、诊室名称、诊室位置。
SELECT
Skd_Date,
Skd_seg,
Room_name,
Room_loc
FROM
doctor
INNER JOIN room ON doctor.Dept_no = room.Dept_no
INNER JOIN SCHEDULE ON doctor.Dr_no = SCHEDULE.Dr_no
WHERE
Dr_name = "陈斌"

2、查询级别名称为 "二级专家"的医生姓名、诊疗费用、科室名称。
SELECT
Dr_name,
Drlv_fee,
Room_name
FROM
doctor
INNER JOIN doctorlevel ON doctor.Drlv_no=doctorlevel.Drlv_no
INNER JOIN room ON doctor.Dept_no = room.Dept_no
WHERE
Drlv_name = "二级专家"

3、查询在2022年4月18一天中上午、下午均值班的医生的工作证号。
SELECT
Dr_no
FROM
SCHEDULE
WHERE
date( Skd_Date )= "2022-4-18"
GROUP BY
Dr_no
HAVING
count(*)>1

4、查询在2022年4月18和4月19日两天均未值班的医生的工作证号、姓名、科室名称。
SELECT
doctor.Dr_no,
Dr_name,
Dept_name
FROM
doctor
INNER JOIN SCHEDULE ON doctor.Dr_no = SCHEDULE.Dr_no
INNER JOIN department ON doctor.Dept_no = department.Dept_no
GROUP BY
doctor.Dr_no
HAVING
count(*)=0

5、查询每个科室的科室编码及医生人数(要求按科室编码分组)。
SELECT
department.Dept_no,COUNT(Dr_no)
FROM
department
INNER JOIN doctor ON department.Dept_no = doctor.Dept_no
GROUP BY
Dept_no

6、查询科室级别为"2"的每个科室的科室编码及医生人数(要求按科室编码分组)。
SELECT
department.Dept_no,COUNT(Dr_no)
FROM
department
INNER JOIN doctor ON department.Dept_no = doctor.Dept_no
WHERE Dept_level=2
GROUP BY
Dept_no

7、查询各个医生级别的级别编码、级别名称及其人数。(要求只按医生级别分组,统计人数建议用派生表)
SELECT
doctorlevel.Drlv_no,
Drlv_name,
COUNT( Dr_no ) AS Dr_num
FROM
doctorlevel
INNER JOIN doctor ON doctorlevel.Drlv_no = doctor.Drlv_no
GROUP BY
doctorlevel.Drlv_no;

8、查询每个医生的工作证号、姓名和值班次数。(半天算值班1次,要求只按工作证号分组,统计次数建议用派生表实现)
SELECT
doctor.Dr_no,
Dr_name,
COUNT( Skd_seg ) AS Skd_time
FROM
doctor
INNER JOIN SCHEDULE ON doctor.Dr_no = SCHEDULE.Dr_no
GROUP BY
doctor.Dr_no;
