哪个表恰好是JOIN语句(SQL)中的“左”表和“右”表?

时间:2010-11-05 20:19:33

标签: sql join

什么使得给定的表成为左表?

该表是否在查询的“发件人”部分中显示?

或者,它是左表,因为它位于=运算符的左侧?

以下是等效的

SELECT *
FROM left_table
LEFT JOIN right_table ON left_table.right_id = right_table.id

SELECT *
FROM left_table
LEFT JOIN right_table on right_table.left_id = left_table.id

???

由于

5 个答案:

答案 0 :(得分:37)

Left表是select中的第一个表。是的,你的两个例子是等价的。

答案 1 :(得分:10)

右表始终是您要加入的表。所以,是的,你的两个陈述都是等同的。

JOIN [Table] ON ...

[表格]总是正确的表格。

答案 2 :(得分:6)

大致“左”是从左到右阅读整个FROM子句中首先出现的所有内容的结果 - 包括其他JOIN,子查询,VIEW和STORED PROCEDURES的结果。

两个SQL语句都是等效的,因为=子句的ON部分的JOIN运算符是symmetric(如果a = b则b = a)所以无论顺序如何,结果都是一样的。

常规连接仅显示JOIN的ON子句为真的行,而如果条件为假,则LEFT JOIN还显示“left”的记录(对于来自“right”的任何列,显示NULL选择)。

例如:

-- People:           -- Car
id | name            owner_id | model
---+------------     ---------+------------
1  | Paul            1        | Ferrari
2  | Nancy           2        | Porsche
3  | Arthur          NULL     | Lamborghini
4  | Alfred          10       | Maserati

> select people.name, car.model from people join car on car.owner_id=people.id;

name     | model
---------+--------------
Paul     | Ferrari
Nancy    | Porsche
2 record(s) found

> select people.name, car.model from people left join car on 
  car.owner_id=people.id;

name     | model
---------+--------------
Paul     | Ferrari
Nancy    | Porsche
Arthur   | NULL
Alfred   | NULL     
4 record(s) found

> select people.name, car.model from people left join car on 
  people.id = car.owner_id;

name     | model
---------+--------------
Paul     | Ferrari
Nancy    | Porsche
Arthur   | NULL
Alfred   | NULL     
4 record(s) found

答案 3 :(得分:4)

有关联接的详细演练,请参阅此内容:http://en.wikipedia.org/wiki/Join_(SQL)

是的,这两个陈述都是等同的: - )

答案 4 :(得分:3)

是的,它由JOIN运算符一侧确定,表格出现在。你的两个例子确实是等价的。