连接和不连接选择之间的区别?
我看到下面的两个查询之间没有区别:连接和不连接选择之间的区别?
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最好的情况是什么?
当您想要从所选表格中检索所有结果时,使用连接以及在匹配时从左侧或右侧表格(左连接,右连接)中的值。
当您想要显式匹配时,使用查询条件样式。
希望它有帮助! w3schools有这方面的一些简单和基本的例子。
如果他们为您返回相同的结果,那么tb_industry中的每个项目都有一个tb_sector中的项目。你的第二个查询对于左连接的等价物是不正确的,它将是a.sector_id * = b.sector_id。
* =语法已弃用,并在较新的RDBMS中逐步淘汰。
它们不尽相同,尽管它们可能会根据您的数据返回相同的结果。
第一个是左外连接,所以如果相应的表没有匹配的条目,将返回行。
第二个本质上是一个内部联接,所以不会返回行,除非两个表都有匹配的条目。
这取决于您的偏好,但查询复杂时,第一种语法更容易阅读。
联接是在查询中表达关系的新语法。它们提供了外部连接的好处,这在where子句中是不可能的(Oracle通过在过滤器中添加(+)来扩展语言,但它非常有限且不容易理解)。在使用内部连接时,无关紧要,结果是一样的。
这是主观的,但在我看来,连接更容易阅读。
使用左外连接的连接查询会引入来自数据库的甚至不匹配的记录。
您的第二个查询只会带来匹配的结果。
第一个是外部连接。这说明从表格中的行即使表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
(注意,没有tb_sector一行ID 3。)
外连接仍返回从表格中的所有行,与值空值应该有来自表B:
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关键字,则联接是内部联接。