深入了解关联查询和子查询

推荐阅读

给软件行业带来了春天——揭秘Spring究竟是何方神圣(一)
给软件行业带来了春天——揭秘Spring究竟是何方神圣(二)


文章目录

    • 推荐阅读
    • 关联查询
    • 子查询


关联查询

image.png

关联查询
从多张表中查询对应记录的信息,关联查询的重点在于这些表中的记录的对应关系,这个对应关系也称为连接条件。

select k.kname,k.sal,h.loc
from k,h
where k.depino=h.depino

image.png

表名也可以写别名.
当两张表名有同名字段时,select 子句中必须要明确指出指定该字段来自哪张表,在关联查询中,表名也可以添加别名们可以简化select 语句的复杂度。

SELECT k.name,h.name
FROM employee_K k,employee_H h
WHERE k.depino=h.depino

关联查询要添加连接条件,否则会产生笛卡尔积
笛卡尔积通常是一个无意义的结果集,它的记录数使所有参与查询的表的记录数乘积的结果。要避免出现,数据量大时极易出现内存溢出等现象。
N张表关联查询要有N-1个连接条件。

连接条件和过滤条件同时成立。

select k.kname,k.sal,h.loc
from k,h
where k.depino=h.depino and h.loc='shanghai'

内连接
**join… on… **内连接返回所有满足连接条件的记录。不满足条件的不会被查询出来。

select k.kname,sal,h.loc
from k  h 
where k.depino=h.depino and sal>2000

select k.kname,sal,h.loc
from k join h on k.depino=h.depino
where sal>2000

连接条件和过滤条件分开,层次感更好,条理更清晰。

外连接
外连接除了会将满足连接条件的记录查询出来以外,还会将不满足的连接条件的记录也查询出来。

外连接分
左外连接:以 join 左侧表作为驱动表(所有数据都会被查询出来),那么该表中某条 记录不满足连接条件时,来自右侧表中的字段全部填null。

select k.name,h.name from k left outer join h  
on k.depino=h.depino

select k.name,h.name from k join h  
on k.depino=h.depino(+)

右外连接

select k.name,h.name from k join h  
on k.depino(+)=h.depino

全外连接

select k.name,h.name from k  full outer join h  
on k.depino=h.depino

自连接
自连接:当前一张表的一条记录可以对应当前表自己的多条记录。
自连接是为了解决同类型数据但是又存在上下级关系的树状结构数据时使用。

select k.kname,kk.kname from k ,k kk where k.id=kk.pid

image.png
自连接连接多个表

select k.kname,kk.kname,h.loc
from k,k kk,h 
where k.pid=kk.id and kk.depino=h.depino and k.kname='bob'


select k.kname,kk.kname,h.loc
from k join k kk 
on k.pid=kk.id
join h
on kk.depino=h.depino
where k.kname='bob'

子查询

子查询是一条select 语句,但是他嵌套在其他SQL语句中,为的是给其他SQL语句提供数据以支持其执行操作。

SELECT kname,sal FROM K
WHERE sal>(select sal FROM k WHERE kname='ali')

image.png

在DDL中,根据子查询的结果集快速创建一张表。

创建表时如果字查询中的字段有别名则该表对应的字段就使用该别名作为其字段名,当子查询中一个字段名含有函数表达式,则必须要使用别名。

 CREATE TABLE employee
 AS
  SELECT k.kname,k.sal,k.id,h.hname,h.loc
 FROM h,k
 WHERE k.depino=h.depino

image.png

在DML中使用子查询。

SELECT*FROM K WHERE depino=(SELECT depino FROM K WHERE kname='alcie' )

子查询在查询语句中的运用
image.png

 select depino ,kname,sal from k where sal >(select avg(sal) from K)

image.png

  • 单行单列子查询:常用于过滤条件,可以配合=,<+,<,>,>=使用

  • 多行多列子查询:常用于过滤条件,由于查询出多个值,在判断=时,要用IN,

                                判断>,>=等操作,要用ALL,ANY。
    
  • 多行多列子查询:当成一张表来看。

 select kname,sal from k where sal >all(select sal from k where depino in(10,30))

image.png

exists,not exists 关键字
exists 后面跟一个子查询,当子查询可以查询出至少一条记录,则exists表达式成立并返回TRUE。

