(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;
相关推荐
JosieBook15 小时前
【数据库】IoTDB数据库与时序大模型深度融合,开启数据智能分析新范式
数据库·iotdb
Logic10115 小时前
《Mysql数据库应用》 第2版 郭文明 实验4 视图和索引的构建与使用核心操作与思路解析
数据库·sql·mysql·学习笔记·计算机网络技术·形考作业·国家开放大学
码农12138号15 小时前
网络安全-SQL注入
数据库·web安全·sql注入
破刺不会编程15 小时前
ubuntu环境下mysql的安装
数据库·mysql
合方圆~小文15 小时前
变焦摄像头画面时间戳同步方案
数据结构·数据库
QQ129584550415 小时前
SSAS-检查字段里的不可见字符
数据库·数据仓库·数据分析
dblens 数据库管理和开发工具15 小时前
DBLens for MySQL | MySQL 数据库管理和开发工具
数据库·mysql·mysql数据库管理和开发工具
廋到被风吹走15 小时前
【数据库】数据库选型
数据库
Ling_Ze15 小时前
mysql和postgressql数据库在服务器中容器创建和工具连接
服务器·数据库·mysql
云 祁15 小时前
Spark SQL 深度优化实战指南:从原理到生产的完整方法论
大数据·数据库·分布式·sql·spark