【问题标题】:Is inner join performed by default? [closed]默认情况下是否执行内连接? [关闭]
【发布时间】:2012-11-01 11:49:22
【问题描述】:

我想知道为什么需要将(主键=外键)放在 where 语句中。表格通过这些标准相互关联。那么,为什么每个人都在 where 子句或 *join*s 中使用它?

我的意思是代替

选择 a.name, b.name 从 a,b 其中 (a.fk = b.pk) AND (something = "something")

如果有人说

... 选择 a.name, b.name 从 a,b 哪里(某事=“某事”)

够了吗?

【问题讨论】:

  • 它不会自动发生,毕竟你可能并不真正想要它。
  • 并非所有表都通过键关联,有时您会有一个复合键,或者您可能想要加入外键以外的其他内容。
  • 为什么没有人要求澄清而不是给出“减号”!
  • 表连在一起的时候就没有必要了。对?放在where子句里绝对没用
  • 通常,您会使用join。据我所知,这个from a,b 已经过时了。无论如何,它的默认值是没有约束的内部连接(笛卡尔积 - 所有 n x m 组合),而不是按键的神奇连接。

标签: sql database primary-key where-clause


【解决方案1】:

首先,不幸的是,并不是每个人都使用外键。其次,不应该假设父表和子表应该通过各自表的 PK 和 FK 自动连接,即使这可能是最常见的。

SQL ANSI 委员会的成员非常聪明。我敢肯定,他们已经全面考虑了这一点,并认为当前的标准是最安全、最可靠的。

顺便说一句,Linq 的一个非常好的地方是,如果表定义了正确的 FK,您就不必指定连接。当然假设你正在做内部连接。假设你真的想加入 PK 和 FK。

【讨论】:

  • 如果表格以适当的方式(标准方式)相关,则无需使用 (pk=fk) 的东西。对吗?
  • @Computer_guy - 如果您不想以“标准”方式连接这两个表怎么办?
  • 你是对的。我说的是 where 子句过长的情况。我要说的是,以标准方式,应该省略那些额外的信息以使该子句更具可读性,并且不会对查询产生影响。对吗?
  • @Computer_guy - 你是在问你是否可以省略使用你正在使用的数据库?那么答案是否定的——它会做其他事情。或者您是否在问在数据库中实现自动位置是否是一个好主意? (仍然没有,但这个问题是题外话)
  • 我明白你为什么想说。但是如果我们以标准的方式定义关系,那么就不能输入不遵循关系规则的数据
猜你喜欢
  • 2013-08-31
  • 2016-05-19
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
  • 2016-02-28
相关资源
最近更新 更多