SQL基础—2

1.左外连接查询(left join on)

A - A∩B 左外连接查询两张表条件都满足的数据,以及左边表(A表)存在的数据(以左边表为主查询表)。
A - A∩B (A和A交B)。

示例:使用左外连接将dept表作为主查询表,查询员工编号、员工姓名、部门名称。观察内连接和左外连接有啥区别?

步骤:

  1. 列出查询关键字。select、from、leftjoin on.
  2. 确定要查询的表名称。例如:from emp inner join dept
  3.  使用on关键字进行条件过滤。例如:on emp.deptno = dept.deptno
  4. 指定要查询的列。例如: emp.empno 员工编号,emp.ename 员工名称, dept.dname 部门名称

小结:

2 自连接查询

自连接查询将自己(emp表)连接自己(emp表)进行关联查询。多个关联查询的表是同一张表,通过取别名的方式
生成两张虚拟表。语法如下:

示例:查询每个员工编号、姓名、上司编号、上级姓名

步骤:

  1. 确定查询关键字 select、from、where
  2. 确定表名称 emp e1, emp e2
  3. 确定关联条件 e1.mgr = e2.empno
  4. 确定列名称 e1.empno 员工编号 ,e1.ename 员工姓名, e2.empno 上司编号 , e2.ename 上司姓名

核心步骤:员工表的上司编号字段关联上司表的员工编号字字段

