数据库SQL查询(二)之连接查询

2023-10-27

本文介绍SQL查询,如何在海量数据中筛选想要数据;

数据库管理系统选择:关系型数据库mysql

数据库管理工具选择:navicat

本文中查询语句和查询案例参考自:https://edu.csdn.net/course/detail/27673?ops_request_misc=&request_id=&biz_id=105&utm_term=SQL&utm_medium=distribute.pc_search_result.none-task-course-2~course~sobaiduweb~default-3-27673.pc_edu_default&spm=1018.2226.3001.4453
 

目录

连接查询

认识几种连接类型

内连接 (Inner Join)

外连接--左外连接 (Left Outer Join)

外连接--右外连接 (Right Outer Join)

交叉连接(CROSS JOIN)

示例

示例一(Inner Join)

示例二(Left Outer Join)

示例三(CROSS JOIN)


连接查询

将多张表(至少两张)按照某个连接条件连接成一张大表,在大表中执行查询;

本文为SQL99标准的写法

认识几种连接类型

准备2张表

 

内连接 (Inner Join)

按照连接条件进行连接,满足条件的显示在大表中,不满足的隐藏;

大部分查询都是内连接;

SELECT
	* 
FROM
	Table1
	INNER JOIN Table2 ON Table1.SNo = Table2.SNo

 

外连接--左外连接 (Left Outer Join)

Left左边的表为主表,按照连接条件在右边的表中匹配数据,匹配上的直接显示在大表中,匹配不上的显示null;

SELECT
	* 
FROM
	Table1
	LEFT OUTER JOIN Table2 ON Table1.SNo = Table2.SNo

外连接--右外连接 (Right Outer Join)

Right右边的表为主表,按照连接条件在左边的表中匹配数据,匹配上的直接显示在大表中,匹配不上的显示null;

SELECT
	* 
FROM
	Table1
	RIGHT OUTER JOIN Table2 ON Table1.SNo = Table2.SNo

交叉连接(CROSS JOIN)

返回被连接的两个表所有数据行的笛卡尔积;

主要目的是为了组合数据;

SELECT
	* 
FROM
	Table1
	CROSS JOIN Table2

 

示例

示例一(Inner Join)

-- 查询陈鹏借了哪些书

(在数据库SQL查询(一)中,我们用嵌套查询实现了这个需求,在此处我们用连接查询实现这个需求,看看有什么不同;)

1、表关系如下图所示:

2、先把3张表连接为一张大表

SELECT
	* 
FROM
	Student
	INNER JOIN BorrowBook ON BorrowBook.SNO = Student.SNO
	INNER JOIN Book ON Book.BookID = BorrowBook.BookID

 3、再从这张大表中筛选条件满足数据

SELECT
	BookName 
FROM
	Student
	INNER JOIN BorrowBook ON BorrowBook.SNO = Student.SNO
	INNER JOIN Book ON Book.BookID = BorrowBook.BookID 
WHERE
	sname = '陈鹏'

示例二(Left Outer Join)

-- 统计出借书库存情况 
/*
     图书编号    图书名称    入库量    被借量
        -------------------------------------------------
       39001    Mysql数据库     15           6    
*/

1、表关系为:

2、 这里表连接之前,分析:

book表中有3个值可以直接得到;

borrowbook表中想要得到被借量,需要分组查询,用分组后的新表 重命名(AS)后,与book表进行连接;

Left Outer Join中的outer可以省略;

SELECT
	* 
FROM
	Book
	LEFT JOIN ( SELECT BookID, COUNT(*) AS num FROM BorrowBook GROUP BY BookID ) AS nums ON nums.BookID = Book.BookID

 

 3、得到大表后,被借量num列,有null数据,代表这本书没有被借过,用0代替(用ifnull函数)

SELECT
	Book.BookID AS '图书编号',
	BookName AS '图书名称',
	BookIncoming AS '入库量',
	IFNULL( num, 0 ) AS '被借量' 
FROM
	Book
	LEFT JOIN ( SELECT BookID, COUNT(*) AS num FROM BorrowBook GROUP BY BookID ) AS nums ON nums.BookID = Book.BookID

 

示例三(CROSS JOIN)

