(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;
相关推荐
ccddsdsdfsdf4 小时前
DBeaver怎么链接mongoDB
数据库·mongodb
丷丩5 小时前
Postgresql基础实践教程(十一)各种Join
数据库·postgresql·join
星夜夏空996 小时前
FreeRTOS学习(4)——内存映射
数据库·学习·mongodb
TheRouter6 小时前
AI Agent 记忆体系建设实战:短期、长期与工作记忆的工程实现
数据库·人工智能·oracle
Omics Pro6 小时前
首个!外源天然产物综合性代谢图谱
数据库·人工智能·算法·机器学习·r语言
JAVA面经实录9177 小时前
Hibernate面试题库
数据库·oracle·hibernate
迷枫7128 小时前
DM8 目录结构与常用排查入口梳理
服务器·数据库
Mr.Daozhi9 小时前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)
前端·数据库·langchain·大模型·gradio·rag·科研工具
小程故事多_809 小时前
Claude Code自定义workflow skills用法
数据库·人工智能·智能体
大鹏说大话9 小时前
SQL 排序与分组实战:解决“分组后取最新数据“
android·java·数据库