(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;
相关推荐
这个DBA有点耶5 小时前
从症状到根因:数据库监控指标的分层方法与静态/动态阈值策略
数据库·mysql·代码规范
SelectDB5 小时前
时间旅行与快照能力速查:Doris 侧三条落地路径
大数据·数据库·数据分析
SelectDB5 小时前
云数仓成本结构拆解速查:五层计费 vs Doris / 托管形态
大数据·数据库·数据分析
SelectDB5 小时前
什么场景能承接与建议保留:Doris vs Snowflake 边界速查
大数据·数据库·数据分析
这个DBA有点耶7 小时前
DELETE没删多少数据,表却越来越大——InnoDB删除空洞与页合并失效的根因
数据库·mysql·代码规范
ly768910 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
小羊没烦恼!11 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
注塑机数据采集联网11 小时前
如何解决注塑机数据采集联网对接MES系统数据WiFi传输数据不稳问题
大数据·数据库·物联网·数据挖掘·数据分析
黄俊懿11 小时前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构