如果我使用Imports Word = Microsoft.Office.Interop.Word
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim oWord As Word.Application
Dim oDoc As Word.Document
'Start Word and open the document template.
oWord = CreateObject("Word.Application")
oWord.Visible = True
oDoc = oWord.Documents.Add("C:\MyTemplate.dotx")
oDoc.Bookmarks.Item("CustomerName").Range.Style = "John Smith"
oDoc.Bookmarks.Item("CustomerPhone").Range.Style = "(123) 456-7890"
oDoc.Bookmarks.Item("CustomerEmail").Range.Style = "Jsmith@mail.com"
Me.Close()
End Sub
End Class
和winner IN ('Subject1','Subject2');
以下链接中表17的查询:
https://www.w3resource.com/sql-exercises/sql-retrieve-from-table.php#SQLEDITOR
答案 0 :(得分:2)
对于具有两个元素的列表,这没有什么不同。
但是,当列表由常量表达式组成时,MySQL会优化IN
。它基本上对它们进行排序,并对列表进行二进制搜索。使用更长的列表可以节省大量资金。正如documentation所解释的:
如果所有值都是常量,则根据类型对它们进行求值 的expr和排序。然后使用 二进制搜索。这意味着如果IN值列表,则IN非常快 完全由常量组成。
通常,IN
更安全,并且可以更好地捕获所需的列。采取这样的条件非常容易:
where winner = 'Subject1' OR winner = 'Subject2'
并添加另一个条件:
where winner = 'Subject1' or winner = 'Subject2' and
foo = 'bar'
并且这种逻辑可能不再是您真正想要的-因为它确实意味着:
where winner = 'Subject1' or
(winner = 'Subject2' and foo = 'bar')
IN
不会发生这种情况:
where winner in ('Subject1', 'Subject2') and
foo = 'bar'
答案 1 :(得分:1)
如果所讨论的列上有索引,则IN
的表现将大大优于OR
。经验表明,当列上有OR
时,数据库始终不使用索引。
如果所讨论的列上没有索引 ,则如果列表长于大约5,则IN
的表现优于OR
(进行一些串行比较会更快)而不是遍历一个小的BTree值,这就是数据库将列表转换成要执行的内容。
IN
也是可读性最好的,并且如果省略了括号,也可以避免SQL的运算符优先级陷阱,即x = a or x = b and c = d
被解析为x = a or (x = b and c = d)
而不是(可能)预期的(x = a or x = b) and c = d
答案 2 :(得分:0)
使用NOT时要小心:
select col1 from
(
select 1 as col1
union all
select 2 as col1
union all
select 3 as col1
union all
select 4 as col1
)x
where x.col1 NOT IN (2,3,4) ;
----------
col1
1
但是
select col1 from
(
select 1 as col1
union all
select 2 as col1
union all
select 3 as col1
union all
select 4 as col1
)x
where x.col1 != 2 OR x.col1 != 3 OR x.col1 != 4 ;
---
col1
1
2
3
4