mysql中join内外连接查询例子

文章目录

    • 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 可以指定多个连接条件,连接条件的灵活性更高。

谢谢点赞

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

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

相关文章

一个排查了一天的BUG,你在摸鱼吧!

站会 在一次日常站会上,组员们轮流分享昨天的工作进展。一个组员提到:“昨天我整天都在排查一个BUG,今天还得继续。” 出于好奇,我问:“是什么BUG让你排查了这么久还没解决呢?” 他解释说:“…

Compose和Android View相互使用

文章目录 Compose和Android View相互使用在Compose中使用View概述简单控件复杂控件嵌入XML布局 在View中使用Compose概述在Activity中使用Compose在Fragment中使用Compose布局使用多个ComposeView 在布局中使用Compose 组合使用 Compose和Android View相互使用 在Compose中使用…

智慧旅游引领旅游行业创新发展:借助智能科技的力量,推动旅游服务的个性化、精准化,提升游客的满意度和忠诚度

随着信息技术的迅猛发展和广泛应用,智慧旅游已成为旅游行业创新发展的重要引擎。智慧旅游借助智能科技的力量,推动旅游服务的个性化、精准化,不仅提升了游客的满意度和忠诚度,也为旅游行业的可持续发展注入了新的活力。本文将从智…

4月25日 C++day4

#include <iostream> using namespace std;class Person {const string name;int age;char sex; public:Person():name("lisi"){cout << "Person无参构造" << endl;}Person(string name,int age,char sex):name(name),age(age),sex(sex)…

【RAG 论文】Chain-of-Note:为 RAG 引入 CoT 让模型生成阅读笔记来提高面对噪音文档和未知场景的鲁棒性

论文&#xff1a;Chain-of-Note: Enhancing Robustness in Retrieval-Augmented Language Models ⭐⭐⭐ Tencent AI Lab, arXiv:2311.09210 文章目录 一、论文速读二、实现的细节2.1 Note Design2.2 Data Collection2.3 Model Training 三、实验结果3.1 QA Performance3.2 对 …

使用新版ESLint,搭配Prettier使用的配置方式

概述 ESLint重大更新(9.0.0版本)后,将不再支持非扁平化配置文件,并且移除了与Prettier冲突的规则,也就是说与Prettier搭配使用,不再需要使用插件“eslint-config-prettier”来处理冲突问题。 注:使用新版的前提条件是Node.js版本必须是18.18.0、20.9.0,或者是>=21.1…

014、Python+fastapi,第一个后台管理项目走向第14步:建立python+fastapi项目,创建common通用模块

一、说明 通用模块主要是完成文件的上传下载&#xff0c;抄吧&#xff0c;要不然怎么叫通用模块呢&#xff1f; 我把RuoYi-Vue3-FastAPI中的验证码模块放在这里了&#xff0c;我觉得验证也比较通用吧&#xff0c; 二、添加common通用模块 1、通用模块没有数据表&#xff0c…

涨跌失据了?现货白银市场的波动如何捕捉

现货白银市场近期出现了强劲的上涨&#xff0c;但近两个交易日&#xff0c;却出现了令人感觉诧异的大跌。很多刚入场打算买入做多的朋友&#xff0c;面对这两天这么强的跌势都感觉无所适从。到底现货白银市场的波动如何才能捕捉呢&#xff1f;下面我们就来讨论一下这个问题。 用…

阿里云物联网平台 | 透传与ICA标准数据格式(Alink JSON)| 定值SDK非动态注册与动态注册 | SOC+4G模组移植方案

文章目录 一、透传与ICA标准数据格式&#xff08;Alink JSON&#xff09;二、定值SDK选非动态注册还是动态注册三、SOC4G模组移植方案 一、透传与ICA标准数据格式&#xff08;Alink JSON&#xff09; 透传和ICA标准数据格式&#xff08;Alink JSON&#xff09;是物联网设备与阿…

DevOps(十二)Jenkins实战之Web发布到远程服务器

