当前位置: 首页 > 面试题库 >

如何最好地组织“选择”中的内部联接

贺俊楚
2023-03-14
问题内容

假设我有3张桌子,每张桌子都与另一张桌子相关,

当我需要从每个表中获取一列时,如何组织(内部联接)会有所不同吗?

Select table1.column1,table2.column2,table3.column2
From table1 
Inner Join table2 on ..... etc
Inner Join table3 on .....

换句话说,我可以将(table2)放在(From)之后吗?

Select table1.column1,table2.column2,table3.column2
From table2
Inner Join table1 on ..... etc
Inner Join table3 on .....

问题答案:

对于大多数查询,顺序无关紧要。

  • INNER JOIN既具有关联性又具有可交换性,因此表顺序无关紧要
  • SQL是声明性的。也就是说,定义查询的方式不是优化器的工作方式。它不会像您编写时那样逐行执行。

那就是…

  • 外连接既不是关联的也不是可交换的
  • 对于复杂的查询,优化器将“最佳猜测”,而不是经历所有“花费”过多的可能性。餐桌顺序 可能很 重要


 类似资料:
  • 我想从两个select查询的内部联接中选择两列。我编写了一个连接三个表的查询,从结果中我只希望得到两列。但是我的查询显示错误。我使用的是oracle sql Developer。 我只想要名字和姓氏,但我得到了这样的错误:

  • 我得到了下面的SQL,我想将其转换为有效的HQL。这方面的问题是,不允许根据文档加入子查询。尽管这些是旧文档(v3.3),但在hibernate 5.3中,这一节似乎仍然适用。 我想出了这个HQL: 尝试执行此HQL查询会导致此异常 这将提示 在. 有没有办法加入HQL中的子查询?如果不是,那么获得与具有HQL的SQL相同的结果的最佳方法是什么? 我不擅长转换

  • 我想从short_name(国家名称)、name(州表)或region_name的任何可用数据中选择post_id。对region_name而不是short_name(国家名称),name(州表)执行以下查询,结果为真。 请告诉我,我哪里弄错了!

  • 我需要发票,invoice_details表的所有列,但我想从我的付款表中只得到一列(列名:)。我对它有什么疑问?这是我的控制器。

  • 问题内容: 这个问题已经在这里有了答案 : INNER JOIN ON vs WHERE子句 (12个答案) 7年前关闭。 我有两个选择连接SQL语句: 显然,它们的结果相同。但是它们之间没有任何区别,例如性能,可移植性。 问题答案: 一个区别是,第一个选项通过在where子句中表达联接条件来隐藏意图。 第二个选项,写出连接条件的条件对于阅读查询的用户来说更加清楚。它显示了查询的确切意图。 至于性

  • 问题内容: 我被困住了…一个带有“值”和“数据类型”列的“数据”表填充有发动机负载和车辆速度,每个记录都标有日期,时间,经纬度,长时戳。我想查询车辆行驶时发动机负载是否超过10%(例如,速度> 0)。我可以创建查询来选择发动机负载,也可以创建查询来选择车速,但是当> 10%并且车辆移动时,如果日期,时间和时间长,如何创建查询来选择发动机负载?相等吗? 此查询不起作用,但是它提供了我要尝试执行的操作