MySQL每日一练——MySQL多表查询进阶挑战

目录

1、首先创建表

t_dept:

t_emp:

2、插入数据

t_dept表:

t_tmp表:

3、修改表

4、按条件查找


1、首先创建表

t_dept:

CREATE TABLE t_dept (id INT(11) NOT NULL AUTO_INCREMENT,deptName VARCHAR(30) DEFAULT NULL,address VARCHAR(40) DEFAULT NULL,PRIMARY KEY (id)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

t_emp:

CREATE TABLE t_emp (id INT(11) NOT NULL AUTO_INCREMENT,name VARCHAR(20) DEFAULT NULL,age INT(3) DEFAULT NULL,dept_id INT(11) DEFAULT NULL,
empno int  not null,PRIMARY KEY (id),KEY idx_dept_id (dept_id)#CONSTRAINT fk_dept_id FOREIGN KEY (dept_id) REFERENCES t_dept (id)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2、插入数据

t_dept表:

INSERT INTO t_dept(deptName,address) VALUES('华山','华山');
INSERT INTO t_dept(deptName,address) VALUES('丐帮','洛阳');
INSERT INTO t_dept(deptName,address) VALUES('峨眉','峨眉山');
INSERT INTO t_dept(deptName,address) VALUES('武当','武当山');
INSERT INTO t_dept(deptName,address) VALUES('明教','光明顶');
INSERT INTO t_dept(deptName,address) VALUES('少林','少林寺');

t_tmp表:

INSERT INTO t_emp(NAME,age,dept_id,empno) VALUES('风清扬',90,1,100001);
INSERT INTO t_emp(NAME,age,dept_id,empno) VALUES('岳不群',50,1,100002);
INSERT INTO t_emp(NAME,age,dept_id,empno) VALUES('令狐冲',24,1,100003);
INSERT INTO t_emp(NAME,age,dept_id,empno) VALUES('洪七公',70,2,100004);
INSERT INTO t_emp(NAME,age,dept_id,empno) VALUES('乔峰',35,2,100005);
INSERT INTO t_emp(NAME,age,dept_id,empno) VALUES('灭绝师太',70,3,100006);
INSERT INTO t_emp(NAME,age,dept_id,empno) VALUES('周芷若',20,3,100007);
INSERT INTO t_emp(NAME,age,dept_id,empno) VALUES('张三丰',100,4,100008);
INSERT INTO t_emp(NAME,age,dept_id,empno) VALUES('张无忌',25,5,100009);
INSERT INTO t_emp(NAME,age,dept_id,empno) VALUES('韦小宝',18,null,100010);

3、修改表

ALTER TABLE t_dept
add  CEO  INT(11)  ;# CEO=2 值,都应该是t_emp 中id的值。
update t_dept set CEO=2 where id=1;
update t_dept set CEO=4 where id=2;
update t_dept set CEO=6 where id=3;
update t_dept set CEO=8 where id=4;
update t_dept set CEO=9 where id=5;

4、按条件查找

1 所有有门派的人员信息 
select * from t_emp where dept_id  is not  null;

2 列出所有用户,并显示其机构信息 
select t_emp.*,t_dept.* 
from t_emp 
join t_dept 
on t_dept.id=t_emp.id;

3 列出不入派的人员
select * from t_emp where dept_id is null ;

4 所有没人入的门派
select * 
from t_dept  
left join t_emp 
on t_emp.dept_id=t_dept.id where dept_id is null;

5 列出所有人员和门派的对照关系
select * from t_emp  
left join t_dept 
on t_emp.dept_id=t_dept.id;

6 列出所有没入派的人员和没人入的门派
(select name as 没有部门或者没有人员,deptname 
from t_emp 
left join t_deptept 
on t_emp.dept_id=t_dept.id where dept_id is null) 
union 
(select t_dept.adddress,t_emp.empno 
from  t_emp 
right join t_dept 
on t_emp.dept_id=t_dept.id wheere dept_id is null);

7 求各个门派对应的掌门人名称:
方法1:
select name as 掌门人,deptname 
from t_emp 
right join t_dept 
on t_emp.dept_id=t_dept.id where t_emp.id in(t_dept.CEO);
方法2:select name as 掌门人,deptname
from t_emp inner 
join t_dept
on t_emp.dept_id=t_dept.id where t_emp.id in(select  CEO from t_dept);

8 求所有当上掌门人的平均年龄:
SELECT d.deptName, e.name AS ceo_name, avg_age.average_ceo_age 
FROM t_dept d 
JOIN t_emp e  #与t_emp的连接
ON d.CEO = e.id #查找出所有的CEO信息
JOIN (
SELECT AVG(age) AS average_ceo_age     
FROM t_emp    
WHERE id IN (SELECT CEO FROM t_dept) 
) avg_age;#和一个子查询进行连接,连接结果是所有掌门人的平均年龄

9 求所有人物对应的掌门名称:
select e1.id,e1.name,e1.age,e1.dept_id,e1.deptname,e1.address,e1.CEO,e2.掌门  
from (select em.id,em.name,em.age,em.dept_id,de.deptname,de.address,de.CEO  
from t_emp as em  
inner join t_dept asde  
on em.dept_id=de.id) as e1  
inner join(select name as 掌门,id  
from t_emp) as e2  
on e1.dept_id=e2.id;

10 列出自己的掌门比自己年龄小的人员

 第一步:拿出所有掌门的信息:

select em.id,em.name,em.age,em.dept_id,de.CEO 
from t_emp as em  
inner join t_dept as de  
on em.id=de.CEO;

第二步:将所有人员的年龄与掌门的年龄进行比较并且按照在部门内部进行比较:

select * 
from t_emp as e left 
join(select em.id,em.name,em.age,em.dept_id,de.CEO 
from t_emp as em  
inner join t_dept as de  
on em.id=de.CEO) as d 
on e.dept_id=d.dept_id 
where e.age>d.age;

11 列出所有年龄低于自己门派平均年龄的人员
select e.id,e.name,e.age,e.dept_id,e.empno,d.age1  
from t_emp as e  
left join (select dept_id,avg(agee) as age1 
from t_emp group by dept_id ) as d  
on e.dept_id=d.dept_id 
where e.age<d.age1;

12 列出至少有2个年龄大于40岁的成员的门派
select e1.deptname,count(e1.age) 
from (select em.id,name,age,dept_id,deptname 
from t_emp as em  
join t_dept as de 
on de.id=em.dept_id where age>=40) as e1  
group by e1.dept_id 
having count(e1.age)>=2 ;

13 至少有2位非掌门人成员的门派
select deptname,count(t_emp.name) 
from t_emp  
right join t_dept  
on t_emp.dept_id=t_dept.id 
where t_emp.id not in(t_dept.CEO) 
group by deptname  
having count(t_emp.name)>=2;

14 列出全部人员,并增加一列备注“是否为掌门”,如果是掌门人显示是,不是掌门人显示否*
SELECT e.name, e.age, d.deptName,         
CASE WHEN e.empno = (SELECT empno FROM t_emp WHERE dept_id = d.id ORDER BY age DESC LIMIT 1) THEN '是' ELSE '否' END AS 是否为掌门 
FROM t_emp e 
JOIN t_deppt d 
ON e.dept_id = d.id;
 
15 列出全部门派,并增加一列备注“老鸟or菜鸟”,若门派的平均值年龄>50显示“老鸟”,否则显示“菜鸟”*
SELECT d.deptName,        
CASE WHEN AVG(e.age) > 50 THEN '老鸟' ELSE '菜鸟' END AS 备注 
FROM t_dept d 
JOIN t_emp e 
ON d.id = e.dept_id GROUP BY d.deptName;

16 显示每个门派年龄最大的人
select dept_id,max(age) 
from t_emp group by dept_id  
having dept_id is not null;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python结巴中文分词笔记

&#x1f4da; jieba库基本介绍 &#x1f310; jieba库概述 Jieba是一个流行的中文分词库&#xff0c;它能够将中文文本切分成词语&#xff0c;并对每个词语进行词性标注。中文分词是自然语言处理的重要步骤之一&#xff0c;它对于文本挖掘、信息检索、情感分析等任务具有重要…

Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论

Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论 我们使用Linux作为服务器操作系统时&#xff0c;为了达到高并发处理能力&#xff0c;充分利用机器性能&#xff0c;经常会进行一些内核参数的调整优化&#xff0c;但不合理的调整常常也会引起意想不到的其他问题&#x…

Elasticsearch原理剖析

一、 Elasticsearch结构 Elasticsearch集群方案由EsMaster、EsClient和EsNode1、EsNode2、EsNode3、EsNode4、EsNode5、EsNode6、EsNode7、EsNode8、EsNode9进程组成&#xff0c;如下图所示&#xff0c;模块说明如表下所示。 说明如表&#xff1a; 名称说明ClientClient使用H…

Android系统启动流程分析

当按下Android系统的开机电源按键时候&#xff0c;硬件会触发引导芯片&#xff0c;执行预定义的代码&#xff0c;然后加载引导程序(BootLoader)到RAM&#xff0c;Bootloader是Android系统起来前第一个程序&#xff0c;主要用来拉起Android系统程序&#xff0c;Android系统被拉起…

C# Linq 详解四

目录 概述 二十、SelectMany 二十一、Aggregate 二十二、DistinctBy 二十三、Reverse 二十四、SequenceEqual 二十五、Zip 二十六、SkipWhile 二十七、TakeWhile C# Linq 详解一 1.Where 2.Select 3.GroupBy 4.First / FirstOrDefault 5.Last / LastOrDefault C# Li…

排序子序列,倒置字符串讲解(图文并茂)

目录 1.排序子序列 2.倒置字符串 1.排序子序列 排序子序列_牛客笔试题_牛客网 (nowcoder.com) 首先题干中提到非递增序列和非递减序列&#xff0c;那么我们就要先弄明白什么是上述2种序列&#xff1a; 非递增序列&#xff1a;a[i] > a[i1] 如&#xff1a;3 2 1 或者 3 3 …

使用docker简单创建一个python容器

/root/docker_python目录结构&#xff1a; . |-- demo | -- main.py -- docker-compose.ymlmain.py内容&#xff1a; # codingutf-8 # -*- coding: utf-8 -*-if __name__ __main__:print("hello world")docker-compose.yml内容&#xff1a; version: "3&q…

注册中心技术Eureka、Nacos

说明&#xff1a;在微服务框架中&#xff0c;各个服务之间都是独立的。理论上来说&#xff0c;各个服务之间是可以直接通信的&#xff0c;但实际上因为服务之间通信需要管理和规划&#xff0c;如请求怎么负载均衡、请求怎么降级处理等等&#xff0c;所以就需要使用一个技术&…

Linux 常用命令

认识 Linux 目录结构 Linux 系统中&#xff0c;磁盘上的文件和目录被组成一棵目录树&#xff0c;每个节点都是目录或文件 Linux 是一个树形目录结构。Linux 上没有盘符概念&#xff0c;不分 C 盘等&#xff0c;根目录 \ 的地位相当与 Java 的 Object ——几个特殊的目录&…

uniapp快速开发小程序全流程

uniapp快速开发小程序全流程 完整项目代码&#xff1a;https://gitee.com/Zifasdfa/ziyi-app 欢迎fork与star 1 项目效果及环境准备 1.1 项目效果 本文主要使用uniapp实现一个简单的app应用 1.2 环境准备&项目初始化 ①node环境&#xff1a;去node.js官网下载稳定版的nod…

微服务之Eureka服务注册中⼼

关于务注册中⼼服 服务注册中⼼本质上是为了解耦服务提供者和服务消费者,尽可能量使两者联系可控在一定的范围外 1.在父项目下下引入 Spring Cloud 依赖 <dependencyManagement> <dependencies> <!-- SCN --> <dependency> <groupId> org.sp…

【网站 全选和单选】js 实现-点击全选按钮时,所有的按钮都会被选中或取消选中。

要实现的效果如图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport…

Loki+promtail+Grafana监控docker容器日志

目标&#xff1a;监控docker容器的日志&#xff0c;适用于生产环境 效果&#xff1a; 需要的工具&#xff1a;Loki&#xff0c;promtail&#xff0c;Grafana 通过安装promtail容器收集日志&#xff0c;并把日志发送给loki存储处理&#xff0c;由Grafana展示日志。 参考官网的…

Windows bat隐藏运行窗口的几种方案

文章目录 一、背景二、测试数据三、隐藏bat运行窗口方案1. 使用VBScript脚本2. 使用mshta调用js或vbs脚本3. 将bat编译为exe程序4. 使用任务计划程序 一、背景 有些程序在执行批处理脚本时&#xff0c;可能会看到dos窗口&#xff0c;或者看到窗口一闪而过。如果批处理脚本执行…

(EMQX)STM32L+BC20+MQTT协议传输温湿度,ADC,电压,GPS数据到EMQX

1、材料准备 准备以下材料 2、设备连接 2.1 插入物联网卡&#xff0c;天线 首先把BC20核心板从开发板上拆下来 然后将物联卡放置在BC20核心板内 物联卡放置完成将BC20核心板重新插入到开发板内&#xff08;注意不要弄错方向&#xff09; 同时接入天线 2.2 连接ST-Link仿真…

Python 算法基础篇:大O符号表示法和常见时间复杂度分析

Python 算法基础篇&#xff1a;大 O 符号表示法和常见时间复杂度分析 引言 1. 大 O 符号表示法 a ) 大 O 符号的定义 b ) 示例代码 2. 常见时间复杂度分析总结 引言 在分析和比较算法的性能时&#xff0c;时间复杂度是一项重要的指标。而大 O 符号表示法是用来描述算法时间复杂…

动态规划01背包之416分割等和子集(第10道)

题目&#xff1a; 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例&#xff1a; 解法&#xff1a; 先复习一下01背包问题&#xff1a; dp[i][j]的含义&#xff1a;从下标为[0-i]的物品里…

Linux->初识计算机网络

目录 前言&#xff1a; 1 网络发展背景 2 协议 2.1 网络协议初识 2.2 协议分层 2.3 OSI、TCP/IP层状模型 2.4 协议和操作系统的关系 2.5 根据协议栈的通信 3 网络中的地址管理 前言&#xff1a; 本篇当中没有任何关于网络编程的讲解&#xff0c;全部是对网络的宏观理解…

【数学建模】 灰色预测模型

数学建模——预测模型简介 https://www.cnblogs.com/somedayLi/p/9542835.html 灰色预测模型 https://blog.csdn.net/qq_39798423/article/details/89283000?ops_request_misc&request_id&biz_id102&utm_term%E7%81%B0%E8%89%B2%E9%A2%84%E6%B5%8B%E6%A8%…