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

这篇具有很好参考价值的文章主要介绍了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('少林','少林寺');

MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库

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);

MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库

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;
MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
2 列出所有用户,并显示其机构信息 
select t_emp.*,t_dept.* 
from t_emp 
join t_dept 
on t_dept.id=t_emp.id;
MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
3 列出不入派的人员
select * from t_emp where dept_id is null ;
MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
4 所有没人入的门派
select * 
from t_dept  
left join t_emp 
on t_emp.dept_id=t_dept.id where dept_id is null;
MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
5 列出所有人员和门派的对照关系
select * from t_emp  
left join t_dept 
on t_emp.dept_id=t_dept.id;
MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
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);
MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
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);
MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
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;#和一个子查询进行连接,连接结果是所有掌门人的平均年龄
MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
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;
MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
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;

MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库

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;
MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
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 ;
MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
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;
MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
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;
 MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
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;
MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库
16 显示每个门派年龄最大的人
select dept_id,max(age) 
from t_emp group by dept_id  
having dept_id is not null;

MySQL每日一练——MySQL多表查询进阶挑战,MySQL,日常,mysql,数据库文章来源地址https://www.toymoban.com/news/detail-566980.html

到了这里,关于MySQL每日一练——MySQL多表查询进阶挑战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • [MySQL] MySQL复合查询(多表查询、子查询)

    [MySQL] MySQL复合查询(多表查询、子查询)

      前面我们学习了MySQL简单的单表查询。但是我们发现,在很多情况下单表查询并不能很好的满足我们的查询需求。 本篇文章会重点讲解MySQL中的 多表查询 、 子查询 和 一些复杂查询 。希望本篇文章会对你有所帮助。 文章目录 一、基本查询回顾 二、多表查询 2、1 笛卡尔积

    2024年02月04日
    浏览(8)
  • 连接查询(多表查询)——MySQL

    连接查询(多表查询)——MySQL

    又称多表查询,当 查询的字段涉及多个表 的时候,就要用到连接查询 分类: 为表起别名: 提高语句的简洁度 区分多个重名字段 注意 :如果为表起了别名,则查询的字段就 不能使用原来的别名去限定 查询A、B 交集部分数据 语法: 隐式内连接 select 字段列表 from 表1,表

    2024年02月04日
    浏览(11)
  • MySQL每日一练--校园教务系统

    MySQL每日一练--校园教务系统

    一丶数据库名称:SchoolDB 二丶数据库表信息:角色信息表 表名: t_role   主键: r_id 序号 字段名称 字段说明 类别 位数 属性 备注 1 r_id 角色编号 int     主键 自动增长 2 r_name_EN 角色名(英文) varchar 20 非空 不能重复 3 r_name_CH 角色名(中文) varchar 20 非空 不能重复 4 r_rem

    2024年02月11日
    浏览(7)
  • MySQL表单查询以及多表查询

    MySQL表单查询以及多表查询

    1.单表查询 CREATE TABLE `emp`  (   `empno` int(4) NOT NULL,   `ename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,   `job` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,   `mgr` int(4) NULL DEFAULT NULL,   `hiredate` date NOT NULL,   `sai` int(255) NOT NULL,   `comm` int(255) NULL DEFAULT

    2024年02月13日
    浏览(9)
  • MySQL案例——多表查询以及嵌套查询

    MySQL案例——多表查询以及嵌套查询

    MySQL笔记——表的修改查询相关的命令操作 MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明 文章目录 系列文章目录 前言 一 创建数据库 1.1 创建一个部门表 1.2 建一个职务表 1.3 创建一个员工表 1.4 创建一个工

    2024年02月15日
    浏览(9)
  • MySQL-多表联合查询

    MySQL-多表联合查询

     🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页: 小小恶斯法克的博客 🎈该系列文章专栏: 重拾MySQL 🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏 📜 感谢大家的关注! ❤️ 目录 🚀联合查询 🚀子

    2024年01月17日
    浏览(8)
  • MySQL-----多表查询(一)

    MySQL-----多表查询(一)

    目录 一.多表关系: 1.1 一对多(多对一): 1.2 多对多: 1.3 一对一: 二.多表查询概述: 三.连接查询: 3.1内连接: 3.2外连接: 3.3自连接查询: 3.4联合查询: 项目开发中, 在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构 ,由于业务之间

    2024年04月27日
    浏览(5)
  • MySQL- 多表查询(上)

    MySQL- 多表查询(上)

    ♥️ 作者:小刘在C站 ♥️ 个人主页: 小刘主页 ♥️ 每天分享云计算网络运维课堂笔记,努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️ 树高千尺,落叶归根人生不易,人间真情 前言 我们之前在讲解 SQL 语句的时候,讲解了 DQL 语句,也就是数

    2024年02月05日
    浏览(6)
  • 【MySQL】多表查询

    【MySQL】多表查询

    🎈3.1 内连接查询 语法 内连接相当于查询 A B 交集数据 案例 隐式内连接 执行上述语句结果如下: 查询 emp的 name, gender,dept表的dname 执行语句结果如下: 上面语句中使用表名指定字段所属有点麻烦,sql也支持给表指别名,上述语句可以改进为 显式内连接 执行结果如下:

    2023年04月17日
    浏览(7)
  • MySQL基础-多表查询

    MySQL基础-多表查询

    本文介绍MySQL的多表查询 一对多(多对一) 多对多 一对一 案例:部门与员工 关系:一个部门对应多个员工,一个员工对应一个部门 实现:在多的一方建立外键,指向一的一方的主键 案例:学生与课程 关系:一个学生可以选多门课程,一门课程也可以供多个学生选修 实现

    2024年02月04日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包