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

等于vs的sql语句

齐招
2023-03-14
问题内容

假设有人来找您,并说我们将通过用equals替换equals来减少我们编写的SQL数量IN。既可以用于单个标量值,也可以用于数字列表。

SELECT * 
  FROM table 
 WHERE id = 1

或者

SELECT * 
  FROM table 
 WHERE id IN (1)

这些语句等于优化器产生的内容吗?

从表面上看,这看起来确实很简单,但是由于两个原因,它导致了简化:1.不需要复制大型SQL块;并且2.我们不会过度使用动态SQL。

这是一个人为的示例,但请考虑以下内容。

select a.* from tablea a 
join tableb b on a.id = b.id
join tablec c on b.id2 = c.id2
left join tabled d on c.id3 = c.id3
where d.type = 1

…对于不止一种情况,同样如此

select a.* from tablea a 
join tableb b on a.id = b.id
join tablec c on b.id2 = c.id2
left join tabled d on c.id3 = c.id3
where d.type in (1,2,3,4)

(这甚至不是一个很大的声明)

可以想象,您可以执行字符串连接,但是鉴于ORM的使用,这是不理想的,而且动态SQL字符串连接总是以良好的意愿开始的(至少在这些部分中如此)。


问题答案:

这两个会产生相同的执行计划-无论是table scanindex scanindex seek取决于是否/如何你有你的表建立索引。

您可以自己查看-显示图形执行计划(SQL Server Management Studio) -请参阅“使用执行计划选项”一节。



 类似资料:
  • 问题内容: 标签列具有“苹果香蕉橙”和“草莓香蕉柠檬”之类的值。我想找到等效的SQLAlchemy语句 我应该怎么做才能做到这一点? 问题答案: 每列都有一个方法,可以在中使用。给定一个搜索字符串,请在任一侧添加一个字符以在两个方向上作为子字符串进行搜索。

  • 问题内容: 我很难弄清楚如何将这个简单的SQL语句转换为(c#)linq到SQL: 任何帮助表示赞赏 问题答案: 我仍在学习LINQ,但这似乎可行 我希望能够很好地将LINQ转换为SQL,因为我仅在对象上进行过尝试。

  • Java中的有两个类似的方法和。 它们之间有什么区别? 当它们输出不同的结果时?

  • 问题内容: 从Java 1.5中,你几乎可以互换使用在许多情况下。 但是,我发现代码中存在潜在的缺陷,这让我有些惊讶。 如下代码: 值相等时,似乎无法正确设置不匹配,尽管我无法确定在什么情况下。我在Eclipse中设置了一个断点,发现值都为137,并且检查了布尔表达式,并说它是假的,但是当我越过它时,它会将不匹配设置为true。 将条件更改为: 解决了问题。 谁能阐明为什么会这样?到目前为止,我只

  • 问题内容: String s1 = “andrei”; String s2 = “andrei”; 提供以下代码,为什么第二个比较s2 == s3为true?s2.toString()返回的实际上是什么?实际位于哪里? 问题答案: 首先是无操作: 其次,对String常量进行了插值,因此s1和s2在幕后被更改为相同的String实例。

  • 问题内容: 我有几个内容表,我想用随机的文本段落来填充。在MS Word中,我可以简单地将= rand()和presto放在一起!我得到了三段现成的文字。 是否存在可用于使用t-sql生成随机词典单词的SQL脚本/命令? 问题答案: