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

谢谢点赞

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

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

相关文章

泰坦尼克号乘客生存情况预测分析2

泰坦尼克号乘客生存情况预测分析1 泰坦尼克号乘客生存情况预测分析2 泰坦尼克号乘客生存情况预测分析3 泰坦尼克号乘客生存情况预测分析总 背景描述 Titanic数据集在数据分析领域是十分经典的数据集,非常适合刚入门的小伙伴进行学习! 泰坦尼克号轮船的…

react 基础学习笔记一

1、jsx语法过程 jsx使用react构造组件,通过bable进行编译成js对象,在用ReactDom.render()渲染成DOM元素,最后再插入页面的过程。 2、创建组件 组件的定义:将公用的代码组装成一个独立的文件,保持代码独立性&#xff0…

如何将图片压缩100k?几个方法帮你解决

很多平台为了保证用户体验,会限制我们上传图片的大小,所以我们在社交平台分享图片的时候,就会看有些要求为100kb的字样,那么我们怎么把一些过大的图片压缩100kb大小呢?试试下面介绍的这几个方法吧。 在工具栏中选择【…

每天五分钟深度学习:如何理解梯度下降算法可以逼近全局最小值?

本文重点 上节课程中,我们已经知道了逻辑回归的代价函数J。要想最小化代价函数,我们需要使用梯度下降算法。 梯度下降算法地直观理解: 为了可视化,我们假设w和b都是单一实数,实际上,w可以是更高地维度。 代价函数J是在水平轴w和b上的曲面,因此曲面的高度就是J(w,b)在…

深入理解分布式事务① ---->分布式事务基础(四大特性、五大类型、本地事务、MySQL并发事务问题、MySQL事务隔离级别命令设置)详解

目录 深入理解分布式事务① ---->分布式事务基础(四大特性、五大类型、本地事务、MySQL并发事务问题、MySQL事务隔离级别命令设置)详解事务的基本概念1、什么是事务?2、事务的四大特性2-1:原子性(Atomic&#xff09…

创建electron,解决包清理的问题,解决镜像源卡住下载时间长

我的电脑用户名是Anyphasy,我的node.js安装在D:\developp\nodejss18.18.0 使用npm config get prefix查看node.js安装路径 npm config get prefix 创建electron 创建package.json文件,它里面记载了你的electron版本,项目描述,以及启动命令等信息 npm init -y 先查看你自己的…

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

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

PyCharm 中的特殊标记

在使用 PyCharm 开发 Python 项目的时候,经常会有一些特殊的标记,有些是 IDE 提示的代码规范,有些则为了方便查找而自定义的标记。 我在之前写过一些关于异常捕获的文章:Python3 PyCharm 捕获异常报 Too broad exception clause …

服务器数据恢复—Storwize V3700存储数据恢复案例

服务器存储数据恢复环境: 某品牌Storwize V3700存储,10块硬盘组建了2组Mdisk加入到一个存储池中,一共创建了1个通用卷来存放数据,主要数据为oracle数据库。 服务器存储故障: 其中一组Mdisk中两块磁盘出现故障离线&…

Python常用包介绍

数据处理 1.numpy(数据处理和科学计算) import numpy as np np.set_printoptions(precision2, suppressTrue) # 设置打印选项,保留两位小数,禁止科学计数法arr np.arange(1, 6) # 使用arange函数创建数组 print(arr)# 输出&…

【1731】jsp 房租跟踪监控管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 房租跟踪监控管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysq…

实时采集麦克风并播放(springboot+webscoekt+webrtc)

项目技术 springbootwebscoektwebrtc 项目介绍 项目通过前端webrtc采集麦克风声音,通过websocket发送后台,然后处理成g711-alaw字节数据发生给广播UDP并播放。 后台处理项目使用线程池(5个线程)接受webrtc数据并处理g711-alaw字节数组放到Map容器中&…