(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;
相关推荐
SkyWalking中文站3 小时前
BanyanDB 0.11.0:新特性与升级指南
数据库
₍˄·͈༝·͈˄*₎◞ ̑̑码5 小时前
MyBatis操作数据库
数据库·mybatis
刃神太酷啦7 小时前
Redis 进阶核心:持久化 (RDB/AOF)、事务与主从复制全解析----《Hello Redis!》(5)
linux·c语言·数据库·c++·redis·缓存·bootstrap
丁丁点灯o7 小时前
Oracle中使用外键的场景及不适用外键的情况
数据库·oracle
天天进步20157 小时前
Pixelle-Video 源码解析 #18:声音克隆功能:参考音频如何影响解说效果?
数据库·音视频
不懂的浪漫8 小时前
ToDesk 连接 Linux 后分辨率过低的解决方法
linux·运维·数据库
布莱克6058 小时前
Redis 详解:从核心数据结构到高可用架构
数据库
冰暮流星9 小时前
mysql之左外连接与右外连接
数据库·sql
jyOverQ9 小时前
MySQL 联合索引怎么用?最左匹配原则到底是什么意思?
数据库·mysql
oradh9 小时前
Oracle enq: US - contention 等待事件总结
数据库·oracle