inner join / left join / right join

inner join

1.语法

语法1:SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;

语法2:SELECT * FROM table1,table2 WHERE table1.column = table2.column;

2.查询方式及结果

(1)查询会对 table1 的每一行的 column 值依次和 table2 的每一行的 column 值进行比较

(2)table1 的每一行的column可能在table2中找到一条/多条/没有column相等的数据,找到几条,那一行的查询结果就是几条

(3)注意:如果table1的某一行没有在table2中找到column 相等的值,那么查询结果中是不会有那一行的数据的

3.示例

(1)表:users

+----+----------+
| ID | Username |
+----+----------+
| 1  | Alice     |
| 2  | Bob      |
| 3  | Charlie |
+----+----------+

        表: orders

+---------+---------+
| OrderID | UserID  |
+---------+---------+
| 101     | 1       |
| 102     | 1       |
| 103     | 2       |
| 104     | 5      |
+---------+---------+

(2)查询

SELECT users.ID, users.Username, orders.OrderID
FROM users, orders
WHERE users.ID = orders.UserID;

(3)查询结果

 +----+----------+---------+
| ID | Username | OrderID |
+----+----------+---------+
| 1  | Alice    | 101     |
| 1  | Alice    | 102     |
| 2  | Bob      | 103     |
+----+----------+---------+

4.其它 

(1)在实际执行中,关系型数据库优化器通常会选择最有效的执行计划。

(2)推荐使用语法1的写法,逗号和 WHERE 子句的写法相对于 INNER JOIN 更为早期,可能在一些特殊情况下不被某些数据库系统完全支持或解释。

(3)在 INNER JOIN 中,连接的顺序是可以随意交换的,因为 INNER JOIN 是对称的。

         例如:

-- 查询1
SELECT users.ID, users.Username, orders.OrderID, order_details.Product
FROM users
INNER JOIN orders ON users.ID = orders.UserID
INNER JOIN order_details ON orders.OrderID = order_details.OrderID;

-- 查询2(连接条件的先后顺序交换了)
SELECT users.ID, users.Username, orders.OrderID, order_details.Product
FROM order_details
INNER JOIN orders ON order_details.OrderID = orders.OrderID
INNER JOIN users ON orders.UserID = users.ID;

left join

1.语法

SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column;

2.查询方式及结果

(1)拿左表的每一行的 column 去依次和右表的每一行的 column 对比。

(2)左表的每一行的 column 可能在右表中找到一条/多条/没有 column 相等的数据。

(3)如果左表的某一行没有在右表中找到 column 相等的值,查询结果中会有那一行的数据,但右表的列会显示为 NULL。

3.示例

(1)表:employees

+------+--------+-------------+
| EmpID| Name   | Department  |
+------+--------+-------------+
| 1    | Alice  | IT          |
| 2    | Bob    | HR          |
| 3    | Charlie| Finance     |
+------+--------+-------------+

        表: departments

+-------------+--------+
| Department  | Manager|
+-------------+--------+
| IT          | John   |
| HR          | Mike   |
| Sales       | Sam    |
+-------------+--------+

(2)查询

SELECT employees.Name, employees.Department, departments.Manager
FROM employees
LEFT JOIN departments ON employees.Department = departments.Department;

(3)查询结果

+--------+-------------+--------+
| Name   | Department  | Manager|
+--------+-------------+--------+
| Alice  | IT          | John   |
| Bob    | HR          | Mike   |
| Charlie| Finance     | NULL   |
+--------+-------------+--------+

4.其它 

(1)LEFT JOIN 的关键点在于保留左表的所有行,即使在右表中没有匹配的行,也会显示左表的数据。

right join

1.语法

2.查询方式及结果

3.示例

(1)表:
(2)查询
(3)查询结果

4.其它 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

制作RK3568 ubuntu20.04桌面版镜像

平台 主控: RK3568 编译主机: Ubuntu 20.04 AMD64 目标版本: Ubuntu 20.04 概述 RK3568是极具性价比的高能国产“芯“ , 是Rockchip面向与AIOT和工业市场打造的一款高性能、低功耗、功能丰富的国产化应用处理器。采用四核64位Cortex-A55架构,主频高达2.0GHz&#x…

基于车载ESAM(ETC)系统设计(程序+原理图+PCB源文件+硬件资料+元器件清单等)方案

OBE-SAM 安全模块,通过车规 AEC-Q100 Grade1 认证。主要应用于 ETC(不停车收费)系统,内 嵌于车载设备 OBU 中。 OBE-SAM安全模块中保存了车辆相关信息,收费站出入口信息,以及交易记录等等,模块采…

MacBook磁盘清理妙招一:使用清理工具CleanMyMac X4.14.6中文版

笔记本电脑在是我们工作和生活中重要组成部分,磁盘清理是常有的事,而macbook作为其中的代表之一,也越来越受到人们的青睐。然而,如何进行macbook磁盘清理,也是许多人都会遇到的问题,特别是被提示“磁盘已满…

复习linux——安全加密

1.对称加密算法特性 常见对称加密算法:DES、AES 2.非对称加密特性 常见非对称加密算法:RSA、DSA、ECC 3.单向哈希算法特性 常见算法:md5、sha1、sha224、 常见工具:md5sum、openssl CA和证书 获取证书方法 自签名的证书&…

WeChatMsg中文版开源软件 提取导出微信聊天记录为文档-提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存

