Sql 左联接是否返回与左表相同的行数?

Sql 左联接是否返回与左表相同的行数?,sql,Sql,它是否总是返回与t1相同的行数?不一定: SELECT * FROM t1 LEFT JOIN t2 ON t1.fk = t2.id; 返回2行: CREATE TABLE t1(id int, fk int); INSERT INTO t1 VALUES (1,1); CREATE TABLE t2(id int, value int); INSERT INTO t2 VALUES(1,1),(1,2); SELECT * FROM t1 LEFT JOIN t2 ON t1.f

它是否总是返回与t1相同的行数?

不一定:

SELECT * 
FROM t1
LEFT JOIN t2 ON t1.fk = t2.id;
返回2行:

CREATE TABLE t1(id int, fk int);
INSERT INTO t1 VALUES (1,1);

CREATE TABLE t2(id int, value int);
INSERT INTO t2 VALUES(1,1),(1,2);


SELECT * 
FROM t1
LEFT JOIN t2 ON t1.fk = t2.id;
不一定:

SELECT * 
FROM t1
LEFT JOIN t2 ON t1.fk = t2.id;
返回2行:

CREATE TABLE t1(id int, fk int);
INSERT INTO t1 VALUES (1,1);

CREATE TABLE t2(id int, value int);
INSERT INTO t2 VALUES(1,1),(1,2);


SELECT * 
FROM t1
LEFT JOIN t2 ON t1.fk = t2.id;

左联接的契约声明,如果没有WHERE子句可以从结果集中删除记录,则出现在联接左侧的所有记录将至少出现一次。考虑下面的数据集:

id  fk  id  value

1   1   1   1

1   1   1   2
您的查询将返回此结果集:

t1
id | fk
1  | 1
2  | 2

t2
id | value
1  | 1
1  | 2

请注意,第一个表的fk=2与第二个表不匹配。此记录仍显示在结果集中,但来自第二个表的所有列都为空。另外,请注意,fk=1记录出现两次,因为第一个表中的单个记录与第二个表匹配了两次。

左联接的约定规定,如果没有WHERE子句可以从结果集中删除记录,则出现在联接左侧的所有记录将至少出现一次。考虑下面的数据集:

id  fk  id  value

1   1   1   1

1   1   1   2
您的查询将返回此结果集:

t1
id | fk
1  | 1
2  | 2

t2
id | value
1  | 1
1  | 2
请注意,第一个表的fk=2与第二个表不匹配。此记录仍显示在结果集中,但来自第二个表的所有列都为空。另外,请注意,fk=1记录出现两次,因为第一个表中的单个记录与第二个表匹配了两次

它是否总是返回与t1相同的行数

没有

左联接是联接,因此将一个表中的一行与另一个表中的多行相匹配。结果集的行数可能相同或更多

它是否总是返回与t1相同的行数

没有


左联接是联接,因此将一个表中的一行与另一个表中的多行相匹配。结果集的行数可能相同或更多。

如果t2.id具有唯一约束,则行数将始终与连接不存在时相同。如果它不是唯一的,那么您将获得同一t1行的多个副本,每个副本都有自己对应的t2行。这对您来说是否足够好取决于您的数据库设计。

如果t2.id具有唯一约束,则行数将始终与连接不存在时相同。如果它不是唯一的,那么您将获得同一t1行的多个副本,每个副本都有自己对应的t2行。这对您来说是否足够好取决于您的数据库设计。

它应该返回t1上的所有内容以及T2中的任何匹配项否,它将根据匹配的键返回t1中的所有行和T2中的相乘行。T2.id上是否有唯一的约束?看起来像是PK。如果有,这个问题的答案应该是肯定的。这是关键点:它应该返回t1上的所有内容以及t2No中的任何匹配项。它将根据匹配的键返回t1中的所有行和T2中的相乘行。T2.id上是否有唯一的约束?看起来像是PK。如果有,这个问题的答案应该是肯定的。这是关键点:但是如果t2.id是主键,那么是;但是如果t2.id是主键,那么是