五、多表查询-4.6练习

一、准备数据

 

【效果展示】

 emp1表(员工表):

 dept1表(部门表): 

 salgrade表(薪资等级表):

二、案例

 1、查询员工的姓名、年龄、职位、部门信息(隐式内连接) 

2、查询 年龄小于30岁的 员工姓名、年龄、职位、部门信息(显式内连接

 

3、查询拥有员工的部门ID、部门名称(内连接

id为6人事部下没有员工 —> 要查拥有员工的部门信息  —> 部门表和员工表交集部分的数据

(1)查询员工和部门的交集

(2)对结果去重:distinct

 

4、查询所有年龄大于40岁的员工,及其归属的部门名称;如果员工没有分配部门,也需要展示出来(外连接

5、查询所有员工的工资等级           没有外键关联

-- 表结构:emp1, salgrade
-- 连接条件:emp1.salary >= salgrade.losal    and    emp1.salary <= salgrade.hisal
-- 内连接:select ... from 表1, 表2 where 连接条件

6、查询“研发部”所有员工的信息及工资等级

-- 表结构:emp1, dept1, salgrade
-- 连接条件:emp1.salary between salgrade.losal and salgrade.hisal, emp1.dept_id = dept1.id
-- 内连接:select ... from 表1, 表2 where 连接条件
-- 查询条件:dept1.name = '研发部'

 【代码格式化】

7、查询“研发部”员工的平均工资(聚合函数avg()

-- 表结构:emp1, dept1
-- 连接条件:emp1.dept_id = dept1.id
-- 内连接:select ... from 表1, 表2 where 连接条件
-- 查询条件:dept1.name = '研发部'
-- 平均数的聚合函数:avg()

【聚合函数复习】

8、查询工资比“灭绝”高的员工信息(子查询-标量子查询

-- a.查询灭绝的薪资

-- b.查询比她工资高的员工数据

 9、查询比平均薪资高的员工信息

-- a.查询平均薪资   聚合函数avg()

-- b.查询比平均薪资高的员工信息    子查询-标量子查询

10、查询低于本部门平均工资的员工信息

-- a.查询指定部门平均薪资(特殊值:1)

-- b.查询低于本部门平均工资的员工信息

11、查询所有的部门信息,并统计部门的员工人数(select后-子查询

-- a.统计ID为1的部门的员工人数   聚合函数count()

-- b.查询所有部门信息

-- c.统计所有部门的员工人数  子查询-标量子查询

12、查询所有学生的选课情况,展示出学生名称、学号、课程名称 (三表联查

-- 表结构:student, course, student_course
-- 连接条件:student.id = student_course.studentid, course.id = student_course.courseid
-- 内连接:select ... from 表1, 表2 where 连接条件 

【数据准备】

-- 多表关系演示(多对多)
create table student(id int auto_increment primary key comment '主键ID',name varchar(10) comment '姓名',no varchar(10) comment '学号'
) comment '学生表';
insert into student
values (null, '黛绮丝', '2000100101'),(null, '谢逊',   '2000100102'),(null, '殷天正', '2000100103'),(null, '韦一笑', '2000100104');create table course(id int auto_increment primary key comment '主键ID',name varchar(10) comment '课程名称'
) comment '课程表';
insert into course
values (null, 'Java'),(null, 'PHP'),(null, 'MySQL'),(null, 'Hadoop');create table student_course(id int auto_increment comment '主键' primary key ,studentid int not null comment '学生ID',courseid int not null comment '课程ID',constraint fk_courseid foreign key (courseid) references course(id),constraint fk_studentid foreign key (studentid) references student(id)
) comment '学生课程中间表';
insert into student_course
values (null, 1, 1),(null, 1, 2),(null, 1, 3),(null, 2, 2),(null, 2, 3),(null, 3, 4);

【效果】

student表: 

course表:

student_course表:

【表关系查看】

 

 【代码】

-- -------------------------------- 多表查询练习 --------------------------------
-- 准备数据
create table salgrade(grade int,losal int,hisal int
) comment '薪资等级表';insert into salgrade values (1, 0, 3000);
insert into salgrade values (2, 3001, 5000);
insert into salgrade values (3, 5001, 8000);
insert into salgrade values (4, 8001, 10000);
insert into salgrade values (5, 10001, 15000);
insert into salgrade values (6, 15001, 20000);
insert into salgrade values (7, 20001, 25000);
insert into salgrade values (8, 25001, 30000);-- 1、查询员工的姓名、年龄、职位、部门信息(隐式内连接)
--    select ... from 表1, 表2 where 连接条件
select e.name, e.age, e.job, d.name from emp1 e, dept1 d where e.dept_id = d.id;-- 2、查询 年龄小于30岁的 员工姓名、年龄、职位、部门信息(显式内连接)
--    select ... from 表1 join 表2 on 连接条件
select e.name, e.age, e.job, d.name from emp1 e join dept1 d on e.dept_id = d.id where e.age < 30;-- 3、查询拥有员工的部门ID、部门名称(内连接)
--       a.查询员工和部门的交集——内连接
select d.id, d.name from emp1 e, dept1 d where e.dept_id = d.id;
--       b.对结果去重:distinct
select distinct d.id, d.name from emp1 e, dept1 d where e.dept_id = d.id;-- 4、查询所有年龄大于40岁的员工,及其归属的部门名称;如果员工没有分配部门,也需要展示出来(外连接)
-- select ... from 表1 left join 表2 on 连接条件
select e.*, d.name from emp1 e left join dept1 d on e.dept_id = d.id where e.age > 40;-- 5、查询所有员工的工资等级      没有外键关联
--    表结构:emp1, salgrade
--    连接条件:emp1.salary >= salgrade.losal and emp1.salary <= salgrade.hisal
--    内连接:select ... from 表1, 表2 where 连接条件
select e.*, s.grade, s.losal, s.hisal from emp1 e, salgrade s where e.salary >= s.losal and e.salary <= s.hisal;
select e.*, s.grade, s.losal, s.hisal from emp1 e, salgrade s where e.salary between s.losal and s.hisal;-- 6、查询“研发部”所有员工的信息及工资等级
--    表结构:emp1, dept1, salgrade
--    连接条件:emp1.salary between salgrade.losal and salgrade.hisal, emp1.dept_id = dept1.id
--    内连接:select ... from 表1, 表2 where 连接条件
--    查询条件:dept1.name = '研发部'
select e.*, s.grade
from emp1 e,dept1 d,salgrade s
where e.dept_id = d.idand (e.salary between s.losal and s.hisal)and d.name = '研发部';-- 7、查询“研发部”员工的平均工资
--    表结构:emp1, dept1
--    连接条件:emp1.dept_id = dept1.id
--    内连接:select ... from 表1, 表2 where 连接条件
--    查询条件:dept1.name = '研发部'
--    平均数的聚合函数:avg()
select avg(e.salary) from emp1 e, dept d where e.dept_id = d.id and d.name = '研发部';-- 8、查询工资比“灭绝”高的员工信息
--    a.查询灭绝的薪资
select salary from emp1 where name = '灭绝';   -- 返回8500
--    b.查询比她工资高的员工数据
select * from emp1 where salary > (select salary from emp1 where name = '灭绝');-- 9、查询比平均薪资高的员工信息
--    a.查询平均薪资
select avg(emp1.salary) from emp1;    -- 返回10308.8235
--    b.查询比平均薪资高的员工信息
select * from emp1 where salary > (select avg(emp1.salary) from emp1);-- 10、查询低于本部门平均工资的员工信息
--    a.查询指定部门平均薪资(特殊值:1)
select avg(e.salary) from emp1 e where e.dept_id = 1;    -- 返回9800
--    b.查询低于本部门平均工资的员工信息
select emp1.*, (select avg(e.salary) from emp1 e where e.dept_id = emp1.dept_id) '平均薪资'
from emp1
where emp1.salary < (select avg(e.salary) from emp1 e where e.dept_id = emp1.dept_id);-- 11、查询所有的部门信息,并统计部门的员工人数(select后-子查询)
--    a.统计ID为1的部门的员工人数
select count(*) from emp1 where dept_id = 1;    -- 返回5
--    b.查询所有部门信息
select id, name from dept1;
--    c.统计所有部门的员工人数
select dept1.id, dept1.name, (select count(*) from emp1 where emp1.dept_id = dept1.id) '人数' from dept1;-- 12、查询所有学生的选课情况,展示出学生名称、学号、课程名称  (学生和课程是多对多的关系)1个学生可以选多个课程,1个课程也可以被多个学生选择
--    表结构:student, course, student_course
--    连接条件:student.id = student_course.studentid,  course.id = student_course.courseid
--    内连接:select ... from 表1, 表2 where 连接条件
select s.name, s.no, c.name from student s, course c, student_course sc where s.id = sc.studentid and c.id = sc.courseid;

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

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

相关文章

SpringBoot + layui 框架实现一周免登陆功能

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

MySQL的日志undolog、binlog、redolog

1. 日志层次 binlog是Server层&#xff0c;undolog和redolog是innodb引擎层特有的。 2. 记录了什么 & 作用 binlog 记录了所有数据库结构变更和表数据修改的SQL日志。 主要用于数据备份和主从复制&#xff0c;比如误删数据了可以用binlog找回。 undolog 如下图&#…

Verilog 实现状态机自动售卖机

Verilog 实现状态机自动售卖机 教学视频&#xff1a;https://www.bilibili.com/video/BV1Ve411x75W?p33&spm_id_frompageDriver&vd_source19ae31dff4056e52d2729a4ca212602b 功能需求 使用1元、2元、5元面值的纸币进行支付&#xff0c;获取6元的物品&#xff0c;不设…

在el-tree懒加载中进行局部刷新

在进行懒加载的树组件中&#xff0c;操作子节点新增、修改以及删除操作时&#xff0c;需要对树组件进行局部刷新&#xff1a; /* 懒加载 */ async loadNode(node, resolve) {if (node.level 0) {// 异步加载根节点数据const data await fn({ parentId: });resolve(data);thi…

linux中学习控制进程的要点

1. 进程创建 1.1 fork函数 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1 进程调用fork&#xff0c;当控制转移到内核中的fork代码后&#xff0c;内核会做以下操作 分配新的内存块和…

19.CSS雨云动画特效

效果 源码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Cloud & Rain Animation</title><link rel="stylesheet" href="style.css"> </head> <bo…

专题:平面、空间直线参数方程下的切线斜率问题

本文研究平面、空间直线在参数方程形式下&#xff0c;切线斜率&#xff08;即导数&#xff09;如何表示的问题。 如上图所示。 设 y f ( x ) &#xff0c; x φ ( t ) &#xff0c; y ψ ( t ) 当 t t 0 时&#xff0c; x x 0 &#xff0c; y y 0 &#xff0c;即点 A 坐…

最简单vue获取当前地区天气--高德开放平台实现

目录 前言 一、注册成为高德平台开发者 二、注册天气key 1.点击首页右上角打开控制台 2.创建新应用 三、vue项目使用 1.打开vue项目找到public下的index.html&#xff0c;如果是vue3的话直接在主目录打开index.html文件就行&#xff0c;主要就是打开出口文件 ​编辑 2.根据高德…

元矿山下的音视频应用

// 近年来&#xff0c;矿业的技术和管理模式随着元宇宙的火爆和自动驾驶技术的发展逐渐变化、升级&#xff0c;进而衍生出元矿山的概念&#xff0c;音视频技术也在其中成为了关键一环。LiveVideoStackCon 2023 上海站邀请了来自希迪智驾的任思亮&#xff0c;为大家分享希迪智…

无限计算力:探索云计算的无限可能性

这里写目录标题 前言云计算介绍服务模型&#xff1a; 应用领域&#xff1a;云计算主要体现在生活中的地方云计算未来发展的方向 前言 云计算是一种基于互联网的计算模型&#xff0c;通过它可以实现资源的共享、存储、管理和处理。它已经成为许多个人、企业和组织的重要技术基础…

MySQL数据库学习【基础篇】

&#x1f4c3;基础篇 下方链接使用科学上网速度可能会更加快一点哦&#xff01; 请点击查看数据库MySQL笔记大全 通用语法及分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的…

mybatis与spring集成与spring aop集成pagehelper插件

Mybatis与Spring的集成 Mybatis是一款轻量级的ORM框架&#xff0c;而Spring是一个全栈式的框架&#xff0c;二者的结合可以让我们更加高效地进行数据持久化操作。 Mybatis与Spring的集成主要有两种方式&#xff1a;使用Spring的Mybatis支持和使用Mybatis的Spring支持。 使用…

再获殊荣 | 美格智能高算力AI模组SNM970荣获物联网行业“通信技术创新奖”

8月28日&#xff0c;由高科技行业门户OFweek维科网主办的OFweek 2023&#xff08;第八届&#xff09;物联网产业大会暨评选颁奖典礼在深圳福田会展中心隆重举行。会上正式公布了OFweek 2023&#xff08;第八届&#xff09;物联网与人工智能行业年度评选奖项&#xff0c;美格智能…

springmvc没有绿标,怎么配置tomcat插件运行?

一、添加插件后&#xff0c;刷新&#xff0c;自动从maven仓库下载tomcat插件 二、写好项目后&#xff0c;添加tomcat配置 三、即可点击绿标运行

flutter高德地图大头针

1、效果图 2、pub get #地图定位 amap_flutter_map: ^3.0.0 amap_flutter_location: ^3.0.0 3、上代码 import dart:async; import dart:io;import package:amap_flutter_location/amap_flutter_location.dart; import package:amap_flutter_location/amap_location_option…

用变压器实现德-英语言翻译【02/8】: 位置编码

一、说明 本文是“用变压器实现德-英语言翻译”系列的第二篇。它从头开始引入位置编码。然后&#xff0c;它解释了 PyTorch 如何实现位置编码。接下来是变压器实现。 二、技术背景 位置编码用于为序列中的每个标记或单词提供相对位置。阅读句子时&#xff0c;每个单词都依赖于它…

git 操作

merge操作 git checkout -b bugFix git commit //在bugFix branch上操作&#xff0c;并且commit git checkout main git commit //在main上操作&#xff0c;并且commit git merge bugFix //此时on main branch&#xff0c;如果在bugFix branch执行merge bugFix&#…

fastadmin think-queue supervisor配置

起因是微信支付回调需要同时做发货处理&#xff0c;但是发货接口不能影响,需要队列进行异步处理1. 1.fastadmin 后台购买queue插件(基于think-queue消息队列) 2.代码 2.1 添加文件&#xff1a;application---->extra--->queue.php 内容&#xff1a;我这里用的数据库做…

leetcode 42. 接雨水

2023.8.29 本题可以用双指针做&#xff0c;求出每一列能盛的雨水&#xff0c;再相加即可。不过暴力法会超时&#xff0c;需要优化。 双指针&#xff08;暴力&#xff09;&#xff1a; class Solution { public:int trap(vector<int>& height) {int ans 0;for(int …

(牛客周赛 9)C.小美的01串翻转

题目&#xff1a; 样例&#xff1a; 输入 10001 输出 8 思路&#xff1a; 这里是连续的找子串&#xff0c;权值的意思是 我们取反操作了多少次&#xff0c; 我们有假设长度是 5 &#xff0c;字符串是 10001 那么相邻不一样的字符串有两种情况 01010 或者 10101&#xf…