多表查询实训

前提

本篇博客,我将通过讲解例题的方式,带大家进一步掌握多表查询的使用规则和使用技巧

正文

前提

先建好表   表1 salgrade (薪资等级表) 表2 emp(员工信息表) 表3 dept(部门信息表),插入相关数据,我使用DataGrip 图像化界面工具,使用SQL语句,来操作。

表1 salgrade (薪资等级表)

grade 等级,losal 最低工资,hisal 最高工资

注意,表1 中添加主键约束 id 和 表1 dept_id  表2 id 是外键约束关系

表2 emp (员工信息表)

job 职位,salary  薪资 , entrydate 入职时间 managerid  直属领导 ,dept_id  工作位置编号 

由于我在建完表后,添加外检约束后,再插入数据。这一过程中,总是报违法外检约束错误,所以我将emp 表中的dept_id 全部设置为 null,后面再做更改

更改的语法:update  表名  set 字段=值  where条件;

表3 dept(部门信息表)

id 编号,name  工作地方名字

例题

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

思路,该题涉及2 张表 emp(员工信息表) dept(部门信息表),同时还要使用隐式内连接

内连接:两张表取交集,也就是公共数据的部分 

我们知道,内连接分为两种 隐式内连接,显示内连接

隐式内连接语法:select  字段列表 from  表1, 表2  where 连接条件 and   其他条件;

连接条件:两张表中有联系的字段之间的组合比如通常是表1.id=表2.id。这样的形式。

显示内连接语法:select  字段列表  from 表1 (inner) join  表2  on  连接条件 where 条件;

代码如下

select  e.name ,e.age ,e.job,d.name   from emp e,dept d where e.dept_id =d.id ;

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

思路:本题使用 emp表(员工信息表) dept表(部门信息表),同时要求使用显示内连接

内连接:两张表取交集,也就是公共数据的部分

显示内连接语法: select  字段列表  from 表1(inner)  join  表2  on  连接条件 where 条件;

代码如下

select  e.name ,e.age ,e.job,d.name   from emp e join dept d on  e.dept_id =d.id where e.age <30;

注意:如果出现重复数据,可以使用distinct 去重。

3 查询 所有年龄大于30 岁的员工,及其归属的部门,如果员工没有分配部门,也要显示

由于,现在的emp表中没有 员工,未分配部门,所以,我重新添加了数据

insert into emp values ( 9,'田明',42,'职员',26000,'2000-10-1',4,null),
                       (10,'轩龙',39,'职员',20000,'2000-1-1',4,null );

思路:本题,使用 表1 emp ,表2 dept  。条件是年龄大30 ,同时还要查询没有分配的员工信息,所以使用外连接

外连接:两张表取任意一张表的全部,当然还包括他们公共的部分。

根据外连接查询的结果,分为左外连接,右外连接

左外连接语法:select  字段列表 from  表1 left  join  表2  on 连接条件 where 条件

提示:我们查询的是 left  左边的表 ,也就是表1.

右外连接语法:select  字段列表 from  表1 right  join  表2  on 连接条件 where 条件

提示:我们查询的是   表1 right  ,也就是表2 。

代码如下

select e. *,d2 .name from emp e left join day02.dept d2 on d2.id = e.dept_id where e.age >30;

4查询所有员工的工资等级

思路 :本题使用了 emp表, salgrade (薪资等级表)我们要查询员工的工资等级,就要知道这两张表的关系,如要知道工资等级,就是要通过比较 salgrade 中最小值和最大值,通过比较他们,来判断,是在哪一等级。

连接条件:emp.salary >=salgrade .losal and  emp.salary <=salgrade.hisal

代码如下

解法1 select e.name, s.grade from emp e,salgrade s where e.salary>=s.losal and e.salary<=s.hisal;

解法2  select e.name, s.grade from emp e,salgrade s where e.salary   between  s.losal and s.hisal;

5 查询策划部的所有员工的信息及工资等级