select kname,sal from k where exists(select *from k,h where k.depino=h.depino)

select kname,sal from k where not exists (select *from h where k.depino=h.depino)

image.png

子查询语句在having子句中的使用。

  select min(sal),depino
  from k
  GROUP BY depino
  having min(sal)>(select min(sal) from k where depino=30)

image.png

子查询在FROM子句中的运用
当一个子查询是多列子查询,通常将该子查询的结果集当做一张表看待并基于它进行二次查询。

select AVG(sal),depino from k group bu depino

select kname,k.sal,depino from k,(select AVG(sal) avg_sal,depino from k group by depino) A where k.depino=A.depino and k.sal>A.avg_sal

image.png
子查询在select 子句中的使用。
可以将查询的结果当做外层查询记录中的一个字段值显示。

select kname,k.sal,(select hname from h where k.depino=h.ddepino) from k

image.png

在这里插入图片描述

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

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

相关文章

网络原理-TCP/IP(5)

TCP协议 延迟应答 它也是基于滑动窗口,提高效率的一种机制,结合滑动窗口以及流量控制,能够以延迟应答ACK的方式,把反馈的窗口,搞大.核心在于允许范围内,让窗口尽可能大. 如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小. 1.假设接收端缓冲区为1M.一次收到了5…

Java特别篇--关于线程创建的三种方式的总结对比

文章目录 一、常见3种创建线程的方式&#xff08;1&#xff09;方式1&#xff1a;继承Thread类的方式&#xff08;2&#xff09;方式2&#xff1a;实现Runnable接口的方式&#xff08;3&#xff09;方式3&#xff1a;通过Callable和Future接口创建线程 二、对比三种方式&#x…

CUDA/TensorRT部署知识点

CUDA相关: 1、CUDA核函数嵌套核函数的用法多吗? 答:这种用法非常少,主要是因为启动一个kernel本身就有一定延迟,会造成执行的不连续性。 2、如下代码里的 grid/block 对应硬件上的 SM 的关系是什么? 答:首先需要理解grid/block是软件层的概念,而SM是硬件层的概念。所…

python脚本将照片按时间线整理

说明&#xff1a;有一次自己瞎折腾&#xff0c;然后把服务器相册搞崩了&#xff0c;后来做了备份同步给找了回来&#xff0c;但是相册的时间线全乱了&#xff0c;看起来非常难受。所以就想通过文件夹的形式把照片重新分类&#xff0c;分类后的结构如下(红色字体为文件夹)&#…

人生百相,不过熵增熵减

这篇博文由两个问题衍生而来&#xff0c;分别是&#xff1a;“为什么除法比加法困难”、“什么是生命进化的目的”。在阅读其他人的解读时&#xff0c;发现都关联到了一个概念&#xff0c;熵。觉得十分有意思&#xff0c;因此记录一下自己的遐想。 熵&#xff08;Entropy&#…

vulhub中spring的CVE-2022-22965漏洞复现

在JDK 9上运行的Spring MVC或Spring WebFlux应用程序可能存在通过数据绑定执行远程代码&#xff08;RCE&#xff09;的漏洞。 现在已知的利用方法要求应用程序以WAR部署的形式在Tomcat上运行&#xff0c;然而&#xff0c;该漏洞的性质更为普遍&#xff0c;可能有其他方法可以利…

docker安装-centos

Docker CE 支持 64 位版本 CentOS 7&#xff0c;并且要求内核版本不低于 3.10 卸载旧版本Docker sudo yum remove docker \ docker-common \ docker-selinux \ docker-engine使用yum安装 yum 更新到最新版本: sudo yum update执行以下命令安装依赖包&#xff1a; sudo yum…

【无刷电机】无感方波驱动方案

无感方波驱动方案 1.通过无感过零信号构造霍尔换相信号2.无刷硬件驱动方案3.无感方波控制程序框架3.1有感方波控制3.2无感方波控制3.3无感启动方案3.4无感速度闭环控制1.通过无感过零信号构造霍尔换相信号 实现无感方波控制有软件比较和硬件比较两种方案。 软件比较是通过ADC采…

张维迎《博弈与社会》威胁与承诺(3)承诺行为