前面两篇博文介绍了怎么将django开发的web应用推送到gitlab源码仓库&#xff0c;然后jenkins服务器从gitlab仓库拉下来&#xff0c;布署到jenkins服务器上&#xff0c;并用supervisor进行进程管理&#xff0c;保证web应用一直能正常运行&#xff0c;今天我们继续优化&#xff0…

数据结构:初识集合框架

目录 1. 什么是集合框架2. 集合框架的重要性3. 背后所涉及的数据结构以及算法3.1 什么是数据结构3.2 容器背后对应的数据结构3.3 相关java知识3.4 什么是算法 1. 什么是集合框架 官方教程 Java 集合框架Java Collection Framework &#xff0c;又被称为容器和其实现类classes …

记一次JSON.toJSONString()转换时非属性方法空指针异常排查及toJSONString保留null值属性

记一次JSON.toJSONString()转换时非属性方法空指针异常排查及toJSONString保留null值属性 异常详情 有一个类&#xff0c;里面有两个属性和一个类似工具的getRealName()方法如下&#xff1a; getRealName()方法就是获取这个人的真实名字&#xff0c;如果获取不到就以name返回…

janus模块介绍-SIP Gateway

模块启动 默认的SIP GateWay也是https协议&#xff0c;端口为8088或者8089 如果需要在自己搭建的测试服务上测试SIP GateWay模块&#xff0c;则也需要修改为wss 具体改动如下: 找到/opt/janus/share/janus/demos/siptest.js var server "wss://" window.location…

Python与数据库连接

新建表boss create table 创建表 Code import pymysqlcon pymysql.connect(hostlocalhost,\userroot,\password,\port3306,\dbbusiness) cursorcon.cursor() cursor.execute(create table if not exists boss(id int auto_increment primary key,name varchar(20)not null…

打包的意义 作用等前端概念集合 webpack基础配置等

基础网页是什么&#xff1f; 在学校最基础的三剑客 原生JS CSS H5就可以开发静态网页了 对于浏览器而言也能识别这些基础的文件和语法&#xff0c;真正的所见即所得&#xff0c;非常直接。 为什么要使用框架库&#xff1f; 对于常用的前端框架而言&#xff0c;无论是Vue Rea…

什么样的内外网文档摆渡,可以实现安全高效传输?

内外网文档摆渡通常指的是在内网&#xff08;公司或组织的内部网络&#xff09;和外网&#xff08;如互联网&#xff09;之间安全地传输文件的过程。这个过程需要特别注意安全性&#xff0c;因为内网往往包含敏感数据&#xff0c;直接连接内网和外网可能会带来安全风险。因此会…

为什么深度学习模型在 GPU 上运行得更快:CUDA 编程简介

如今,当我们谈论深度学习时,通常会将其实现与利用 GPU 来提高性能联系起来。 GPU(图形处理单元)最初设计用于加速图像、2D 和 3D 图形的渲染。然而,由于它们能够执行许多并行操作,因此它们的实用性超出了深度学习等应用程序。 GPU 在深度学习模型中的使用始于 2000 年代…

保姆级银河麒麟V10高级服务器离线安装mysql5.7数据库

离线在银河麒麟高级操作系统v10安装mysql5.7 下载mysql5.7 MySQL :: Download MySQL Community Server (Archived Versions) 2、把下载好的包上传到服务器 3、解压 [root1-0001 ~]# cd /data/mysql[root1-0001 mysql]# tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz…

Beego框架学习:深入指南

文章目录 Beego框架学习&#xff1a;深入指南安装与设置创建控制器自定义路由使用中间件使用模板引擎使用ORM Beego框架学习&#xff1a;深入指南 Beego是一个快速开发Go语言应用的开源框架&#xff0c;它基于MVC模式设计&#xff0c;提供了一系列的工具和库&#xff0c;使得开…

C++ 之 string类的模拟实现

这学习我有三不学 昨天不学&#xff0c;因为昨天是个过去 明天不学&#xff0c;因为明天还是个未知数 今天不学&#xff0c;因为我们要活在当下&#xff0c;我就是玩嘿嘿~ –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–…