【面试必刷】Mysql编程题:第四期

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【面试必刷】Mysql编程题:第四期

Test 1


有一个员工表 employees 简况如下:

image.png

有一个部门领导表 dept_manager 简况如下:

image.png

请你找出所有非部门领导的员工 emp_no ,以上例子输出:

image.png


解题思路


(1) 查询的要求是不在 dept_manager 表中的 emp_no,使用 NOT IN + 子查询。MYSQL官方文档中提到 IN 使用时效率不高,推荐使用 EXISTSJOIN

SELECT emp_no 
FROM employees 
WHERE emp_no NOT IN(SELECT DISTINCT emp_no
                   FROM dept_manager)
复制代码


(2) 使用 LEFT JOIN 来连接两个表,再筛选非 manager 的员工。

SELECT e.emp_no
FROM employees AS e LEFT JOIN dept_manager AS d
ON e.emp_no = d.emp_no 
WHERE dept_no IS NULL
复制代码


(3) 使用 NOT EXISTS + 子查询 的方式。

SELECT emp_no
FROM employees AS e
WHERE NOT EXISTS(SELECT *
                FROM dept_manager AS d
                WHERE e.emp_no = d.emp_no)
复制代码


Test 2


有一个员工表 dept_emp 简况如下:

image.png

第一行表示为员工编号为 10001 的部门是 d001 部门。

有一个部门经理表 dept_manager 简况如下:

image.png

第一行表示为 d001 部门的经理是编号为 10002 的员工。

获取所有的员工和员工对应的经理,如果员工本身是经理的话则不显示,以上例子如下:

image.png


解题思路


考察知识点

INNER JOIN 内连接。

根据题中的要求,使用内连接的方式连接两张表,同时要求两表的部门编号 dept_no 要相同,但员工编号 emp_no 不能相同。

SELECT e.emp_no, m.emp_no AS manager
FROM dept_emp AS e INNER JOIN dept_manager AS m
ON e.dept_no = m.dept_no
WHERE e.emp_no <> m.emp_no
复制代码


为何要这样?一步步看! 我们先获取两表 CROSS JOIN(笛卡尔积)的结果。

image.png

我们先指定连接条件为 e.dept_no = m.dept_no, 在这些记录中寻找部门号相同的员工。得到如下结果。

image.png

然后再指定 e.emp_no <> m.emp_no ,筛选员工编号不相等的员工信息,这样就去掉了员工的经理是他本身这种情况。结果如下。

image.png

当然 WHEREON 中的条件顺序可以颠倒,并不影响结果。



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
6月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
6月前
|
存储 关系型数据库 MySQL
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
|
4月前
|
关系型数据库 MySQL Java
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
|
6月前
|
存储 SQL 关系型数据库
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
|
6月前
|
SQL 存储 关系型数据库
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
|
8月前
|
人工智能 监控 JavaScript
Crack Coder:在线面试“AI外挂”!编程问题秒出答案,完全绕过屏幕监控,连录屏都抓不到痕迹!
Crack Coder 是一款开源的隐形 AI 辅助工具,专为技术面试设计,支持多种编程语言,提供实时编程问题解决方案,帮助面试者高效解决问题。
339 14
|
8月前
|
消息中间件 NoSQL 关系型数据库
去哪面试:1Wtps高并发,MySQL 热点行 问题, 怎么解决?
去哪面试:1Wtps高并发,MySQL 热点行 问题, 怎么解决?
去哪面试:1Wtps高并发,MySQL 热点行 问题, 怎么解决?
|
9月前
|
SQL 关系型数据库 MySQL
京东面试:MySQL MVCC是如何实现的?如何通过MVCC实现读已提交、可重复读隔离级别的?
1.请解释什么是MVCC,它在数据库中的作用是什么? 2.在MySQL中,MVCC是如何实现的?请简述其工作原理。 3.MVCC是如何解决读-写和写-写冲突的? 4.在并发环境中,当多个事务同时读取同一行数据时,MVCC是如何保证每个事务看到的数据版本是一致的? 5.MVCC如何帮助提高数据库的并发性能?
京东面试:MySQL MVCC是如何实现的?如何通过MVCC实现读已提交、可重复读隔离级别的?
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
111 3
|
2月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

推荐镜像

更多