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

news2024/11/18 13:00:12

目录

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.coloradmin.cn/o/756550.html

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

相关文章

为什么单片机可以直接烧录程序的原因是什么?

单片机&#xff08;Microcontroller&#xff09;可以直接烧录程序的原因主要有以下几点&#xff1a; 集成性&#xff1a;单片机是一种高度集成的芯片&#xff0c;内部包含了处理器核心&#xff08;CPU&#xff09;、存储器&#xff08;如闪存、EEPROM、RAM等&#xff09;、输入…

JavaScript 使用URL跳转传递数组对象数据类型的方法

文章目录 首先了解一下正常传递基本数据类型JavaScript 跳转页面方法JavaScript 路由传递参数JavaScript 路由接收参数传递对象、数组效果&#xff1a; 在前端有的时候会需要用链接进行传递参数&#xff0c;基本数据类型的传递还是比较简单的&#xff0c;但是如果要传递引用数据…

AWS 解决方案架构师「免费考」

周五晚&#xff0c;AWS 推出了的训练营活动&#xff0c;这对于正在准备 Cloud Practitioner 的我来说&#xff0c;简直不要太开心。官方文章原文链接《限定&#xff01;直冲「云」霄训练营开营啦》。 PART-01 训练营简介 看到推送后第一时间点了进去&#xff0c;活动的情况简…

Socket API使用——模拟http协议

Socket API使用——模拟http协议 简单的c/s程序——服务端实例 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import java.nio.char…

Python np.unique()函数详解

np.unique()函数详解&#xff1a;返回数组的唯一值唯一值默认已进行从小到大的排序 一些重要参数 return_index&#xff1a;bool, optional。如果设置为True,返回数组中唯一值的索引号&#xff1b;否则不返回。 注意&#xff1a;返回的数组和输入的数组的大小不相同&#xf…

第十五章——友元、异常

友元 类并非只能拥有友元函数&#xff0c;也可以将类作为友元。在这种情况下&#xff0c;友元类的所有方法都可以访问原始类的私有成员和保护成员。因此尽管友元被授予从外部访问类的私有部分的权限&#xff0c;但它们并不与面向对象的编程思想相悖&#xff0c;相反提高了共有…

《C++程序设计原理与实践》笔记 第20章 容器和迭代器

本章和下一章将介绍STL&#xff0c;即C标准库的容器和算法部分。关键概念序列和迭代器用于将容器&#xff08;数据&#xff09;和算法&#xff08;处理&#xff09;联系在一起。 20.1 存储和处理数据 首先考虑一个简单的例子&#xff1a;Jack和Jill各自在测量车速&#xff0c…

echarts x轴文字过长 文字换行显示

xAxis: {type: "category",data: [四美休闲娱乐文化场馆, 资讯, 大咖分享],axisLabel: {show: true,fontSize: 10,interval: 0,color: "#CAE8EA",formatter: function (params) {var newParamsName "";var paramsNameNumber params.length;var…

MySQL数据库基础 18

第18章_MySQL8其它新特性 1. MySQL8新特性概述1.1 MySQL8.0 新增特性1.2 MySQL8.0移除的旧特性 2. 新特性1&#xff1a;窗口函数2.1 使用窗口函数前后对比2.2 窗口函数分类2.3 语法结构2.4 分类讲解1. 序号函数2. 分布函数3. 前后函数4. 首尾函数5. 其他函数 2.5 小 结 3. 新特…

【讲座笔记】Continual Learning and Memory Augmentation with Deep Neural Networks

20230607【开放世界的感知&#xff1a;探索可迁移与可持续学习之路】巩东&#xff1a;Continual Learning and Memory Augmentation……_哔哩哔哩_bilibili 游荡……游荡……找个talk看一下 讲的是continuous learning&#xff08;好家伙缩写也是CL&#xff09; 1.continual l…

error: ‘CV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope

1-错误 2-错误原因 opencv4.x以上&#xff0c;有些宏&#xff0c;API名字改了&#xff0c;需要改为新的 3-解决方案 CV_LOAD_IMAGE_UNCHANGED 改为 cv::IMREAD_UNCHANGEDCV_LOAD_IMAGE_GRAYSCALE 改为 cv::IMREAD_GRAYSCALECV_LOAD_IMAGE_COLOR 改为 cv::IMREAD_COLORCV_LO…

Win10,WinServer16,DNS,Web ,域 环境配置 周总结 (温故而知新 可以为师矣 第十五课)

Win10,WinServer16,DNS,Web ,域 环境安装 (第十五课) 创建虚拟机安装windowserver2016服务器(NETBASE第二课)_星辰镜的博客-CSDN博客 创建台虚拟机并安装上window10系统&#xff08;NETBASE 第一课&#xff09;_window 虚拟机_星辰镜的博客-CSDN博客配置通过域名访问网站(NET…

【5G PHY】5G 调制与编码策略(MCS)介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

实验:如何在YOLO8中添加PnP算法来实现Head Pose Estimation

目录 前言一、步骤二、PnP估计Head Pose&#xff0c;并显示1.引入库2.结果展示 总结 前言 YOLO&#xff18;的集成度比较高&#xff0c;如何在简洁的代码中加入Head Pose的东西&#xff0c;不是一件简单的事情&#xff0e;这里介绍如何插入PnP算法实现头部姿态估计的代码&…

【岛屿最大面积】BJ某IT厂笔试题

该题在LeetCode上能找到原题&#xff0c;大致意思是&#xff0c;给你一个大小为 m x n 的二进制矩阵 grid 。岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0&…

【雕爷学编程】Arduino动手做(06)---KY-038声音传感器模块2

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

【PDFBox】PDFBox操作PDF文档之添加本地图片、添加网络图片、图片宽高自适应、图片水平垂直居中对齐

这篇文章&#xff0c;主要介绍PDFBox操作PDF文档之添加本地图片、添加网络图片、图片宽高自适应、图片水平垂直居中对齐。 目录 一、PDFBox操作图片 1.1、添加本地图片 &#xff08;1&#xff09;案例代码 &#xff08;2&#xff09;运行效果 &#xff08;3&#xff09;方…

Android手写占位式插件化框架之Activity通信、Service通信和BroadcastReceiver通信

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 前言&#xff1a; 1、什么是插件化&#xff1f; 能运行的宿主APP去加载没有下载的APK文件…

pdf转word文档怎么转?这三个实用方法给你。

PDF (Portable Document Format) 是一种广泛应用于电子文档分发的文件格式&#xff0c;它可以跨平台和保持文档格式的一致性。然而&#xff0c;有时我们需要对PDF文档进行编辑和修改&#xff0c;这时将其转换为可编辑的Word文档就变得至关重要。转换PDF为Word文档可以让我们轻松…

[Halcon3D] 3D手眼标定理论与示例解析

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…