mysql中join内外连接查询例子

news2024/12/23 13:27:29

文章目录

    • join关键字
    • 概要
    • 举例
    • using 与 on 区别

join关键字

在MySQL中,JOIN 是一种用于将两个多个表中的行联合起来的操作。
连接(join)就是将一张表中的行按照某个条件(连接条件)与另一张表中的行连接起来形成一个新行的过程。这个过程可以用来合并相关联的数据,以便于进行查询、分析或其他操作。

概要

当根据连接条件执行连接查询时,可以将结果分为三类:

  1. 内连接(Inner Join)常用
    内连接返回两个表中满足连接条件的行,即同时在两个表中存在匹配的行。如果某行在其中一个表中没有匹配的行,则不会包含在结果中。

内连接SQL句式:

SELECT *
FROM table1
INNER JOIN table2 ON table1.column = table2.column;
  1. 外连接(Outer Join)常用
    • 左外连接(Left Outer Join)返回左表中的所有行,以及右表中满足连接条件的行,如果右表中没有匹配的行,则返回NULL值。用LEFT JOIN
    • 右外连接(Right Outer Join)返回右表中的所有行,以及左表中满足连接条件的行,如果左表中没有匹配的行,则返回 NULL 值。用RIGHT JOIN
    • 全外连接(Full Outer Join)返回两个表中的所有行,如果某个表中没有匹配的行,则返回 NULL 值。用FULL JOIN

左外连接SQL句式:

SELECT *
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;
  1. 交叉连接(Cross Join)不常用
    • 交叉连接返回两个表中的所有可能的组合,它不需要任何连接条件,它只是简单地将第一个表中的每一行与第二个表中的每一行进行组合。
    • 交叉连接可以通过省略连接条件或使用 CROSS JOIN 关键字来实现。

交叉连接SQL句式:

SELECT *
FROM table1
CROSS JOIN table2;

举例

准备表,数据

-- 创建用户表
CREATE TABLE users
(
    user_id  INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50),
    email    VARCHAR(50)
);

-- 创建订单表
CREATE TABLE orders
(
    order_id     INT AUTO_INCREMENT PRIMARY KEY,
    user_id      INT,
    product_name VARCHAR(100),
    amount       DECIMAL(10, 2),
    order_date   DATE,
    FOREIGN KEY (user_id) REFERENCES users (user_id)
);

-- 添加示例数据到用户表
INSERT INTO users (username, email)
VALUES ('alice', 'alice@qq.com'),
       ('bob', 'bob@qq.com'),
       ('charlie', 'charlie@qq.com'),
       ('bob', 'bob@qq.com');

-- 添加示例数据到订单表
INSERT INTO orders (user_id, product_name, amount, order_date)
VALUES (1, 'product a', 70.00, '2024-04-25'),
       (2, 'product b', 60.00, '2024-04-25'),
       (1, 'product c', 20.00, '2024-04-26'),
       (3, 'product d', 40.00, '2024-04-26'),
       (NULL, 'Product E', 60.00, '2024-04-27');

两张表如下
在这里插入图片描述

第一种:内连接查询(INNER JOIN):返回同时在用户表和订单表中存在的行

# 写法1
SELECT users.username, orders.product_name, orders.amount, orders.order_date
FROM users
INNER JOIN orders ON users.user_id = orders.user_id;

# 写法2
SELECT users.username, orders.product_name, orders.amount, orders.order_date
FROM users,
     orders
WHERE users.user_id = orders.user_id;

在这里插入图片描述

第二种:左外连接查询(LEFT JOIN):返回左表中的所有行,以及右表中匹配的行,如果右表中没有匹配的行,则显示 NULL 值。

# 写法1
SELECT users.username, orders.product_name, orders.amount, orders.order_date
FROM users
LEFT JOIN orders ON users.user_id = orders.user_id;

# 写法2 后面介绍 using  on 区别
SELECT users.username, orders.product_name, orders.amount, orders.order_date
FROM users
LEFT JOIN orders  using(user_id);

