出⽣⽇期范围的Sql语句_结构化查询语⾔SQL在VBA中⼏种常
见的查询表达⽅式常用的sql查询语句有哪些
在之前的讲解中我们从ADO的创建、连接到记录集的操作,已经讲了很多VBA对数据库的实际操作了,到这⾥,读者应该对⽤VBA操作数据库有了⼀个清晰的印象,从各个步骤上看我们不难得出⼀个重要结论:要让ADO有效⼯作,关键是我们给它发出什么样的SQL指令。
在每⼀讲的讲解中,我已经简单介绍了SQL的情况。现在我们有必要总结⼀下VBA中SQL语句的⼏种常见查询的表达⽅式。
⽅式⼀:Select 查询表达式 From 数据区域
其中,"查询表达式"可以是下列之⼀或其组合,对多种⽅式的组合,⽤逗号搁开:
(1)星号(*)表⽰"数据源"的所有字段。
(2)字段名
(3)常量表达式
(4)任何有效的计算表达⽅式
这类查询的SQL语句我们已经⽤了⾮常多了:如 strSQL = "SELECT * FROM 员⼯信息"
注意点:
1 有时使⽤AS重新命名字段名称 当查询表达式使⽤(2)字段名时,字段名就是其本⾝,使⽤(3)常量表达式和(4)任何有效的计算表达⽅式时,系统将为该字段重新命名⼀个字段名,这个字段名通常没有意义,这时可以在表达式中使⽤AS为字段重新命名,当然对字段名也可以通过使⽤AS为其重新命名。AS并不对查询结果造成实质影响。下⾯是使⽤AS的⼀个例⼦:strSQL = "Select 班级,姓名 AS 名字,语⽂+数学+英语 AS 总成绩 from员⼯信息"
2 使⽤DISTINCT删除重复记录
例如:在"员⼯信息"表中有重复记录,如果希望若⼲重复的记录只显⽰⼀条,可以使⽤DISTINCT进⾏限定。
strSQL = "Select distinct * from 员⼯信息"
例如:数据库中员⼯信息表内容如下:
上述数据中很多是有重复的。我们可以⽤下⾯的代码进⾏排重处理:
Sub mynzdate_2() '有重复数据,排重
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Dim i As Integer
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.RecordSet")
strPath = ThisWorkbook.Path & "mydata2.accdb"
cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath
'strSQL = "SELECT * FROM 信息参考"
strSQL = "Select distinct * from 信息参考"
rsADO.Open strSQL, cnADO, 1, 3
Cells.ClearContents
For i = 0 To rsADO.Fields.Count - 1
Sheets("Sheet1").Cells(1, i + 1) = rsADO.Fields(i).Name
Next i
For i = 1 To rsADO.RecordCount
For j = 0 To rsADO.Fields.Count - 1
Sheets("Sheet1").Cells(i + 1, j + 1) = rsADO.Fields(j)
Next j
rsADO.MoveNext
Next i
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代码截图:
运⾏后显⽰数据:
⽅式⼆ Select 查询表达式 From 数据区域 Where 条件表达式,通过使⽤Where可以设置查询条件。查询的条件表达式可以是:
(1)任何逻辑表达式
如:strSQL = "SELECT * FROM 员⼯信息 WHERE 部门='⼀⼚'"
这种查询在之前的讲解中讲过,这⾥不再举例。
(2)IN/NOT IN ( 表达式1,表达式2,…. ) 注意上⾯的括号不可少,各表达式⽤逗号搁开。
'查询姓名在括号中列出名单范围内的⼈,如总数据如下:
我们要显⽰的是姓名为刘1和朱5的信息,SQL语句如下:
strSQL = "SELECT * FROM 员⼯信息 where 姓名 in ('刘1','朱5')" 代码如下:
Sub mynzdata_4() '总数据内的数据指定显⽰
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Dim i As Integer
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.RecordSet")
strPath = ThisWorkbook.Path & "mydata2.accdb"
cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath
strSQL = "SELECT * FROM 员⼯信息 where 姓名 in ('刘1','朱5')"
rsADO.Open strSQL, cnADO, 1, 3
Cells.ClearContents
For i = 0 To rsADO.Fields.Count - 1
Sheets("Sheet1").Cells(1, i + 1) = rsADO.Fields(i).Name
Next i
For i = 1 To rsADO.RecordCount
For j = 0 To rsADO.Fields.Count - 1
Sheets("Sheet1").Cells(i + 1, j + 1) = rsADO.Fields(j)
Next j
rsADO.MoveNext
Next i
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
三 Select 查询表达式 From 数据区域 [Where 条件表达式] Order by 排序字段。同时可以使⽤Top限制返回⾏数,可以使⽤Top限制返回的⾏数。
1 下⾯语句返回前2条记录。
Sql = "Select top 2 * from 员⼯信息"
2 通过使⽤Order by可以对查询结果按⼀列或多列进⾏排序。
'⾸先按语⽂成绩降序排列,语⽂成绩相同的按数学成绩升序排列
Sql = "Select * from学⽣信息Order by 语⽂ desc,数学 asc"
备注:ASC是升序排列,在不指定排序⽅式的情况下是默认的,因此可以省略
如员⼯信息中我们要显⽰的是,按⽣⽇排序的前5⼈ SQL语句如下:
strSQL = "SELECT Top 5 * FROM 员⼯信息 Order by 出⽣⽇期 asc"
代码:
Sub mynzdata_5() '排序前5名显⽰
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Dim i As Integer
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.RecordSet")
strPath = ThisWorkbook.Path & "mydata2.accdb"
cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath strSQL = "SELECT Top 5 * FROM 员⼯信息 Order by 出⽣⽇期 asc"
rsADO.Open strSQL, cnADO, 1, 3
Cells.ClearContents
For i = 0 To rsADO.Fields.Count - 1
Sheets("Sheet1").Cells(1, i + 1) = rsADO.Fields(i).Name
Next i
For i = 1 To rsADO.RecordCount
For j = 0 To rsADO.Fields.Count - 1
Sheets("Sheet1").Cells(i + 1, j + 1) = rsADO.Fields(j)
Next j
rsADO.MoveNext
Next i
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
显⽰的结果:
今⽇内容回向:
1 本讲讲了⼏种常⽤的SQL查询,读者是否明⽩?
2 上述实例希望读者能⾃⼰亲⾃操作⼀下。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论