理解LEFT JOIN在MySQL中的内部工作

时间:2015-04-16 03:37:20

标签: mysql sql join

我已经浏览了许多关于SQL连接的在线教程,甚至 Jeff's article ,我认为我仍然无法正确理解SQL如何在内部加入工作。例如,让我们考虑以下情况。

我有2个表TableATableB以及一些虚拟数据。

CREATE TABLE TableA(
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(500),
PRIMARY KEY(id)
)ENGINE=InnoDB;


CREATE TABLE TableB(
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(500),
PRIMARY KEY(id)
)ENGINE=InnoDB;

INSERT INTO TableA(name) VALUES('A');
INSERT INTO TableA(name) VALUES('B');
INSERT INTO TableA(name) VALUES('C');
INSERT INTO TableA(name) VALUES('D');

INSERT INTO TableB(name) VALUES('x');
INSERT INTO TableB(name) VALUES('A');
INSERT INTO TableB(name) VALUES('Y');
INSERT INTO TableB(name) VALUES('C');

表A:

enter image description here

表B:

enter image description here

现在我正在运行以下查询:

SELECT TableA.id, TableA.name, TableB.id, TableB.name
FROM TableA
LEFT JOIN TableB
ON TableA.name=TableB.name;

给了我输出:

enter image description here

问题:

如何在内部中检索数据,检索并生成结果表?

2 个答案:

答案 0 :(得分:3)

阅读Code Project上的原始文章将对您有所帮助:Visual Representation of SQL Joins

enter image description here

另请查看此帖子:SQL SERVER – Better Performance – LEFT JOIN or NOT IN?。

Difference between JOIN and OUTER JOIN in MySQL找到原始的。

答案 1 :(得分:0)

当您进行左连接时,无论右侧表格中是否有相应的行,左侧表格中每行至少会返回一行。如果右侧没有相应的行,则结果表中的值对于这些列将为空。

将左连接更改为内连接时,不会返回左侧行。那是因为连接条件必须为真。

对列名称进行别名可能会有所帮助,因此您可以知道哪些来自tablea,哪些来自表b。尝试之后,请删除左侧关键字并再次尝试。我希望这会有所帮助。

SELECT TableA.id TABA_ID, TableA.name TABA_NAME, 
       TableB.id TABB_ID, TableB.name TABB_NAME
FROM TableA
LEFT JOIN TableB
ON TableA.name=TableB.name;