我看不出下面这两个查询有什么不同:
query_join = select a.id, b.name, a.telephone, a.description from tb_industry a left outer join tb_sector b on a.sector_id = b.id
query_select = select a.id, b.name, a.telephone, a.description from tb_industry a , tb_sector b WHERE a.sector_id = b.id结果是完全相同的。现在我猜这是可能发生的,但我想得到一些启发,在哪些情况下只有query_join是最好的,在哪些情况下query_condition是最好的?
发布于 2009-11-19 18:44:21
第一个是外连接。这将显示表A中的行,即使表B中没有匹配的行也是如此。假设表包含以下数据:
select a.name, a.sector_id from tb_industry a;
name sector_id
---- ---------
A 1
B 2
C 3
Select b.id, b.name from tb_sector b;
id name
-- ----
1 X
2 Y(请注意,没有id为3的tb_sector行。)
外部连接仍然返回表A中的所有行,其中应该来自表B的值为NULL:
select a.name, a.sector_id, b.name as sector_name
from tb_industry a left outer join tb_sector b on a.sector_id = b.id;
name sector_id sector_name
---- --------- -----------
A 1 X
B 2 Y
C 3另一个查询(内连接)遗漏了不匹配的行:
select a.name, a.sector_id, b.name as sector_name
from tb_industry , tb_sector b where a.sector_id = b.id;
name sector_id sector_name
---- --------- -----------
A 1 X
B 2 Y以下查询也是一个内部联接,使用较新的ANSI联接语法:
select a.name, a.sector_id, b.name as sector_name
from tb_industry a
join tb_sector b on a.sector_id = b.id;
name sector_id sector_name
---- --------- -----------
A 1 X
B 2 Y如果没有OUTER关键字,则连接是内部连接。
发布于 2009-11-19 18:36:07
它们并不相同,尽管它们可能会根据您的数据返回相同的结果。
第一个是左外部连接,因此如果相应的表没有匹配的条目,则将返回行。
第二个实质上是一个内部连接,所以除非两个表都有匹配的条目,否则不会返回行。
这取决于您的偏好,但是当查询比较复杂时,第一种类型的语法更容易阅读。
发布于 2009-11-19 18:35:16
当您想要从从中选择的表中检索所有结果,并在存在匹配项时检索来自左侧或右侧表(LEFT JOIN、right JOIN)的值时,可以使用联接。
当您想要显式匹配时,可以使用查询条件样式。
希望它能帮上忙!w3schools在这方面有一些简单而基本的例子。
https://stackoverflow.com/questions/1762333
复制相似问题