功能 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 支持导出视频、表情包 导出联系人到CSV 导出视频到HTML 导出表情包到HTML 显示和导出拍一拍等系统消息 说明 :如果出现闪退问题&#…

AMEYA360:海凌科个位数微安级功耗蓝牙WiFi模块 BLE5.2蓝牙+2.4G WiFi二合一

蓝牙WiFi模块优势 蓝牙技术大多用来做短距离的设备间通信,例如无线耳机和智能手环等产品,WiFi技术则为产品提供了相对更高速的长距离数据传输能力,适用于连接互联网和局域网。 在各种场景的实际应用中,会经常出现需要多个设备之间…

Linux命令行控制小米电源开关

飞灵科技产品 flyelf-tech.com,flyelf.taobao.com 最近有需求通过命令控制局域网内小米电源开关,以便于写脚本对产品进行反复上电的启动测试。参考了这篇文章:https://blog.csdn.net/2301_77209380/article/details/129797846 获取小米设备的…

化学性质Vamagloxistat乙醇酸氧化酶抑制剂 2408241-62-1科研

Vamagloxistatist,也被称为乙醇酸氧化酶抑制剂,是一种有机化合物,化学式为C35H42N6O6。它是一种药物化学成分,被应用于医药科研领域用。 Vamagloxistatist是一种具有高度活性的化合物,具有多种化学性质。它是一种弱酸…

计算机服务器中了mkp勒索病毒怎么办,mkp勒索病毒解密恢复

在计算机技术飞速发展的今天,越来越多的企业走向了数字化办公模式,极大地方便了企业的生产运营,为企业带来了更高的效率。但网络威胁无处不在,网络威胁手段随着计算机技术的不断发展也在不断增加。近期,云天数据恢复中…

C#拼接JSON

一、业务背景 最近项目需要与U8c对接,实现增删改查,借此机会,梳理一下C#解析Json字符串的问题。 这篇文章,先以新增接口为例。 二、新增接口 查看需要传入的json格式。 拼接json,无非就是{}和[]的来回嵌套。 首先&am…

node.js事件循环相关步骤

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它使用事件驱动、非阻塞式 I/O 模型,使其轻量和高效。Node.js 的核心特性之一是其事件循环机制。下面是对 Node.js 事件循环每个步骤的讲解: 1. 定时器阶段(Timers Pha…

Java,自带的排序方法

假如定义了一个学生类,想根据学生的总分对学生进行排序 案例(进去是Student类的定义,用ctrlf 搜Collection,可以找到具体应用) Collection.sort(要排序的集合,new 一个比较器(){ 大括号里是让重写比较器的…

C++数据结构——二叉搜索树详解

目录 一,关于二叉搜索树 1.1 概念 1.2 基本结构 二,二叉搜索树接口实现 2.1 插入 2.2 查找 2.3 打印 2.4* 删除 三,二叉搜索树接口递归实现 3.1 查找 3.2 插入 3.3 删除 四,二叉搜索树的默认成员函数 五,…

Kotlin中object关键字的使用

定义 在 Kotlin 中,object 关键字可以用来声明对象。对象可以分为两种: 对象表达式:一种表达式,可以直接赋值给变量或常量。对象声明:一种类似于 Java 中的静态类的声明。 用途 对象可以用于以下场景: …

bootstap table表格, 获取当前点击的table元素在该行是第几个

背景 有这样一个需求, table表格中是统计数据, 要求点击每个单元格可实现导出统计的底层数据 数据都是可点击导出的, 思路 获取行bootstap 有个index参数, 所哟要获取当前行第几列, 要获取当前点击的table元素在其所在行中的位置(即第几个)&#xff…

【ARM 嵌入式 编译系列 4.3 -- GCC 编译设置 单个函数优化等级】

文章目录 设置特定函数的优化等级设置特定函数的优化等级 在使用 GCC (GNU Compiler Collection) 编译程序时,有时可能需要指定某个函数不要被编译器优化,以便进行调试或其他目的。GCC 提供了几种方法来防止对特定函数的优化。 最常用的方法是在函数声明前使用 __attribute…

JVM 垃圾回收详解

前言 什么是垃圾? 垃圾是指运行程序中没有任何引用指向的对象,需要被回收。 内存溢出和内存泄漏 内存溢出:经过垃圾回收之后,内存仍旧无法存储新创建的对象,内存不够溢出。 内存泄漏:又叫“存储泄漏”&#xff0…

MySQL数据库慢的原因

MySQL 慢的原因有很多,其中 IO 读写和并发请求是两个最常见的原因。 IO 读写 MySQL 数据库存储在磁盘上,因此数据查询需要先从磁盘读取数据,然后再进行处理。如果 IO 读写速度慢,就会导致数据查询速度变慢。 IO 读写速度慢的原…

7-3 jmu-Java-05集合(泛型)-10-GeneralStack(Java for PTA)

以前定义的IntegerStack接口,只能用于存放Integer类型的数据。然而对于栈来说,不管内部存放的是什么类型的数据,基本操作与元素的具体类型无关。 1. 编写一个通用的GeneralStack接口,接口中的操作对任何引用类型的数据都适用。 …

Docker使用5-Use bind mounts

写在前面 主题是Use bind mounts,这里是链接。本文主要学习持久化数据的另一种方式。 使用mount持久化数据 前文使用Volume持久化数据,这里使用另一种方式Mount持久化数据,就是把主机中的路径映射到容器内的路径。下图是两种方式的主要区别…