在这里插入图片描述
第三种:右外连接查询(RIGHT JOIN):返回右表中的所有行,以及左表中匹配的行,如果左表中没有匹配的行,则显示 NULL 值。

SELECT users.username, orders.product_name, orders.amount, orders.order_date
FROM users
RIGHT JOIN orders ON users.user_id = orders.user_id;

在这里插入图片描述

using 与 on 区别

USING

  • USING 关键字用于在两个表中存在相同列名的情况下简化连接条件的书写。
  • 使用 USING 时,只需要指定相同列名,而不需要重复列出列名,并且连接条件中不需要指定表名。
  • USING 只能指定一个列作为连接条件,且连接列的名称在两个表中必须相同。

ON

  • ON 关键字用于在连接操作中指定任意的连接条件,不限于相同列名。
  • 使用 ON 时,可以指定任意的连接条件,通常使用在连接条件不是简单的列名相等的情况下。
  • ON 可以指定多个连接条件,连接条件的灵活性更高。

谢谢点赞

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

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

相关文章

好久没关注uCOS系统的消息了,全家桶免费后,竟一直以全新的名字Flexible Safety RTOS登场,且一直在更新

【视频版】 https://www.bilibili.com/video/BV1Kb421Y7v9 好久没关注uCOS系统的消息了,全家桶免费后,竟一直以全新的名字Flexible Safety RTOS登场,且一直在更新 【前言】 2020年初,uCOS全家桶宣布免费后,其Github上…

paddle ocr模型量化实践

参考:https://github.com/PaddlePaddle/PaddleOCR/blob/main/deploy/slim/quantization/README.md https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7.1/doc/doc_ch/FAQ.md 蒸馏 剪枝 量化 参考:https://blog.csdn.net/mddCSDN/article/de…

医院手术室麻醉信息管理系统源码 自动生成麻醉的各种医疗文书(手术风险评估表、手术安全核查表)

目录 手术风险评估表 一、患者基本信息 二、既往病史 三、手术相关信息 四、风险评估因素 五、风险评估结果 手术安全核查表 一、患者身份与手术信息核对 二、术前准备核查 三、手术团队与职责确认 四、手术物品与设备核查 五、术中关键步骤核查 六、术后核查 七…

星融元加入超以太网联盟(UEC),推动智算网络创新实践

近日,星融元正式加入超以太网联盟(Ultra Ethernet Consortium,UEC),该联盟是在 Linux 基金会的牵头下由多家全球头部科技企业联合成立,目标是突破传统以太网性能瓶颈,使其适用于人工智能(AI)和高性能计算&a…

Linux下基本指令-掌握

目录 为什么要学命令行 Linux下基本指令-掌握 ls 指令 pwd命令 cd 指令 touch指令 mkdir指令(重要): rmdir指令 && rm 指令(重要): man指令(重要): cp指…

ARCGIS PRO3 三维模型OSGB转SLPK场景数据集

1.前言 因项目工作,需要将三维模型发布到arcgisserver上,但arcgisserver只支持slpk格式的模型,于是我开启了漫长的三维模型格式转换之旅,在这里记录下本人踩过的坑。 2.三维模型数据情况 2.1 模型大小:在20GB以上&a…

施耐德 Unity Pro 编程软件导入导出变量

适用范围 施耐德中高端PLC,使用的编程软件为 UnityPro (最新版更名为 Ecostructure Control Expert) 中端 PLC:Premium,M340高端 PLC:Quantum,M580 导出/导入变量 导出变量可导出【变量和 FB…

表演型人格的症状和起因,表演型人格测试和应对方法

都说人生不易,全靠演技,在生活这个大舞台上,每个人都在诠释自己的角色,在不同的人面前展现出了不一样的形象。面对父母,面对孩子,面对老板,面对同事,面对朋友,他们好像有…

BIM为电力、供水和道路工程无缝集成,助力智慧城市计划