3 合并查询查询   关键字:(union allunion

合并查询将多个查询结果集合并成一个

union all 和 union区别:

union all将多个查询结果集合并成一个结果集,不会去掉重复的数据
union将多个查询结果集合并成一个结果集,去掉重复的数据

步骤:

  1. 查询职位是“职员”的所有员工信息
  2. 查询部门编号为20的所有员工信息
  3. 将上面两个查询的结果集使用union all关键字合并成一个结果集

查询结果如下:

小结:上面的查询编号769的员工出现了两次,union all没有去掉两个结果集重复的数据 。

为了解决上面的问题,我们可以使用union关键字去掉结果集里面重复的数据

使用union进行合并查询,去掉了结果集重复的数据。查询结果如下

小结:

  1. 合并查询里面的每个select语句后面的列名称必须相同,否则执行报错
  2. union能够去掉多个结果集中重复的数据
  3. union all由于没有去重,所以效率高于union

4.子查询

在一个查询语句中嵌套一个查询语句叫做子查询,所有的子查询都包含在父查询的一对小括号里面。子查询通常可以出现在以下几个地方:where之后、having之后、from之后、from之前。子查询返回的结果集有三种:(单行单列)、多(多行单列)、(多行多列) 。

单行单列子查询

单行单列子查询通常定义在父查询的where关键字后面作为父查询行过滤的条件

示例:查询工资高于公司平均工资的所有员工

分析:公司平均工资我们不知道,先查询平均工资,然后嵌入到父查询

步骤:

  1. 定义查询语句需要的关键字 select、from、where
  2. 在from后面定义父查询的表名称 emp
  3. 在where后面确定父查询条件 where 工资高于公司平均工资
  4. 在select确定要查询的列名称

查询结果

多行单列子查询

多行单列子查询作为一个伪列定义在父查询的from关键字之前

示例:查询员工编号、员工名称、员工所在部门

1.多表联合查询

2.使用将“员工所在部门”字段作为子查询产生一个伪列,嵌入到父查询中

  1.  定义父查询需要的关键字 select、from
  2. 在父查询的from后面定义要查询的表名称
  3. 在父查询的select后面定义要查询的列
  4. 在父查询的select后面定义子查询
  5. 定义子查询需要的关键字 select、from、where
  6. 在子查询的from后面定义要查询的表名称
  7. 在子查询的where后面定义条件
  8. 在子查询的select后面定义要查询的列

查询结果

 多行多列子查询

多行多列子查询通常作为一张伪表(为了增加查询语句的可读性,通常会为伪表定义表别),定义在父查询的from关键字之后

示例:查询平均工资高于2000的职位名称和职位平均工资

两种方法1.使用group by对“职位”字段进行分组,然后使用having关键字后面定义条件(平均工资高于2000)

. 这种方式能够查询到正确的结果集,但是聚合函数avg使用了两次,很影响程序执行的性能。
 解决方案:将上一个示例的select、from、group by作为子查询嵌入到父查询中。

2.having 关键字工作中效率比较低,可以先使用子查询计算职位名称和职位平均工资,然后将子查询合入到父查询,最后在父查询的where后面定义条件(平均工资高于2000)

示例:查询部门编号、部门名称、部门位置、部门人数、部门平均工资

分析:前三列都是部门表(dept)的基础列,后两列需要在员工表需要在聚合函数中进行计算。将员工表需要计算的字段作为子查询生成一张伪表,嵌入到父查询的dept表中

示例:查询出所有在销售部工作的员工编号、姓名、基本工资、奖金、职位、入职日期、部门最高和最低工资

该示例可以分成两段

  • 查询出所有在销售部工作的
  • 员工编号、姓名、基本工资、奖金、职位、入职日期、部门最高和最低工资

 要查询的字段都在emp表,其中 员工编号 、 姓名 、 基本工资 、 奖金 、 职位 、 入职日期 是基础字段, 部门最高工资 、 部门最低工资 这两个字段是需要使用聚合函数进行计算的。我们把需要计算的字段作为子查询的伪表嵌入到父查询

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

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

相关文章

R语言贝叶斯:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析

原文链接:R语言贝叶斯:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247625527&idx8&snba4e50376befd94022519152609ee8d0&chksmfa8daad0cdfa23c6…

如何自学机器学习?

自学机器学习可以按照以下步骤进行: 一、基础知识准备 数学基础: 高等数学:学习微积分(包括导数、微分、积分等)、极限、级数等基本概念。这些知识是后续学习算法和优化方法的基础。 线性代数:掌握矩阵…

wpf 制作丝滑Flyout浮出侧边栏Demo (Mahapps UI框架)

Flyout 属性 CloseButtonVisibility: 设置为 Collapsed,意味着关闭按钮不可见。TitleVisibility: 设置为 Collapsed,意味着标题不可见。IsPinned: 设置为 True,意味着这个 Flyout 会固定住,不会自动关闭。Opacity: 设置为 1&…

6个步骤,轻松搞定Linux上web UI自动化测试!

对于web端的UI自动化,相信大家都不会陌生,因为很多小伙伴都做过,或者了解到过,但是小编相信,大多数了解到的都是通过windows系统上进行运行web端的UI自动化,在linux上面很少运行UI自动化或者如何执行自动化…

[论文阅读]Label-Only Membership Inference Attacks

Label-Only Membership Inference Attacks Proceedings of the 38th International Conference on Machine Learning Label-Only Membership Inference Attacks 只使用硬标签就可以判断是否是成员的方法,但是是在机器学习模型上。 通过分析模型在扰动下的预测标…

万宇科技闪耀创新舞台 荣膺潜在独角兽企业殊荣

2024年10月24日,在“2024东北亚(沈阳)人才交流大会暨中国潜在独角兽企业发展大会”上,长城战略咨询重磅发布《GEI中国潜在独角兽企业研究报告2024》,揭示了中国潜在独角兽企业群体的最新发展态势。其中,安徽万宇机械设备科技有限公…

Java Iterator 实现杨辉三角

一、问题描述 杨辉三角定义如下: 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 4 6 4 1/ \ / \ / \ / \ / \ 1 5 10 10 5 1 把每一行看做一个list,试写一个 Iterator,不断输出下一行的 list&#xf…

解决注册Kaggle出现的“Captcha must be filled out”问题

首先,出现这个问题后,就搜索了一下别的博主的方法。 使用header editor 插件 首先,下载扩建: 然后进行重定向: 管理之后,输入下面的地址,然后下载-保存: 但是,这条显然…

【Python】 select模块详解 所有程序猿必看!!!

要理解select.select模块其实主要就是要理解它的参数, 以及其三个返回值。 select()方法接收并监控3个通信列表, 第一个是所有的输入的data,就是指外部发过来的数据,第2个是监控和接收所有要发出去的data(outgoing data),第3个监控错误信息 在网上一直在…

JavaIO流操作

目录 简介 字节输入流 获取字节输入流 读 关闭输入流 字节输出流 获取字节输出流 写 换行符 刷新 关闭输出流 字符流输入流 获取字符输入流 读 关闭输入流 字符输出流 获取字符输出流 写 换行符 刷新 关闭输出流 简介 IO流分为两大派系: …

大数据之Hadoop集群

Hadoop集群介绍?Hadoop集群的优缺点及应用场景?Hadoop集群搭建?Hadoop架构? Hadoop集群介绍 Hadoop集群是由多台计算机(节点)组成的一个分布式计算系统,主要用于处理大规模的数据集。以下是对Ha…

项目推荐:指针切换器

小编的inscode部署项目:割绳子游戏。 更多精彩内容见InsCode - 让你的灵感立刻落地~ 介绍一下项目。 引言 在现代用户界面设计中,鼠标指针的样式和行为对用户体验有着重要的影响。传统的鼠标指针样式(如箭头、手形、等待图标等&#xff09…

D-ID 推出能模仿用户的头部动作以及实时互动的 AI 头像

D-ID 宣布推出两种新型 AI 头像 — — Express 和 Premium,旨在提升内容创作的灵活性和人性化。这些头像将为企业在营销、销售和客户支持等领域的视频制作提供便利。用户只需少量文本输入和视觉数据,即可生成更自然的商业视频。 Express 头像可以通过约一…

【C++系列】-----------内存管理

c内存管理(涉及:数据在内存中的分布、new和delete使用、动态内存管理等) 文章目录 c内存管理(涉及:数据在内存中的分布、new和delete使用、动态内存管理等)前言一、C/C内存分布二、C中动态内存管理2.1、 ne…

SpringBoot框架:作业管理系统构建之道

摘 要 使用旧方法对作业管理信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在作业管理信息的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。 这次开发的作业管理系统有管…

Linux字体更新 使用中文字体

问题描述,处理之前,中文乱码 处理后的结果 压缩需要上传的字体: 上传到LInux的字体目录,上传后解压出来 刷新字体: fc-cache -fv 测试是否正常 fc-list | grep "FontName"如果还不行 可以在代码里面指定字…

【书生.浦语实战营】——入门岛

【书生.浦语实战营】——入门岛_第一关_Linux基础 任务分布1. 本地vscode远程连接并进行端口映射端口映射What——何为端口映射How——怎么进行端口映射 2. Linux基础命令touch :创建文件mkdir :创建目录cd:进入 退出 目录pwd :确定当前所在目录cat:可以…

VirtualBox 解决虚拟机Cable Unplugged 无法上网问题

问题描述 VirtualBox 中的虚拟机无法上网,在虚拟机中查看网络设置显示 Cable Unplugged。 解决方案 选择VirtualBox 上方任务栏的控制->设置->网络,勾选接入网线即可解决。

win10下MMSegmentation自定义数据集

下载1.2.1版本: Releases open-mmlab/mmsegmentation GitHub 安装环境 本地torch环境为1.9.1 pip install -U openmim mim install mmengine mim install "mmcv>=2.0.0" 报mmcv版本不匹配的问题,形如:MMCV==X.X.X is used but incompatible. Please inst…

CSS网格布局

前言 希望元素按照网格的方式进行布局,最简单的方式就是利用网格布局,如图所示: 网格布局 设置网格布局的核心属性: ① display: grid 设置容器为网格布局容器(如果希望设置行内的网格容器,可以设置disp…