介绍
在 MySQL 中,使用JOIN 进行关联查询,可以通过 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN, NATURAL JOIN 等语法实现。其中,LEFT JOIN 和 RIGHT JOIN 能够确保可以关联到所有的左(或右)表数据。但是,在编写 RIGHT JOIN 或 LEFT JOIN 查询时不使用关键字“RIGHT”或“LEFT”会发生什么呢?
LEFT JOIN 查询
LEFT JOIN 查询将返回左表中所有的记录以及右表中与左表中记录有关联的记录。
使用 LEFT JOIN 查询
SELECT *
FROM table1
LEFT JOIN table2
ON table1.key = table2.key;
上述代码将返回左表 table1 中所有的记录以及右表 table2 中与 table1 中的 key 有关联的记录。
不使用 LEFT 关键字的查询
在不使用关键字 LEFT 的情况下,我们需要将查询顺序进行调换,并且使用 WHERE 进行过滤:
SELECT *
FROM table1, table2
WHERE table1.key = table2.key(+);
在上述代码中,我们使用了“(+)”符号来表示关联,它同样可以被解译为“LEFT JOIN”。
验证查询结果
我们可以使用以下代码来验证两种查询方法的结果是否一致:
SELECT *
FROM table1, table2
WHERE table1.key = table2.key(+)
UNION
SELECT *
FROM table1
LEFT JOIN table2
ON table1.key = table2.key;
如果上述代码的查询结果是空的,说明两种查询方法得到的结果一致。
RIGHT JOIN 查询
RIGHT JOIN 查询将返回右表中所有的记录以及左表中与右表中记录有关联的记录。
使用 RIGHT JOIN 查询
SELECT *
FROM table1
RIGHT JOIN table2
ON table1.key = table2.key;
上述代码将返回右表 table2 中所有的记录以及左表 table1 中与 table2 中的 key 有关联的记录。
不使用 RIGHT 关键字的查询
在不使用关键字 RIGHT 的情况下,我们需要将查询顺序进行调换,并且使用 WHERE 进行过滤:
SELECT *
FROM table1, table2
WHERE table1.key(+) = table2.key;
在上述代码中,我们使用了“(+)”符号来表示关联,它同样可以被解译为“RIGHT JOIN”。
验证查询结果
我们可以使用以下代码来验证两种查询方法的结果是否一致:
SELECT *
FROM table1, table2
WHERE table1.key(+) = table2.key
UNION
SELECT *
FROM table1
RIGHT JOIN table2
ON table1.key = table2.key;
如果上述代码的查询结果是空的,说明两种查询方法得到的结果一致。
总结
在使用 LEFT JOIN 或 RIGHT JOIN 进行关联查询时,不使用相应关键字并使用其它语法代替时,查询结果与使用关键字的结果是相同的。但是,使用相应关键字能使代码更加简洁易读,建议使用关键字完成相应的操作。