MySQL的 4 种连接查询

目录

[一、内连接(INNER JOIN)](#一、内连接(INNER JOIN))

[二、外连接(LEFT JOIN、RIGHT JOIN 和 FULL JOIN)](#二、外连接(LEFT JOIN、RIGHT JOIN 和 FULL JOIN))

[三、交叉连接(CROSS JOIN)](#三、交叉连接(CROSS JOIN))

四、自连接


在 MySQL 中,常见的连接查询有四种:内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN 和 FULL JOIN)、交叉连接(CROSS JOIN)和自连接。以下是对每种连接查询的详细介绍。

一、内连接(INNER JOIN)

  • 内连接是最常用的连接类型之一,它返回两个表中符合连接条件的行。如果两个表中的行没有匹配的值,则不会包含在结果集中。

  • 语法:

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

  • 示例:

    SELECT Orders.OrderID, Customers.CustomerName
    FROM Orders
    INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

二、外连接(LEFT JOIN、RIGHT JOIN 和 FULL JOIN)

  • 外连接用于返回左表(左侧表)的所有行,以及与右表(右侧表)匹配的行。如果右表中没有匹配的行,则会用 NULL 值填充。

  • LEFT JOIN:返回左表的所有行以及右表中符合条件的行。

  • RIGHT JOIN:返回右表的所有行以及左表中符合条件的行。

  • FULL JOIN:返回左表和右表的所有行,如果某行在一个表中没有匹配,则用 NULL 值填充。

  • 语法:

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

  • 示例:

    -- LEFT JOIN
    SELECT Customers.CustomerName, Orders.OrderID
    FROM Customers
    LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

    -- RIGHT JOIN
    SELECT Orders.OrderID, Customers.CustomerName
    FROM Orders
    RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

    -- FULL JOIN
    SELECT Customers.CustomerName, Orders.OrderID
    FROM Customers
    FULL JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

三、交叉连接(CROSS JOIN)

  • 交叉连接返回两个表的笛卡尔积,即两个表中所有可能的组合。

  • 语法:

    SELECT * FROM table1 CROSS JOIN table2;

  • 示例:

    SELECT Customers.CustomerName, Orders.OrderID
    FROM Customers
    CROSS JOIN Orders;

四、自连接

  • 自连接是指在同一个表内进行连接操作,通常用于在表中查找相关联的信息。

  • 语法:

    SELECT a.column1, b.column2
    FROM table AS a, table AS b
    WHERE a.column = b.column;

  • 示例:

    SELECT e1.EmployeeName AS Employee, e2.EmployeeName AS Manager
    FROM Employees AS e1, Employees AS e2
    WHERE e1.ManagerID = e2.EmployeeID;

相关推荐
q9085447039 分钟前
MySQL 二进制日志binlog解析
mysql·binlog·binlog2sql·my2sql
Edingbrugh.南空1 小时前
Flink SQLServer CDC 环境配置与验证
数据库·sqlserver·flink
码不停蹄的玄黓1 小时前
MySQL分布式ID冲突详解:场景、原因与解决方案
数据库·分布式·mysql·id冲突
爱上语文2 小时前
Redis基础(6):SpringDataRedis
数据库·redis·后端
Java初学者小白2 小时前
秋招Day14 - Redis - 应用
java·数据库·redis·缓存
帧栈3 小时前
mysql基础(一)快速上手篇
mysql
丶意冷3 小时前
mybatisPlus分页方言设置错误问题 mybatisPlus对于Oceanbase的Oracle租户分页识别错误
java·数据库·oracle·oceanbase
时序数据说5 小时前
为什么时序数据库IoTDB选择Java作为开发语言
java·大数据·开发语言·数据库·物联网·时序数据库·iotdb
戒不掉的伤怀5 小时前
【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】
服务器·数据库·mysql
cv高级工程师YKY5 小时前
服务器 - - QPS与TPS介绍
数据库