在道路和公用事业工程中利用 Bentley Open 系列应用程序,项目进度加快 10%,节省成本 1,000 万印度卢比 推动基础设施现代化,实现智慧城市愿景 Dholera特别投资区位于印度艾哈迈达巴德西南 100 公里处,毗邻古吉拉特邦的贸易中心&a…

目标检测的mAP、PR指标含义

基本概念 什么是一个任务的度量标准。对于目标检测任务来说,它的首要目标是确定目标的位置并判别出目标类别。这里已医学图像为例,我们需要计算出血液红细胞(RBC)、白细胞(WBC)和血小板的数量。为了实现这一…

【目标检测】FPN特征金字塔完整流程详解

学习视频:1.1.2 FPN结构详解 对比 可以看到FPN是自上而下、自下而上并且可以进行多尺度特征融合的的层级结构。 具体结构 1x1 conv: 对通道数进行调整,不同大小的特征图通道数不同,越高层次的特征图通道数越大,论文中使用256个1…

上位机图像处理和嵌入式模块部署(树莓派4b用skynet实现进程通信)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们说过,在工业系统上面一般都是使用多进程来代替多线程。这后面,主要的原因还是基于安全的考虑。毕竟一个系统里面&a…

Docker常用命令(镜像、容器)

一、镜像 1.1 存出镜像 1.2 载入镜像 1.3 上传镜像 二、容器 2.1 容器创建 2.2 查看容器的运行状态 ​2.3 启动容器 2.4 创建并启动容器 2.5 在后台持续运行 docker run 创建的容器 2.6 终止容器运行 2.7 容器的进入 ​2.8把宿主机的文件传入到容器内部 2.9 从容器…

Swift-31-泛型和类型操作

泛型 Swift泛型(generics) 让我们写出的类型和函数可以使用对于我们或编译器都未知的类型。 很多内建类型(包括可空类型、数组和字典)都是用泛型实现的,比如数组和一些集合就是用泛型方式来实现的。 一种运行时进行类型检查的技术,效率高但是不安全。在…

11.JAVAEE之网络原理1

1.应用层(和程序员接触最密切) 应用程序 在应用层这里,很多时候, 都是程序员"自定义"应用层协议的,(当然,也是有一些现成的应用层协议)(这里的自定义协议,其实是非常简单的~~协议 >约定,程序员在代码中规定好,数据如何进行传输) 1.根据需求, 明确要传…

使用mapinfo软件的在线地图插件运行错误解决

使用mapinfo软件的在线地图插件运行错误解决 一、如何解决win10/win11家庭版运行MapInfo中的在线地图插件报错【unexpected error;quitting】问题?二、如何解决在线地图切换地图源时的报错问题? 一、如何解决win10/win11家庭版运行MapInfo中的…

C# WinForm —— 10 单选按钮与复选框的介绍与使用

单选按钮 RadioButton 一组单选按钮中,只能选择一个,互相排斥 常用属性、事件: 属性用途(Name)单选按钮的ID,在代码里引用的时候会用到,一般以 rb开头Text单选按钮旁边显示的 文本信息Checked单选按钮的勾选状态Appearance控制单…

JetBrains CLion v2023.3.4 激活版 (C/C++ 集成开发IDE)

前言 JetBrains CLion是一款跨平台的C/C集成开发环境,由JetBrains公司推出。其最新版本支持C14几乎完全,并初步支持C17,使得编写代码更加便捷。CLion还提供了Disassembly view(反汇编视图),即使没有源代码…

Unity类银河恶魔城学习记录15-1,2 p153 Audio Manager p154 Audio distance limiter

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili AudioManager.cs using System.Collections; using System.Collections.Gen…

Python游戏工具包pygame

当你涉及游戏开发时,Pygame是一个强大的工具包,它提供了一系列功能丰富的模块和工具,让你可以轻松地创建各种类型的游戏。在本文中,我将介绍Pygame的依赖以及其详细属性,同时提供一些示例代码来说明其用法。 目录 一…