-- 统计出哪些学生的哪些科目缺考

 

SELECT
	* 
FROM
	( SELECT * FROM Stu CROSS JOIN Course ) AS T1
	LEFT JOIN Score ON T1.SNO = Score.SNo 
	AND T1.CNo = Score.CNo 
WHERE
	Result IS NULL

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库SQL查询(二)之连接查询 的相关文章

  • “$$ 处或附近的未终止的美元引号字符串

    我试图使用 DBeaver 声明一些变量并不断遇到此错误 Unterminated dollar quoted string at or near DO DECLARE A integer B integer BEGIN END 有任何想法
  • 从VBA中的数组批量插入到sql中

    我正在尝试在 Excel 中构建一个按钮 将所选区域上传到 SQL Server 中的表中 第一行将自动视为列标题 这件事该怎么继续下去呢 我想要的是简单和超快的上传 这是我的想法 我将选择选定的区域 然后将其保存为 txt 文件 然后对其
  • SQL Server 之间

    我有一个表 其中有年 月和一些数字列 Year Month Total 2011 10 100 2011 11 150 2011 12 100 2012 01 50 2012 02 200 现在 我想要SELECT2011 年 11 月至
  • 如何通过Object Id和Column Id查询表数据?

    有桌子Clients PK LastName Name Address 1 Vidal Arturo St 2 Lavezzi Ezequiel St 3 Cuadrado Guillermo St 我想得到 通过以下查询 我可以得到前四列
  • sql 查询的权限被拒绝

    我正在尝试通过经典的 asp 记录集执行以下查询 SQL Select P Name as P Name P Description as P Description from L PagePermission inner join A P
  • SQL 更新数据集中的位置

    id1 id2 bool 1 1 F 1 2 F 2 1 F UPDATE table name SET bool T WHERE id1 id2 IN 1 1 2 1 Need work here 所以基本上我想选择条件为 id1 id2
  • SQL 用新值替换旧值

    我有一个名为tbl Products 其中有一列名为articlenumber并且充满了像这样的数字s401 s402 etc 我生成了一个包含新商品编号的列表 它将替换旧的商品编号 s401 I00010 s402 I00020 s403
  • 仅从数据库获取我想要的数据但保留结构

    我正在尝试在 powerbi 上执行此操作 但我想这只是基本的 SQL 我想将我的数据导入到 powerBi 中 但使用一些 id 对其进行过滤 我们以这个例子为例 我与一些公司有数据库 表1 每个公司都有建筑物 表2 每个建筑物有员工 表
  • 删除原始数据中部分重复的记录

    我需要删除表中时间间隔为 1 或 2 分钟或相同且必须相同的所有记录ID但保留第一个记录 ID Time SN SD WE FW 10 2014 06 30 19 17 37 000 I 0 100 0 10 2014 06 30 19 1
  • 为什么我们不能有多个主键?

    我知道表中不能有超过 1 个主键 但技术原因是什么 直接拉取自SO https stackoverflow com questions 217945 can i have multiple primary keys in a single
  • 如何在SQL Server数据库表列中存储图像[重复]

    这个问题在这里已经有答案了 我有一张名为FEMALE在我的数据库中 它有ID as Primary Key 它有一个Image column 我的问题是如何使用 SQL 查询存储图像 尝试一下 insert into tableName I
  • 显示过去 7 天 PHP 的结果

    我想做的是显示过去 30 天的文章 但我现有的代码不断给我一个 mysql fetch assoc 错误 然后追溯到我的查询 这是代码 sql mysql query SELECT FROM table WHERE DATE datetim
  • (SQL) 识别字段中字符串格式多次出现的位置

    我需要将叙述字段 自由文本 拆分为多行 目前的格式如下 Case Reference Narrative XXXX XX 123456 Endless Text up to 50k characters 在作为文本的叙述字段中 各个条目 当
  • 在同一个表上组合两个 SQL SELECT 语句

    我想结合这两个 SQL 查询 SELECT FROM Contracts WHERE productType RINsell AND clearTime IS NULL AND holdTime IS NOT NULL ORDER BY g
  • 将列的值添加到 LIKE 语句中?

    我有 3 个标签表 标签类别和使用过的标签 我想要获取所有标签的列表以及已使用标签的计数 所使用标签的格式是每个具有标签的文档 ID 的逗号分隔值 我一直在尝试类似的方法 但无法将tags tag 字段的值插入到LIKE 语句中 SELEC
  • 如何检测 Postgres 中持有锁的查询?

    我想不断跟踪 postgres 中的互锁 我碰到锁具监控 https wiki postgresql org wiki Lock Monitoring文章并尝试运行以下查询 SELECT bl pid AS blocked pid a us
  • 在 Oracle 中使用触发器记录对表的更改

    我的一门课有一个项目 当我们的两个表发生更改时 我们需要创建一个日志 插入 更新 删除 我们需要使用Oracle触发器和PL SQL 在日志文件中 我们需要记录用户ID 日期时间 IP地址和事件 插入 更新 删除 我知道如何设置触发器 但我
  • Quartz.NET 设置 MisfireInstruction

    我正在使用 Quartz NET 在 C 中工作 并且在 CronTrigger 上设置失火指令时遇到问题 我正在运行安装了 Quartz DB 的 SQL 后端 我有以下代码 可以很好地创建作业和运行调度程序 IScheduler sch
  • 如果执行没有事务的删除语句,是否会删除部分内容?

    如果表myTable包含100000000条记录 我执行DELETE FROM myTable 没有开始交易并且出现问题 例如服务器电源故障 会删除一些记录吗 否 如果数据库引擎符合ACID http en wikipedia org wi
  • 累计非重复计数

    我正在查询每天获取 uid 的累计不同计数 示例 假设有 2 个 uid 100 200 出现在日期 2016 11 01 并且它们也在第二天出现 新的 uid 300 100 200 300 出现在 2016 11 02 此时我希望商店累

