(2022级)成都工业学院数据库原理及应用实验五: SQL复杂查询

写在前面

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;
相关推荐
oradh5 分钟前
Oracle TX 锁 Mode 4(Share)问题排查总结
数据库·oracle·tx 锁 mode 4·oracle tx 锁
yi.Ist36 分钟前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
2601_963282772 小时前
工程项目、政企采购为什么优先选择对讲机批量采购?
数据库
Doraemomo2 小时前
SQLite数据库
数据库·sqlite
云贝教育-郑老师3 小时前
MySQL 的“黑匣子“:Performance Schema 把数据库内部变成一张可查的表
数据库·mysql
这个DBA有点耶4 小时前
同城双活落地的三座山:网络延迟、脑裂预防、反向同步
数据库·架构·dba
青春之我_XP4 小时前
MySQL 常用日期函数 实战指南
数据库·sql·mysql·数据分析·数据库开发·日期函数
Nturmoils4 小时前
sys_dump 备了库,角色和权限别漏在外面
数据库
接着奏乐接着舞。5 小时前
【2026】73道Redis 常见面试题与参考答案
数据库·redis·后端·缓存