五、多表查询-4.6练习

news2024/12/23 4:52:15

一、准备数据

 

【效果展示】

 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.id
  and (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.coloradmin.cn/o/948879.html

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

相关文章

JUC详解

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱发博客的嗯哼&#xff0c;爱好Java的小菜鸟 &#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&#x1f44d;一下博主哦 &#x1f4dd;社区论坛&#xff1a;希望大家能加入社区共同进步…

leetcode 823. 带因子的二叉树(dp+双指针+Long类型)

leetcode 823. 带因子的二叉树(dp双指针Long类型) 题目表述 给出一个含有不重复整数元素的数组 arr &#xff0c;每个整数 arr[i] 均大于 1。 用这些整数来构建二叉树&#xff0c;每个整数可以使用任意次数。其中&#xff1a;每个非叶结点的值应等于它的两个子结点的值的乘积…

个人博客论坛系统测试报告

目录 一、项目介绍 二、测试计划 1、功能测试 &#xff08;1&#xff09;测试环境&#xff1a; &#xff08;2&#xff09;测试用例编写 &#xff08;3&#xff09;部分功能测试 2、自动化测试 &#x1f351;注册页面测试 验证注册成功的情况 验证注册失败的情况 &a…

WebDAV之π-Disk派盘 + 思源笔记

思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。 融合块、大纲和双向链接,重构你的思维。 π-Disk派盘 – 知识管理专家 派盘是一款面向个人和企业的本地云存储解决方案,它可以帮助用户打造“数字第二大脑”,并支持KMS知识管理系…

Qt自定义标题栏

一、创建项目 最终项目文件结构如下 “iconfont.tff”的使用方式见如下博客&#xff0c;用于更改图标颜色Qt更改图标颜色_怎么追摩羯座的博客-CSDN博客 二、MyTitleBar.pro #------------------------------------------------- # # Project created by QtCreator 2023-08-2…

antd upload组件beforeUpload返回promise之后,获取的文件不是file类型导致上传失败

之前的beforeUpload直接返回一个false值 &#xff0c;文件是可以正常与服务端进行传输的 beforeUpload: (file) > {return false},但是这样并不能阻止文件上传&#xff0c;看了官方文档后&#xff0c;改用返回promise对象上传 beforeUpload: (file) > {console.log(-befo…

Primeng table filter 重置条件

我用一个overlayPanel装了p-table&#xff0c;里面有个count的filter&#xff0c;但是我设置值之后&#xff0c;让overlayPanel消失&#xff0c;再出现的时候&#xff0c;明明已经重新设置了表里面的数据和filter的变量值&#xff0c;但是上一次的条件仍然在,旁边的文字filter依…

openGauss本地Centos7.6单机安装和简单应用

openGauss本地Centos7.6单机安装和简单应用 openGauss基础环境配置openGauss安装openGauss使用测试openGauss常用命令 openGauss基础环境配置 在VMware Workstation中安装一台 centos7.6 内存&#xff1a;8GB&#xff0c;亲测4GB安装不够 磁盘&#xff1a;测试50GB-100GB够用 …

谈了千百遍的数据一致性

今天来说一个老生常谈的问题&#xff0c;来看一个实际案例&#xff1a; 现有业务中往往都会通过缓存来提高查询效率&#xff0c;降低数据库的压力&#xff0c;尤其是在分布式高并发场景下&#xff0c;大量的请求直接访问Mysql很容易造成性能问题。 有一天老板找到了你… 老板…

四川玖璨电子商务有限公司:开抖店怎么运营

开抖店是一种越来越流行的创业方式&#xff0c;在社交媒体平台上开店销售各种商品&#xff0c;比如服装、配饰、美妆和家居用品等等。对于新手来说&#xff0c;他们可能会很关心自己开抖店能够多久出单。虽然这个问题没有一个固定的答案&#xff0c;但是以下是一些关键的运营方…

一文讲透:低代码平台是什么?低代码平台应该如何挑选?

低代码平台是什么&#xff1f;低代码平台的边界在哪&#xff1f;低代码平台的优势&#xff1f;低代码平台哪个好用&#xff1f;2023年有哪些国内值得关注的低代码平台&#xff1f;本文将深入浅出的带大家了解低代码平台&#xff0c;并且为大家带来2023年国内最热六款低代码平台…

【MySQL系列】-ORDER BY……HAVING详解及limit

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

【ELK日志收集系统】

目录 一、概述 1.作用 2.为什么使用&#xff1f; 二、组件 1.elasticsearch 1.1 作用 1.2 特点 2.logstash 2.1 作用 2.2 工作过程 2.3 INPUT 2.4 FILETER 2.5 OUTPUTS 3.kibana 三、架构类型 1.ELK 2.ELKK 3.ELFK 4.ELFKK 四、案例 - 构建ELK集群 1.环境…

【行为树】py_trees 学习笔记

学习资料 《Introduction to behavior trees》 1. 概念说明 1.1 Action&#xff1a;pt.behaviour.Behaviour 在一个行为树中&#xff0c;Action 是一个叶节点&#xff08;Leaf Node&#xff09;&#xff0c;它实际执行某种行为或任务&#xff0c;并返回成功、失败或运行中的…

微服务·架构组件之注册与发现

引言 微服务架构在现代软件开发中越来越受欢迎&#xff0c;它通过将系统拆分为多个小型、自治的服务来提高可维护性、可扩展性和灵活性。然而随着服务数量的增多&#xff0c;服务之间的通信何发现变得更加复杂。本报告旨在深入探讨微服务中的注册与发现&#xff0c;介绍其背景…

使用rem + sass + 媒体查询 进行横竖屏适配移动端项目

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、 媒体查询&#xff08;Media Query&#xff09;1.简单了解2.简单例子3. 语法&#xff08;1&#xff09;媒体类型&#xff08;mediatype &#xff09;&#xff0…

【黑科技】游戏开发程序员必备工具【一】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;效率…

MongoDB实验——在Java应用程序中操作 MongoDB 数据

在Java应用程序中操作 MongoDB 数据 1. 启动MongoDB Shell 2. 切换到admin数据库&#xff0c;使用root账户 3.开启Eclipse&#xff0c;创建Java Project项目&#xff0c;命名为MongoJava File --> New --> Java Project 4.在MongoJava项目下新建包&#xff0c;包名为mo…

【SpringBoot系列】 测试框架之@SpringBootTest的使用

SpringBootTest的详细介绍 SpringBootTest 是 Spring Boot 测试框架中的注解&#xff0c;用于标识一个测试类&#xff0c;以指示该类是一个 Spring Boot 应用程序的测试类。它允许你在测试环境中加载整个 Spring Boot 应用程序上下文&#xff0c;测试应用程序的各种组件、服务…

如何备考 PMP 考试?

一、PMP学习7步走攻略 ​1、熟悉考试大纲&#xff1a; PMP考试大纲是备考的基础&#xff0c;考生需要详细熟悉考试大纲&#xff0c;了解各个知识领域的重点和难点。 2、制定学习计划&#xff1a; 根据考试大纲和个人情况&#xff0c;制定学习计划&#xff0c;合理分配学习时间…