思路:本题,涉及三张表分别是 emp (员工信息表) ,salgrade (薪资等级表) ,dept(部门信息表)

emp(员工信息表)和dept(部门表)的连接条件:emp.dept_id=dept.id

emp和salgrade (薪资等级表)连接条件:emp.salary >=salgrade .losal emp.salary <=salgrade.hisal。同时我们要通过emp 表和 dept 表 ,得到策划部的员工信息,作为一张新的表。

代码如下

解法1 

select  e1.*, s.grade   from  (select e.*  from emp e ,dept d where e.dept_id=d.id and d.name='策划部') e1,salgrade s where e1.salary>=s.losal and e1.salary<=s.hisal;

解法2 

代码如下

select e.*,s.grade from emp e ,dept d ,salgrade s where e.dept_id=d.id and( e.salary between s.losal and s.hisal  )and d.name='策划部';

6 查询企划部 员工的平均工资

思路:本题 关联 emp表和dept表,通过内连接和外连接度可以。

内连接用法-隐式内连接

代码如下

select d.name, avg(e.salary) from emp e,dept d where e.dept_id=d.id and d.name='企划部';

外连接用法-左外连接

代码如下

select d.name, avg(e.salary) from emp  e   left join dept d on  e.dept_id=d.id where d.name='企划部';

7 查询工资比 刘敏高的员工信息

思路:本题 只涉及  emp表(员工信息表)

标量子查询

a 先求的员工刘敏的工资

代码如下:select e.salary from emp e where e.name='刘敏';

b 把求得刘敏工资作为条件,最终得到 比刘敏工资高的 员工信息

代码如下:select *from emp where salary>(select e.salary from emp e where e.name='刘敏');

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

思路 :本题涉及emp表,标量子查询

标量子查询

a 查询平均薪资

代码如下:select avg(salary ) from emp ;

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

代码如下:select *from emp where salary>(select avg(salary ) from emp );

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

错误思路,发现最后结果不对。因此仅供参考,

思路 本题涉及 emp 表 和dept表 连接条件: emp.dept_id=dept.id  同时 由于题目中,并没有指定具体是哪个部门,我们不妨先假设是企划部

a 查询本部门的平均薪资,我假定是 企划部

代码如下:

select avg(e.salary) from emp e,dept d where e.dept_id=d.id and d.name='企划部';

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

先假设是  低于企划部的员工信息 ,代码如下:

select *from  emp where salary< (select avg(e.salary) from emp e,dept d where e.dept_id=d.id and d.name='企划部');

通过代码可以发现,通过改变指定 部门就可以,所以这里使用了列子查询。

代码如下

select e1.*,((select avg(e.salary) from emp e,dept d where e.dept_id=d.id and (d.name in(select dept.name from dept )))) '该部门平均薪资' from emp e1 where salary< (select avg(e.salary) from emp e,dept d where e.dept_id=d.id and (d.name any(select dept.name from dept ))); 运行报错

正确解法

我同样是假设部门id=1 求平均薪资

代码如下:select  avg(e1.salary) from emp  e1  where e1.dept_id=1;

可以是dept_id =1 也可以是2 等等

select  avg(e1.salary) from emp  e1  where e1.dept_id=2;

从这可以看出 在emp表中 当你要得到 id=1 所属部门的平均薪资,你要将id=1 那一行的dept_id 的值传进去,才行。因此代码如下

select e2.*,((select  avg(e1.salary) from  emp e1 where e1.dept_id=e2.dept_id)) '平均薪资' from emp e2 where e2.salary<(select  avg(e1.salary) from  emp e1 where e1.dept_id=e2.dept_id);

10 查询所有部门的信息,并统计部门的员工人数

思路:本题中有emp表和dept ,其中emp表是作为子查询参与,并充当外层SQL语句的字段使用的

代码如下:select * ,(select count(* )from emp where dept_id=dept.id ) '人数' from dept ;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图形处理单元(GPU)在现代计算中的应用与挑战(研究论文框架)

