我已经浏览了许多关于SQL连接的在线教程,甚至 Jeff's article ,我认为我仍然无法正确理解SQL如何在内部加入工作。例如,让我们考虑以下情况。
我有2个表TableA
和TableB
以及一些虚拟数据。
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');
现在我正在运行以下查询:
SELECT TableA.id, TableA.name, TableB.id, TableB.name
FROM TableA
LEFT JOIN TableB
ON TableA.name=TableB.name;
给了我输出:
如何在内部中检索数据,检索并生成结果表?
答案 0 :(得分:3)
阅读Code Project上的原始文章将对您有所帮助:Visual Representation of SQL Joins。
另请查看此帖子:SQL SERVER – Better Performance – LEFT JOIN or NOT IN?。
答案 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;