IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 每日Flag-----Sql 编写思路训练????? 五星推荐 -> 正文阅读

[大数据]每日Flag-----Sql 编写思路训练????? 五星推荐

![在这里插入图片描述](https://img-blog.csdnimg.cn/603fa32e055c489392168331eb341cee.png

编程思路是为主 代码为辅

第一题(简单):

问题描述:

  下面有两张表 一张employees(员工表) 和 dept_manager(领导表)要求找出不是领导的员工号(emp_no)

在这里插入图片描述

数据库表结构:

drop table if exists  `dept_manager` ; 
drop table if exists  `employees` ; 
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
INSERT INTO dept_manager VALUES('d001',10002,'1996-08-03','9999-01-01');
INSERT INTO dept_manager VALUES('d002',10003,'1990-08-05','9999-01-01');
INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26');
INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21');
INSERT INTO employees VALUES(10003,'1959-12-03','Parto','Bamford','M','1986-08-28');

首先这个题是找出获取所有非manager的员工emp_no
从题中我们可以提取出 非manager 这个就是切入点 这个非可以对照sql 中 not in
也就是先查出来 dept 表中emp_no的员工号作为过来条件使用 也就使用子查询
代码如下:

select emp_no from employees where emp_no not in (select emp_no from dept_manager)

第二题(中等)

问题描述:

   要求获取所有员工的manager  同时 员工如果同时是部门领导就不进行显示

员工表
在这里插入图片描述
领导表
在这里插入图片描述
正确结果
在这里插入图片描述

表结构

drop table if exists  `dept_emp` ; 
drop table if exists  `dept_manager` ; 
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
INSERT INTO dept_emp VALUES(10001,'d001','1986-06-26','9999-01-01');
INSERT INTO dept_emp VALUES(10002,'d001','1996-08-03','9999-01-01');
INSERT INTO dept_emp VALUES(10003,'d002','1995-12-03','9999-01-01');
INSERT INTO dept_manager VALUES('d001',10002,'1996-08-03','9999-01-01');
INSERT INTO dept_manager VALUES('d002',10003,'1990-08-05','9999-01-01');

首先这个思路我们可以根据题意得到 有效的条件是 查询员工所在部门的领导 但是不显示员工就是部门领导的数据 也就是说过滤条件是一个相等(员工表中的dept_no = 领导表中的dept_no) 一个不等(员工表中的 emp_no <> 领导表中的emp_no) 思路有了代码就很好实现

select a.emp_no, b.emp_no
from dept_emp a
left join dept_manager b
on a.dept_no = b.dept_no
where a.emp_no <> b.emp_no

第三题(困难)

问题描述:

  获取每个部门中薪水最高的员工 返回dept_no, emp_no以及其对应的salary,按照部门编号dept_no升序排列

员工表
![在这里插入图片描述](https://img-blog.csdnimg.cn/dba5440f1cf04c68867b69d127fe236f.png

薪资表
![在这里插入图片描述](https://img-blog.csdnimg.cn/ed5c1b1289844b3cb59f1ed730e43c6a.png
结果
在这里插入图片描述

表结构

-- Table structure for dept_emp
-- ----------------------------
DROP TABLE IF EXISTS `dept_emp`;
CREATE TABLE `dept_emp`  (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`, `dept_no`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of dept_emp
-- ----------------------------
INSERT INTO `dept_emp` VALUES (10001, 'd001', '1986-06-26', '9999-01-01');
INSERT INTO `dept_emp` VALUES (10002, 'd001', '1996-08-03', '9999-01-01');
INSERT INTO `dept_emp` VALUES (10003, 'd002', '2021-09-06', '2021-09-13');
DROP TABLE IF EXISTS `salaries`;
CREATE TABLE `salaries`  (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`, `from_date`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of salaries
-- ----------------------------
INSERT INTO `salaries` VALUES (10001, 88958, '2002-06-22', '9999-01-01');
INSERT INTO `salaries` VALUES (10002, 99999, '2001-08-02', '9999-01-01');
INSERT INTO `salaries` VALUES (10003, 9999, '2021-09-28', '2021-09-15');

思路分析
从题干中可以提取几个关键字 每个(想到分组),最高(max)升序(desc)
首先将两个表连接起来 然后根据 员工表中的部门进行分组 之后使用 desc 进行排序 输出的时候salary 要是最大值所以使用max进行处理
拿到关键词 编写就很简单了

SELECT dept.emp_no,dept.dept_no,max(sa.salary) FROM dept_emp dept join salaries sa on dept.emp_no  = sa.emp_no GROUP BY dept.dept_no DESC
  晚安

在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:21:27  更:2021-09-29 10:23:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 18:37:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码