摘要:随着高性能计算需求的日益增长,图形处理单元(GPU)已从专业的图形渲染处理器转变为具有高性能并行处理能力的多功能计算平台。本文将探讨GPU的核心优势、编程模型、在不同领域的应用以及面临的挑战和限制。此外,还将讨论GPU技术的未来发展趋势和潜在的研究机会。 关键…

算法-位运算基础

文章目录 前置知识1. 交换两个数2. 比较两个数的大小3. leetcode268 寻找缺失的数字4. leetcode136 只出现一次的数字5. leetcode260 只出现一次的数字|||6. leetcode137 只出现一次的数字||7. 2/3的幂8. 大于等于该数字的最小2的幂9. leetcode201 数字范围按位与10. 位运算中分…

昇思MindSpore学习笔记4--数据集 Dataset

昇思MindSpore学习笔记4--数据集 Dataset 摘要&#xff1a; 昇思MindSpore数据集Dataset的加载、数据集常见操作和自定义数据集方法。 一、数据集 Dataset概念 MindSpore数据引擎基于Pipeline 数据预处理相关模块&#xff1a; 数据集Dataset加载原始数据&#xff0c;支持文本…

C#测试调用DotnetSpider爬取网页内容

微信公众号“DotNet”的文章《.NET快速实现网页数据抓取》介绍了调用开源网页爬取模块DotnetSpider爬取cnblog网站文章的基本方式。之前学习过使用HtmlAgilityPack抓取并分析网页内容&#xff0c;DotnetSpider也依赖HtmlAgilityPack模块&#xff0c;不过前者属于轻量、高效的爬…

基于OrangePi AIpro + owncloud 5分钟搭建一个私有网盘

OrangePi AIpro自带镜像系统已预装了docker&#xff0c;这里我们直接基于docker安装owncloud。 准备 切换用户&#xff1a; HwHiAiUser 默认密码&#xff1a;Mind123 su HwHiAiUser 创建文件夹 sudo mkdir /home/SummerGao/owncloud-docker-server 切换至刚创建的文件夹下…

1,Windows-本地Linux 系统(WSL)

目录 第一步电脑设置 第二步安装Ubuntu 第三文件传递 开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。 通过适用于 Linux 的 Windows 子系统 (WSL)&#xff0c;开发人员可以安装 Linux 发行版&#xff08;例如 Ubuntu、OpenSUSE、Kali、Debian、Arc…

AI赋能影视解说:Rap说唱玩法拆解!

在影视解说的领域&#xff0c;竞争一直非常激烈&#xff0c;众多创作者纷纷涌入这个热门的赛道。为了在众多声音中脱颖而出&#xff0c;创新成为了关键。最近&#xff0c;一种结合AI技术的解说方式——Rap说唱解说&#xff0c;以其新颖的形式和高效的创作过程&#xff0c;赢得了…

input子系统学习(一)

1、输入子系统框架 2、编写一个简单的设备驱动层代码 #include<linux/module.h> #include<linux/init.h> #include<linux/input.h> #include<linux/time.h>struct input_dev *my_input_dev;static void timer_function(struct timer_list *t); DEFINE…

【android 9】【input】【9.发送按键事件3——Inputchannel的创建过程】

系列文章 本人系列文章-CSDN博客 目录 系列文章 目录 1.简介 1.1 主要步骤 1.2 时序图 2.源码分析 2.1 WindowManagerImpl的addView 2.2 WindowManagerGlobal的addView 2.3 ViewRootImpl 2.4 getWindowSession 2.5 WMS中的openSession 2.6 Session 2.7 class W 2.…

【旭日x3派】部署官方yolov5全流程