随机推荐

  • matlab 实现dtmf 信号检测代码,DTMF信号的产生与检测算法研究与MATLAB实现.rar

    摘 要 双音多频信号 DTMF Dual Tone Multi Frequency 是电话系统中电话机与交换机之间的一种用户信令 通常用于发送被叫号码 由于其抗干扰性强和高速传输的优点 除了应用于电话系统 还被在全世界范围内广泛使用在各种按
  • chatgpt基于Qt实现的To-Do List小项目(内附源码),码农将何去何从....

    笔者前言 OpenAI前一段发布聊天机器人模型ChatGPT 迅速出圈全网 chatgpt的出现 让LLMs走进了普通人的视野 同时 也让传统的AI助手变成了原始人 chatgpt向我们展示了LLM目前的天花板 而且这个天花板还相当高 在突
  • 基本的线程机制

    一 线程概念 并发编程使我们可以将程序划分成多个分离的 独立运行的任务 通过使用多线程机制 这些独立任务中的每一个都将由执行线程来驱动 一个线程就是在进程中的一个单一的顺序控制流 因此 单个进程可以拥有多个并发执行的任务 但是你的程序是的每
  • PostgreSQL:流复制环境清除 pg_xlog 日志

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 今天一流复制 Streaming Replication 数据库一目录空间告警 经查是 pg xlog 目录 WAL 日志文件过多 已超过阀值 pg xlog 是数据库重做
  • springboot整合LogstashTcpSocketAppender日志保存到ELK

    1 安装elasticsearch 2 安装kibana 3 安装logstash 配置logstash springboot logstash conf文件如下 input tcp mode gt server host gt 127 0
  • CMAKE 中 add_definitions的用法.

    1 官方的说明 Adds D define flags to the compilation of source files add definitions DFOO DBAR Adds definitions to the compile
  • 树莓派安装MJPG-streamer

    文章目录 一 简介 1 MJPG streamer方案的实现 2 JPEG MJPG格式简介 二 测试USB摄像头 1 开启摄像头服务 2 显示USB设备 3 查看设备文件 三 安装 1 更新源 2 安装必要的库 3 下载安装文件 4 编译
  • IPsec中IKE与ISAKMP过程分析(主模式-消息1)

    IPsec协议族中IKE Internet Key Exchange 是一种基于ISAKMP的协议 它为建立IPSec安全通信隧道提供了一种无痕密钥交换的机制 简单来说 IKE就是ISAKMP的扩展 为ISAKMP提供了更加高效 灵活和安全
  • ERP系统31.83版本发布,解决企业供应链管理难题

    近日 ERP系统31 83版本正式发布 无处不在的互联网 正在改变企业与用户的连接方式 一旦享受过什么叫实时 就再也无法忍受延迟 一旦感受过什么叫便捷 就再也无法忍受繁琐 企业如何全方位提高服务效率和用户体验 此次升级的智邦国际ERP系统3
  • [git] 小乌龟工具TortoiseGit记住账号密码 ——简单版操作指南

    如何让小乌龟 记住用户名和密码的操作指南 问题描述 步骤1 步骤2 问题描述 在小乌龟的使用过程中 每次push或者pull都要重复输入账号密码 非常麻烦 如果能记住账号密码就好了 这样就省去了时间 那么 怎么设置记住密码 步骤1 打开自己
  • JS中的类相关操作

    1 类相关操作 注意是 通过style属性来修改元素的样式 每修改一个样式 浏览器就需要重新渲染一次页面 这样的执行的性能是比较差的 而且这种形式当我们修改多个样式时 也不太方便 解决方案是 通过修改的class类名的方式 来达到效果 可以
  • 从零开始搭建游戏服务器第二天

    1 搭建开发环境 因为游戏服务器大多部署在linux系统下 所以这里选择的是Centos 7作为开发环境的镜像 预期以后的编译和调试也会在这个镜像上面进行开发 用镜像的方式开发有一个好处是可以随时打包带走 避免到一台新的机器上又要重新搭建开
  • 大数据--关联规则挖掘案例

    环境 虚拟机hive 本地spark python pyspark 数据 商品订单数据 商品种类数据 步骤 将数据上传到hdfs后 在python中完成hive表的创建 数据处理 关联规则挖掘 数据可视化 实现功能 对商品订单中的信息进行挖
  • 初 等 矩 阵

    定义 对单位阵进行一次初等变换后得到的矩阵称为初等矩阵 三种初等矩阵 初等矩阵的性质 初等矩阵的转置仍为同类型的初等矩阵 初等矩阵的行列式 初等矩阵都是非奇异的 矩阵行变换相当于左乘初等矩阵 矩阵列变换相当于右乘初等矩阵 以下命题是等价的
  • Spring的基础知识点,面试常问

    1 Spring是什么 Spring是一个轻量级的IoC和AOP容器框架 是为Java应用程序提供基础性服务的一套框架 目的是用于简化企业应用程序的开发 它使得开发者只需要关心业务需求 常见的配置方式有三种 基于XML的配置 基于注解的配置
  • 基于深度学习的CSI反馈(CsiNet)

    目录 前言 文章主旨 文章背景 现有CSI反馈方法 1 基于码本的CSI反馈方法 2 基于压缩感知的CSI反馈 研究动机 创新点 将CSI视为 图像 CsiNet特性 系统模型和CSI反馈 模型实现 encoder到decoder的层数按顺
  • 修改 input 中 placeholder的 颜色和 字体大小

    在微信小程序中使用 修改 input 中 placeholder 的字体大小 直接在里面添加 style 第一种 只能修改微信小程序
  • python paramiko_Python--Paramiko

    一 基本使用 paramiko是SSH协议的python实现 用于连接远程服务器进行命令交互和文件传输 import paramiko cmd ls task info ps aux 创建客户端对象 ssh paramiko SSHClie
  • python爬虫selenium---Boss直聘

    爬虫初衷是为了练习python爬虫和数据的收集及分析能力 内容均为网站用户可访问到的内容 不涉及隐私 爬了两份数据 一个是设计师岗位 一个是python岗位 爬虫过程 1 爬虫内容始终为正在加载 由于Boss直聘是动态网页 所以需要先观察网
  • 数据库SQL查询(二)之连接查询

    本文介绍SQL查询 如何在海量数据中筛选想要数据 数据库管理系统选择 关系型数据库mysql 数据库管理工具选择 navicat 本文中查询语句和查询案例参考自 https edu csdn net course detail 27673