承诺的作用 上一节&#xff0c;我们探讨了如何在求解博弈时把不可置信的威胁或许诺排除出去&#xff0c;从而对参与人的行为做出合理的预测。如前所述&#xff0c;其中一个隐含的前提条件是&#xff0c;参与人要具有理性共识。而理性共识是一个要求很高的条件&#xff0c;现实生…

基于Springboot的校园失物招领网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园失物招领网站&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

基于Springboot的兼职网(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的兼职网&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0…

Oracle喊你领取免费AI 助理级证书啦!

拿证秘籍如下&#xff1a; 1. 登录Oracle的考试中心网站&#xff1a;https://education.oracle.com/certification 2. 选择AI 助理级考试&#xff0c;考试代码&#xff1a;1Z0-1122-23&#xff0c;也可以点击这里直达 3. AI学习视频免费看&#xff0c;也可以选择不看 3.5 去…

【git 本地管理版本及与github合并】 Init Push Pull操作解决方案

文章目录 创建本地仓库&#xff0c;并与远程仓库链接更新本地仓库并使用Push推送到远程仓库 1. 几种基础命令介绍&#xff1a;2. git push操作流程 .gitignore删除本地仓库&#xff0c;断开本地与远程的链接设置用于提交commit的用户名&#xff0c;邮箱&#xff0c;以便githu…

自建服务器监控工具uptime kuma

web服务器使用 雨云 提供的2核2g 这里使用1panel的uptime kuma 首先&#xff0c;如果你使用雨云&#xff0c;那么可以直接省去安装1panel的烦恼 直接选择预装后&#xff0c;等待部署完成即可看到面板信息&#xff0c;进入面板&#xff0c;点击应用商店 在应用商店里找到upti…

安装配置Oracle 11g 、PLSQL及使用Navicat远程连接Oracle

目录 一、下载 二、安装 1.执行安装程序 2.配置安全更新 3.安装选项 4.系统类 5.网络安装选项 6.选择安装类型 7.选择产品语言 8.选择数据库版本 9.指定安装位置 10.选择配置类型 ​编辑11.指定数据库标识符 12.指定配置选项 13.电子邮箱 14.指定数据库存储…

Android学习之路(28) 进程保活组件的封装

前言 远古时代&#xff0c;出现过很多黑科技&#xff0c;比如MarsDaemon&#xff0c;使用双进程守护的方式进行保活&#xff0c;在当时可谓风光无限&#xff0c;可惜在8.0时代到来就被废弃了。 又比如后面出现的1像素Activity的保活方式&#xff0c;说他流氓一点不过分&#…

解决Android camera 录像中拍照帧率不足30fps

问题现象 camera录像中拍照&#xff0c;录出来的视频帧率为29.3fps&#xff0c;未达到30fps。 问题分析 这个场景相当于跑了previevediocapture&#xff0c;极其损耗性能。 当前场景CPU频率已处于最高。 抓取systrace分析。 1&#xff0c;分析掉帧直接原因 SinkNode存在大…

【Leetcode】第 383 场周赛

文章目录 100214. 边界上的蚂蚁题目思路代码结果 100204. 将单词恢复初始状态所需的最短时间 I题目思路代码结果 100189. 找出网格的区域平均强度题目思路代码结果 100203. 将单词恢复初始状态所需的最短时间 II题目思路代码结果 100214. 边界上的蚂蚁 题目 题目链接 给你一个…

容器和镜像

容器和镜像是现代软件开发和部署中重要的概念&#xff0c;它们通常与容器化技术&#xff08;如Docker&#xff09;相关联。以下是它们的基本定义和关系&#xff1a; 容器(Container): 容器是一种轻量级、可移植的运行环境&#xff0c;其中包含了应用程序及其依赖项&#xff08;…

《Python 网络爬虫简易速速上手小册》第5章:Python 数据存储与管理(2024 最新版)

文章目录 5.1 选择数据存储方案5.1.1 重点基础知识讲解5.1.2 重点案例&#xff1a;使用 SQLite 存储博客文章数据5.1.3 拓展案例 1&#xff1a;使用 MongoDB 存储社交媒体动态5.1.4 拓展案例 2&#xff1a;使用 Elasticsearch 存储和检索日志数据 5.2 数据清洗与预处理5.2.1 重…