地平线旭日x3派部署yolov5--全流程 前言一、深度学习环境安装二、安装docker三、部署3.1、安装工具链镜像3.2、配置天工开物OpenExplorer工具包3.3、创建深度学习虚拟空间&#xff0c;安装依赖&#xff1a;3.4、下载yolov5项目源码并运行3.5、pytorch的pt模型文件转onnx3.6、最…

【接口自动化测试】第三节.实现项目核心业务接口自动化

文章目录 前言一、实现登录接口对象封装和调用 1.0 登录接口的接口测试文档 1.1 接口对象层&#xff08;封装&#xff09; 1.2 测试脚本层&#xff08;调用&#xff09;二、课程新增接口对象封装和调用 2.0 课程新增接口的接口测试文档 2.1 接口对象层…

(单机版)神魔大陆|v0.51.0|冰火荣耀

前言 今天给大家带来一款单机游戏的架设&#xff1a;神魔大陆v0.51.0:冰火荣耀。 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; (单机版)神魔大陆 下面我将详细的教程交给大家&#xff0c;请耐心阅…

gemini 1.5 flash (node项目)

https://www.npmjs.com/package/google/generative-ai https://ai.google.dev/pricing?hlzh-cn https://aistudio.google.com/app/apikey https://ai.google.dev/gemini-api/docs/models/gemini?hlzh-cn#gemini-1.5-flash https://ai.google.dev/gemini-api/docs/get-started…

【漏洞复现】学分制系统GetTimeTableData SQL注入

0x01 产品简介 学分制系统由上海鹏达计算机系统开发有限公司研发&#xff0c;是基于对职业教育特点和需求的深入理解&#xff0c;结合教育部相关文件精神&#xff0c;并广泛吸纳专家、学者意见而开发的一款综合性管理系统。系统采用模块化的设计方法&#xff0c;方便学校根据自…

[CAN] Intel 格式与 Motorola 格式的区别

编码格式 数据传输规则一、Intel 格式编码二、Motorola 格式编码三、分析总结🙋 前言 CAN 总线信号的编码格式有两种定义:Intel 格式与 Motorola 格式。究竟两种编码格式有什么样的区别呢?设计者、dbc 文件编辑者或者测试人员又该如何判断两种格式,并进行有效正确的配置和解…

独家原创 | Matlab实现CNN-Transformer多变量时间序列预测

SCI一区级 | Matlab实现BO-Transformer-GRU多变量时间序列预测 目录 SCI一区级 | Matlab实现BO-Transformer-GRU多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-Transformer多变量时间序列预测&#xff1b; 2.运行环境为Matlab2023b…

Android Focused Window的更新

启动App时更新inputInfo/请求焦点窗口流程&#xff1a; App主线程调ViewRootImpl.java的relayoutWindow()&#xff1b;然后调用到Wms的relayoutWindow()&#xff0c;窗口布局流程。焦点窗口的更新&#xff0c;通过WMS#updateFocusedWindowLocked()方法开始&#xff0c;下面从这…

熟练掌握爬虫技术

一、Crawler、Requests反爬破解 1. HTTP协议与WEB开发 1. 什么是请求头请求体&#xff0c;响应头响应体 2. URL地址包括什么 3. get请求和post请求到底是什么 4. Content-Type是什么1.1 简介 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;…

安全架构概述_1.信息安全面临的威胁

在当今以计算机、网络和软件为载体的数字化服务几乎成为人类赖以生存的手段。与之而来的计算机犯罪呈现指数上升趋势&#xff0c;因此&#xff0c;信息的可用性、完整性、机密性、可控性和不可抵赖性等安全保障显得尤为重要&#xff0c;而满足这些诉求&#xff0c;离不开好的安…

微调Llama2自我认知

一、概述 最近在学习了解大模型微调相关的内容&#xff0c;在学习的过程中也遇到了很多问题&#xff0c;所以将自己的学习过程记录下来&#xff0c;希望对大模型微调感兴趣的小伙伴提供一点帮助&#xff0c;本文主要介绍一下如何通过SFT微调Llama2的自我认知&#xff0c;先看一…