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

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

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

相关文章

【Java并发】乐观锁、悲观锁、CAS、版本号机制

前言 在现代计算机系统中,处理并发操作时,锁机制是至关重要的。本文将介绍乐观锁、悲观锁以及CAS(Compare and Swap)这三种常见的并发控制技术,帮助理解它们的原理和应用场景。 1.悲观锁 1.1 定义 悲观锁是一种在访…

【优选算法】——二分查找!

目录 1、二分查找 2、在排序数组中查找元素的第一个和最后一个位置 3、搜索插入位置 4、x的平方根 5、山脉数组的封顶索引 6、寻找峰值 7、寻找旋转排序数组中的最小值 8、点名 9、完结散花 1、二分查找 给定一个 n 个元素有序的(升序)整型数组…

Fooocus图像生成软件本地部署教程:在Windows上快速上手AI创作

文章目录 前言1. 本地部署Fooocus图像生成软件1.1 安装方式1.2 功能介绍 2. 公网远程访问Fooocus3. 固定Fooocus公网地址 前言 本篇文章将介绍如何在本地Windows11电脑部署开源AI生图软件Fooocus,并结合Cpolar内网穿透工具轻松实现公网环境远程访问与使用。 Foooc…

elasticSearch 7.12.1 Docker 安装ik分词

一、下载 https://github.com/infinilabs/analysis-ik/releases/tag/v7.12.1 将文件解压,复制到docker挂载的目录 docker ps#重启docker docker restart f7ec58e91f1f 测试 GET _analyze?pretty {"analyzer": "ik_max_word","text&qu…

智慧汇聚:十款企业培训工具打造学习型企业

在当今快速变化的商业环境中,企业要想保持竞争力,就必须不断适应新技术、新市场和新的工作方式。构建一个学习型企业,不仅能够促进员工的个人成长,还能增强团队的整体能力和企业的创新能力。为了实现这一目标,借助先进…

【Searxng】Searxng docker 安装

SearXNG将用户的查询请求分发至多个支持的搜索引擎,并收集返回的结果进行汇总处理。在这个过程中,它通过内置的过滤器功能屏蔽广告和其他不相关内容,确保搜索结果的纯净度。 一键部署 docker run \--name searxng \-p ????:8080 \-v ~/s…

FastAPI 请求体解析:基础概念与综合应用

FastAPI 请求体解析:基础概念与综合应用 本文深入探讨了 FastAPI 中的请求体概念,强调使用 Pydantic 模型来声明请求体数据结构。通过具体示例,展示了如何定义请求体、可选参数及默认值,提升数据验证和类型提示的便利性。文章还说…

Linux下的Debugfs

debugfs 1. 简介 类似sysfs、procfs,debugfs 也是一种内存文件系统。不过不同于sysfs一个kobject对应一个文件,procfs和进程相关的特性,debugfs的灵活度很大,可以根据需求对指定的变量进行导出并提供读写接口。debugfs又是一个Li…

【论文速读】Optimization-based Prompt Injection Attack to LLM-as-a-Judge

基于优化的提示词注入攻击 摘要引言问题描述LLM-as-a-judge威胁模型攻击者知道什么 JUDGEDECEIVER 细节概述生成影子候选回复公式化为优化问题Target-aligned generation lossTarget-enhancement lossAdversarial perplexity loss优化问题 求解优化问题 摘要 LLM-as-a-Judge 利…

单智能体carla强化学习实战工程介绍

有三个工程: Ray_Carla: 因为有的论文用多进程训练强化学习,包括ray分布式框架等,这里直接放了一个ray框架的示例代码,是用sac搭建的,obs没用图像,是数值状态向量值(速度那些)。 …

PD取电快充协议芯片,XSP08Q在灯具中的应用

前言 随着快充技术不断的发展 USB Type-C端口的普及 PD快充成了电子设备中的宠儿,在各种电子设备领域都能见到PD快充的身影,不得不说快充技术的出现让电子设备在充电的速度上得到前所未有的体验,大大的缩短了设备的充电时间。快充协议芯片不…

【AI开源项目】Botpress - 开源智能聊天机器人平台及其部署方案

文章目录 Botpress 概述Botpress 的定位 Botpress 的主要特点1. OpenAI 集成2. 易于使用3. 定制和扩展性4. 多平台支持5. 集成和扩展 API6. 活跃的社区和详尽的文档 部署方案集成集成开发集成部署机器人示例开发工具代理本地开发先决条件从源代码构建 Botpress 如何解决常见问题…

【天线&运输】交通事故严重程度检测系统源码&数据集全套:改进yolo11-HSFPN

改进yolo11-ASF-DySample等200全套创新点大全:交通事故严重程度检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.11.01 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系…

使用 Elastic、OpenLLMetry 和 OpenTelemetry 跟踪 LangChain 应用程序

作者:来自 Elastic Bahubali Shetti Langchain 应用程序的使用正在增长。构建基于 RAG 的应用程序、简单的 AI 助手等的能力正在成为常态。观察这些应用程序更加困难。考虑到现有的各种选项,本博客展示了如何将 OpenTelemetry 检测与 OpenLLMetry 结合使…

揭秘Scam-as-a-Service:警惕钓鱼攻击的产业化

2024年6月开始,CertiK安全团队监控到大量相似的phishing/drainer transaction,仅6月份监控到的涉案金额就超过5500万美元,进入8、9月份后,相关钓鱼地址的活动更加频繁,钓鱼攻击有愈演愈烈的架势。整个2024年第三季度&a…

前端Election

一.什么是Election 1.一款应用广泛的跨平台和桌面应用开发框架。 2.本质 Election的本质是结合了Chromium与Node.js 3.构建 使用HTML ,CSS,JS等Web技术构建桌面应用程序。 只要最后能转换成html css js即可 二.流程模型 1.主进程 关于node.js的任何api都在这里调用 一个纯…

如何在Linux系统中使用SSH进行安全连接

如何在Linux系统中使用SSH进行安全连接 SSH简介 安装SSH 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动SSH服务 验证SSH是否安装成功 SSH配置 配置监听端口 配置登录方式 SSH客户端 安装SSH客户端 使用SSH客户端 SSH密钥认证 生成SSH密钥对 复制公钥到远程服务器…

SpringBoot源码解析(一)

SpringBoot自动装配原理 SpringBootApplication注解 我们在使用SpringBoot时,通常使用的是SpringBootApplication这个注解,比如: 而这个注解的定义为下图,可以发现这个注解上有另外三个注解:SpringBootConfiguration…

BES2600WM---HiLink RM56 EVK

0 Preface/Foreword 0.1 路径 OpenHarmony/device_soc_bestechnic - 码云 - 开源中国 https://github.com/Hi-LinkDuino/RM56 1 环境搭建 1.1 安装依赖工具 sudo apt-get install build-essential gcc g make zlib* libffi-dev e2fsprogs pkg-config flex bison perl bc ope…

C# 编程语言学习教程

C# 编程语言学习教程 目录 C# 简介 1.1 什么是 C#1.2 C# 的特点1.3 C# 的应用领域 环境搭建 2.1 安装 Visual Studio2.2 创建第一个 C# 项目 基础语法 3.1 数据类型3.2 控制结构3.3 数组与字符串 面向对象编程 4.1 类与对象4.2 继承与多态4.3 接口与抽象类 常用库与框架 5.1 .…