如何在没有ON条件的情况下使用MySQL JOIN?

如何在没有ON条件的情况下使用MySQL JOIN?

在MySQL中, JOIN语句用于合并两个或多个表中的行,但通常需要使用ON条件来指定JOIN的条件。然而,有时候我们需要在没有ON条件的情况下进行JOIN操作。那么,该如何使用MySQL JOIN呢?

阅读更多:MySQL 教程

MySQL JOIN简介

在开始介绍如何在没有ON条件的情况下使用MySQL JOIN之前,我们先简单了解一下MySQL JOIN操作的常用语法。

INNER JOIN

INNER JOIN(内连接)用于只返回两个表中都有匹配行的结果。常用的INNER JOIN写法是:

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

LEFT (OUTER) JOIN

LEFT (OUTER) JOIN (左外侧连接)用于返回左表中的所有行以及与右表中的匹配行。 如果没有匹配行,则返回 NULL 值。常用的LEFT JOIN写法是:

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

RIGHT (OUTER) JOIN

RIGHT (OUTER) JOIN (右外侧连接)用于返回右表中的所有行以及与左表中的匹配行。 如果没有匹配行,则返回 NULL 值。常用的RIGHT JOIN写法是:

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

FULL (OUTER) JOIN

FULL (OUTER) JOIN (全外侧连接)用于返回两个表中的所有行。 如果没有匹配行,则返回 NULL 值。常用的FULL JOIN写法是:

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

无ON条件下的MySQL JOIN

通常情况下,我们使用MySQL JOIN语句时,都会添加一个ON条件来指定匹配两个表之间的关系。这个指定可以是简单的匹配,也可以是复杂的逻辑关系。但是,在一些特定的情况下,我们需要没有ON条件的JOIN语句来查询数据,比如:

  • 在表中没有可匹配的列时;
  • 我们需要在匹配列之外的其他列上比较数据。

这时候就需要使用不同的语法来进行JOIN操作。

CROSS JOIN

CROSS JOIN(交叉连接)操作是获取两个或多个表的所有行的笛卡尔积,这意味着返回行的数目等于所有表的行数的乘积。下面是常用的CROSS JOIN写法:

SELECT * FROM table1 CROSS JOIN table2;

NATURAL JOIN

NATURAL JOIN(自然连接)操作会使用两个表之间的列进行简单的匹配,如果两个表中有相同名称的列,则匹配这些列。常用的NATURAL JOIN写法是:

SELECT * FROM table1 NATURAL JOIN table2;

USING关键字

USING关键字是一种在没有ON条件的情况下进行JOIN操作的方法。我们可以使用USING指定需要匹配的列。常用的USING写法如下:

SELECT * FROM table1 JOIN table2 USING(column_name);

示例代码

下面是一些使用无ON条件下MySQL JOIN的示例代码:

CROSS JOIN

-- 创建表格1
CREATE TABLE t1 (
    id INT PRIMARY KEY,
    name VARCHAR(20)
);

-- 插入数据
INSERT INTO t1 VALUES (1, "John"), (2, "Bob"), (3, "Mike");

-- 创建表格2
CREATE TABLE t2 (
    id INT PRIMARY KEY,
    age INT
);

-- 插入数据
INSERT INTO t2 VALUES (1, 20), (2, 30), (3, 40);

-- 执行CROSS JOIN操作
SELECT * FROM t1 CROSS JOIN t2;

运行结果:

id name id age
1 John 1 20
2 Bob 1 20
3 Mike 1 20
1 John 2 30
2 Bob 2 30
3 Mike 2 30
1 John 3 40
2 Bob 3 40
3 Mike 3 40

NATURAL JOIN

-- 创建表格1
CREATE TABLE t1 (
    id INT PRIMARY KEY,
    name VARCHAR(20),
    age INT
);

-- 插入数据
INSERT INTO t1 VALUES (1, "John", 20), (2, "Bob", 30), (3, "Mike", 40);

-- 创建表格2
CREATE TABLE t2 (
    id INT PRIMARY KEY,
    name VARCHAR(20),
    age INT
);

-- 插入数据
INSERT INTO t2 VALUES (1, "John", 20), (2, "Bob", 30), (3, "Mike", 40);

-- 执行NATURAL JOIN操作
SELECT * FROM t1 NATURAL JOIN t2;

运行结果:

id name age
1 John 20
2 Bob 30
3 Mike 40

USING关键字

-- 创建表格1
CREATE TABLE t1 (
    id INT PRIMARY KEY,
    name VARCHAR(20),
    age INT
);

-- 插入数据
INSERT INTO t1 VALUES (1, "John", 20), (2, "Bob", 30), (3, "Mike", 40);

-- 创建表格2
CREATE TABLE t2 (
    id INT PRIMARY KEY,
    name VARCHAR(20),
    birthday DATE
);

-- 插入数据
INSERT INTO t2 VALUES (1, "John", "2000-01-01"), (2, "Bob", "1990-05-10"), (3, "Mike", "1980-06-20");

-- 执行USING操作
SELECT * FROM t1 JOIN t2 USING(name);

运行结果:

id name age birthday
1 John 20 2000-01-01
2 Bob 30 1990-05-10
3 Mike 40 1980-06-20

结论

本文介绍了如何在没有ON条件的情况下使用MySQL JOIN。笔者推荐使用USING关键字进行操作,因为它比NATURAL JOIN更加安全,而且交叉联接会返回太多无用的数据。在合适的场景下,我们可以使用这些方法来进行数据查询和处理。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程