国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
第8章 條件查詢
所謂條件查詢,就是在SELECT語句中使用WHERE子句。因為在實際工作中,我們碰到的大多數(shù)情況是按照一定的條件進(jìn)行查詢的,因此條件查詢是使用最多的查詢。
8.1 WHERE條件子句的語法結(jié)構(gòu)
帶有WHERE條件子句的SELECT語句的結(jié)構(gòu)如下:
SQL = “select 字段列表 from 數(shù)據(jù)表名 where 條件表達(dá)式”
這里,條件表達(dá)式是由各種字段、常量、表達(dá)式、關(guān)系運(yùn)算符、邏輯運(yùn)算符和特殊的運(yùn)算符組合起來的。
在條件表達(dá)式中,各個條件的條件值依數(shù)據(jù)類型的不同要用不同的方式表示:對于數(shù)值類型的條件值,直接寫上條件值即可,比如“WHERE學(xué)分=3”;對于文本類型和日期類型的條件值,要用單引號括起來,比如單引號“’”括起來,如“WHERE 姓名=‘黃小立’”,“WHERE入學(xué)日期=‘2006-9-1’”。
8.2 WHERE條件子句中的運(yùn)算符
WHERE條件子句中的運(yùn)算符包括關(guān)系運(yùn)算符、邏輯運(yùn)算符和特殊的運(yùn)算符。
8.2.1 關(guān)系運(yùn)算符
關(guān)系運(yùn)算符用來表示兩個表達(dá)式之間的關(guān)系。WHERE條件子句中的可使用的關(guān)系運(yùn)算符如表8-1所示。
表8-1  比較運(yùn)算符及其含義
運(yùn)算符
含義
=
等于,用于測試兩個表達(dá)式是否相等
>
大于,用于測試一個表達(dá)式是否大于另一個表達(dá)式
<
小于,用于測試一個表達(dá)式是否大于另一個表達(dá)式
>=
大于或等于,用于測試一個表達(dá)式是否大于或等于另一個表達(dá)式
<=
小于或等于,用于測試一個表達(dá)式是否小于或等于另一個表達(dá)式
<>
不等于,用于測試一個表達(dá)式是否不等于另一個表達(dá)式
!=
不等于(非SQL-92標(biāo)準(zhǔn)),用于測試一個表達(dá)式是否不等于另一個表達(dá)式
!<
不小于(非SQL-92標(biāo)準(zhǔn)),用于測試一個表達(dá)式是否不小于另一個表達(dá)式
!>
不大于(非SQL-92標(biāo)準(zhǔn)),用于測試一個表達(dá)式是否不大于另一個表達(dá)式
8.2.2 邏輯運(yùn)算符
邏輯運(yùn)算符用來表示兩個表達(dá)式之間的邏輯關(guān)系。邏輯運(yùn)算符返回帶有TRUE、FALSE或UNKNOWN值的Boolean數(shù)據(jù)類型。WHERE條件子句中的可使用的邏輯運(yùn)算符如表8-2所示。
表8-2 邏輯運(yùn)算符及其含義
運(yùn)算符
含義
ALL
如果一組值的比較都為TRUE,那么就為TRUE
AND
如果兩個布爾表達(dá)式都為TRUE,那么就為TRUE
ANY
如果一組值的比較中任何一個為TRUE,那么就為TRUE
BETWEEN
如果操作數(shù)在某個范圍之內(nèi),那么就為TRUE
EXISTS
如果子查詢包含一些行,那么就為TRUE
IN
如果操作數(shù)等于表達(dá)式列表中的一個,那么就為TRUE
LIKE
如果操作數(shù)與一種模式相匹配,那么就為TRUE
NOT
對任何其他布爾運(yùn)算符的值取反
OR
如果兩個布爾表達(dá)式中的一個為TRUE, 那么就為TRUE
SOME
如果在一組值比較中,有些為TRUE, 那么就為TRUE
8.2.3 特殊運(yùn)算符
特殊運(yùn)算符用來進(jìn)行特殊的運(yùn)算,比如判斷是否為空、進(jìn)行模糊查詢等。WHERE條件子句中的可使用的特殊運(yùn)算符如表8-3所示。
表8-3   SQL命令中搜索條件運(yùn)算符的匯總
運(yùn)算符
含義
%
通配符,代表任意多個字符。例如,WHERE字段名LIKE’%a%’表示所有含有字母“A”的字段數(shù)據(jù)
-
通配符,代表嚴(yán)格的一個字符。例如,WHERE字段名LIKE’__AB’表示所有4個字母的數(shù)據(jù)中以“AB”結(jié)尾的字段數(shù)據(jù)
[]
指定范圍內(nèi)的任意單個字符。例如,WHERE字段名LIKE’[BC]%’表示所有以“B”或“C”開頭的字段數(shù)據(jù)
[^]
不屬于指定范圍或集合的任何單個字符。例如,WHERE字段名LIKE[B^a]%’表示所有以“B”開頭,且第2個字母不是“a”的字段數(shù)據(jù)
BETWEEN
測試值的范圍,使用AND將開始值與結(jié)束值分開。例如,WHERE字段名BETWEEN 50 AND 100表示所有的50(含50)和100(含100)之內(nèi)的字段數(shù)據(jù)
LIKE[NOT]LIKE
字段匹配符(通常只限于字符數(shù)據(jù)類型)
IS[NOT]NULL
測試字段的數(shù)據(jù)或表達(dá)式的結(jié)果是否為空
[NOT]IN
一個字段的直是否在一組定義的值之中,匹配特定值的列表
ANY(SOME)
子查詢結(jié)果集中的一個或多個行是否滿足指定的條件
ALL
子查詢結(jié)果集的所有行是否都滿足指定的條件
[NOT]EXISTS
子查詢是否返回任何結(jié)果(不只是特定的結(jié)果)
8.3 單條件查詢
所謂單條件查詢,就是在WHERE子句中只有一個條件。下面介紹常見的幾種單條件查詢。
8.3.1 等于或不等于查詢
等于或不等于查詢,就是WHERE子句中使用表8-1的比較運(yùn)算符進(jìn)行單條件查詢,此時的SQL語句結(jié)構(gòu)如下:
SQL = “select 字段列表 from 數(shù)據(jù)表名 where 某字段 (等于或不等于) 條件值”
【例8-1】下面的例子是查詢“研究生管理”中的數(shù)據(jù)表“研究生”的全部男研究生記錄查詢出來并復(fù)制到Excel工作表。
在運(yùn)行下面的程序之前,要確保已經(jīng)引用了ADO對象庫MicrosoftActive Data Objects 2.5 Library或其他版本(如Microsoft Active Data Objects 2.1 Library、Microsoft Active Data Objects 2.8 Library等)。同時,還要根據(jù)電腦實際情況,將連接字符串中的SQL Server服務(wù)器名稱進(jìn)行變更,并輸入相應(yīng)的用戶名和密碼(如果有的話)。
Public Sub 例8—1()
Dim cnn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String, mydata As String, mytable As String
mydata = "研究生管理"      '指定數(shù)據(jù)庫
mytable = "研究生"     '指定數(shù)據(jù)表
'清除工作表的所有數(shù)據(jù)
Cells.Clear
'建立與SQL Server服務(wù)器的連接
cnn.ConnectionString = "Provider=SQLOLEDB;" _
& "User ID=sa;" _
& "password=11111;" _
& "Data Source=THTFCOMPUTER;" _
& "Initial Catalog=" & mydata
cnn.Open
'檢查全表某些字段的記錄
SQL = " select * from " & mytable & " where 性別='男'"
Set rs = cnn.Execute(SQL)
'復(fù)制字段名
For i = 0 To rs.Fields.Count - 1
Cells(1, i + 1) = rs.Fields(i).Name
Cells(1, i + 1).Font.Bold = True
Next i
'復(fù)制全部記錄數(shù)據(jù)
Range("A2").CopyFromRecordset rs
'字段設(shè)置列寬至合適的寬度
Columns.AutoFit
'關(guān)機(jī)記錄集以及與數(shù)據(jù)庫的連接
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub
運(yùn)行上面的程序,就得到如圖8-1所示的結(jié)果。
【例8-2】本例是將數(shù)據(jù)庫“研究生管理”中的數(shù)據(jù)表“成績”的全部考試成績分?jǐn)?shù)在90分以上的研究生記錄查詢出來并復(fù)制到Excel工作表。本例的程序與【例8-1】基本相同,唯一區(qū)別在于SQL語句,如下所示:
SQL = “select *from ” & mytable & “ where 成績 >90”
運(yùn)行上面的程序,就得到如圖8-2所示的結(jié)果。
8.3.2 列表(in或not in)查詢
就是判斷一個字段的值是否在一組定義的值之中,此時的SQL語句結(jié)構(gòu)如下:
SQL = “select 字段列表 from 數(shù)據(jù)表名 where 某字段 in(值1,值2,……)”
或者:
SQL = “select 字段列表 from 數(shù)據(jù)表名 where 某字段 not in(值1,值2,……)”
【例8-3】本例是將數(shù)據(jù)庫“研究生管理”的數(shù)據(jù)表“研究生”中,研究方向為“風(fēng)險投資”或者“項目投資”研究生記錄查詢出來并復(fù)制到Excel工作表。
Public Sub 例8—3()
Dim cnn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String, mydata As String, mytable As String
mydata = "研究生管理"      '指定數(shù)據(jù)庫
mytable = "研究生"     '指定數(shù)據(jù)表
'清除工作表的所有數(shù)據(jù)
Cells.Clear
'建立與SQL Server服務(wù)器的連接
cnn.ConnectionString = "Provider=SQLOLEDB;" _
& "User ID=sa;" _
& "password=11111;" _
& "Data Source=THTFCOMPUTER;" _
& "Initial Catalog=" & mydata
cnn.Open
'查詢?nèi)砟承┳侄蔚挠涗?div style="height:15px;">
SQL = " select * from " & mytable & " where 研究方向 in ('風(fēng)險投資','項目投資')"
Set rs = cnn.Execute(SQL)
'復(fù)制字段名
For i = 0 To rs.Fields.Count - 1
Cells(1, i + 1) = rs.Fields(i).Name
Cells(1, i + 1).Font.Bold = True
Next i
'復(fù)制全部記錄數(shù)據(jù)
Range("A2").CopyFromRecordset rs
'字段設(shè)置列寬至合適的寬度
Columns.AutoFit
'關(guān)機(jī)記錄集以及與數(shù)據(jù)庫的連接
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub
運(yùn)行上面的程序,就得到如圖8-3所示的結(jié)果。
【例8-4】本例是將數(shù)據(jù)庫“研究生管理”的數(shù)據(jù)表“研究生”中,研究方向不為“風(fēng)險投資”或者“項目投資”研究生記錄查詢出來并復(fù)制到Exce工作表。本例的程序與【例8-3】基本相同,唯一區(qū)別在于SQL語句,如下所示:
SQL=“select *from” & mytable & “ where 研究方向 not in (‘風(fēng)險投資’,’項目投資’)“
運(yùn)行上面的程序,就得到如圖8-4所示的結(jié)果。
8.3.3 介于(between)查詢
介于查詢用于完成數(shù)值型(也包括日期型字段)字段在某個數(shù)值區(qū)間內(nèi)的查詢,此時的SQL語句結(jié)構(gòu)如下:
SQL=“select 字段列表 from 數(shù)據(jù)表名 where 數(shù)值型字段between 值1 and值2”
或者:
SQL=“select 字段列表 from 數(shù)據(jù)表名 where 日期型字段between ‘日期1‘ and ‘日期2’”
【例8-5】本例是將數(shù)據(jù)庫“研究生管理”的數(shù)據(jù)表“成績”中,考試成績在80到90之間的研究生記錄查詢出來并復(fù)制到Excel工作表。
Public Sub 例8—5()
Dim cnn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String, mydata As String, mytable As String
mydata = "研究生管理"      '指定數(shù)據(jù)庫
mytable = "成績"     '指定數(shù)據(jù)表
'清除工作表的所有數(shù)據(jù)
Cells.Clear
'建立與SQL Server服務(wù)器的連接
cnn.ConnectionString = "Provider=SQLOLEDB;" _
& "User ID=sa;" _
& "password=11111;" _
& "Data Source=THTFCOMPUTER;" _
& "Initial Catalog=" & mydata
cnn.Open
'查詢?nèi)砟承┳侄蔚挠涗?div style="height:15px;">
SQL = " select * from " & mytable & " where 成績 between 80 and 90 "
Set rs = cnn.Execute(SQL)
'復(fù)制字段名
For i = 0 To rs.Fields.Count - 1
Cells(1, i + 1) = rs.Fields(i).Name
Cells(1, i + 1).Font.Bold = True
Next i
'復(fù)制全部記錄數(shù)據(jù)
Range("A2").CopyFromRecordset rs
'字段設(shè)置列寬至合適的寬度
Columns.AutoFit
'關(guān)機(jī)記錄集以及與數(shù)據(jù)庫的連接
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub
運(yùn)行上面的程序,就得到如圖8-4所示的結(jié)果。
8.3.4 模糊(like)查詢
模糊查詢就是利用like及一些特殊運(yùn)算符進(jìn)行匹配查詢。比如,要從數(shù)據(jù)表“研究生”中查詢所有姓張的研究生記錄,SQL語句如下:
SQL=“select *from 研究生 where 姓名 like ‘張%’”
【例8-6】本例是將數(shù)據(jù)庫“研究生管理”的數(shù)據(jù)表“研究生”中,查詢所有姓張的研究生記錄,SQL語句如上所示,而程序的其他部分與【例8-4】完全相同。運(yùn)行上面的程序,就得到如圖8-6所示的結(jié)果。
【例8-7】本例是將數(shù)據(jù)庫“研究生管理”的數(shù)據(jù)表“導(dǎo)師”中,查詢所有的職稱名稱含有“教授”字樣的導(dǎo)師記錄:
Public Sub 例8—7()
Dim cnn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String, mydata As String, mytable As String
mydata = "研究生管理"      '指定數(shù)據(jù)庫
mytable = "導(dǎo)師"     '指定數(shù)據(jù)表
'清除工作表的所有數(shù)據(jù)
Cells.Clear
'建立與SQL Server服務(wù)器的連接
cnn.ConnectionString = "Provider=SQLOLEDB;" _
& "User ID=sa;" _
& "password=11111;" _
& "Data Source=THTFCOMPUTER;" _
& "Initial Catalog=" & mydata
cnn.Open
'查詢?nèi)砟承┳侄蔚挠涗?div style="height:15px;">
SQL = " select * from " & mytable & " where 職稱 like '%教授%'"
Set rs = cnn.Execute(SQL)
'復(fù)制字段名
For i = 0 To rs.Fields.Count - 1
Cells(1, i + 1) = rs.Fields(i).Name
Cells(1, i + 1).Font.Bold = True
Next i
'復(fù)制全部記錄數(shù)據(jù)
Range("A2").CopyFromRecordset rs
'字段設(shè)置列寬至合適的寬度
Columns.AutoFit
'關(guān)機(jī)記錄集以及與數(shù)據(jù)庫的連接
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub
注意,由于是查詢字符類型字段,因此要用單引號將條件值括起來,即:‘%教授%’。運(yùn)行上面的程序,就得到如圖8-7所示的結(jié)果。
8.3.5 是否為空(is null或is not null)查詢
是否為空查詢,就是利用is null或is notnull判斷某個字段的值是否為空值。此時的SQL語句結(jié)構(gòu)如下:
SQL=“select 字段列表 from 數(shù)據(jù)表名 where 某字段 is nul ”
或者:
SQL=“select 字段列表 from 數(shù)據(jù)表名 where 某字段 is notnul”
【例8-8】本例是將數(shù)據(jù)庫“研究生管理”的數(shù)據(jù)表“研究生”中,研究方向為空值(意思就是目前還沒有研究方向)的研究生記錄查詢出來并復(fù)制到Excel工作表。
Public Sub 例8—8()
Dim cnn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String, mydata As String, mytable As String
mydata = "研究生管理"      '指定數(shù)據(jù)庫
mytable = "研究生"     '指定數(shù)據(jù)表
'清除工作表的所有數(shù)據(jù)
Cells.Clear
'建立與SQL Server服務(wù)器的連接
cnn.ConnectionString ="Provider=SQLOLEDB;" _
& "User ID=sa;" _
& "password=11111;" _
& "Data Source=THTFCOMPUTER;" _
& "Initial Catalog=" & mydata
cnn.Open
'查詢?nèi)砟承┳侄蔚挠涗?div style="height:15px;">
SQL = " select * from " & mytable & " where 研究方向 is null"
Set rs = cnn.Execute(SQL)
'復(fù)制字段名
For i = 0 To rs.Fields.Count - 1
Cells(1, i + 1) = rs.Fields(i).Name
Cells(1, i + 1).Font.Bold = True
Next i
'復(fù)制全部記錄數(shù)據(jù)
Range("A2").CopyFromRecordset rs
'字段設(shè)置列寬至合適的寬度
Columns.AutoFit
'關(guān)機(jī)記錄集以及與數(shù)據(jù)庫的連接
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub
運(yùn)行上面的程序,就得到如圖8-8所示的結(jié)果。
如果要查詢出已經(jīng)確定了研究方向的研究生記錄,則SQL語句如下:
SQL=“select *from ” & mytable & “wherr 研究方向 is not null”
8.4 復(fù)雜條件查詢
所謂復(fù)雜條件查詢,就是在WHERE子句中使用關(guān)系運(yùn)算符、邏輯運(yùn)算符和特殊的運(yùn)算符,構(gòu)建復(fù)雜的條件進(jìn)行查詢。
例如,要查詢所有考試成績在80分以上、課程代碼為200601004的研究生考試記錄,則SQL語句如下:
SQL = “select *from 成績 where 成績> 80and 課程代碼 =‘200601004’”
【例8-9】本例是將數(shù)據(jù)庫“研究生管理”的數(shù)據(jù)表“成績”中,查詢所有考試成績在80分以上、課程代碼為200601004的研究生考試記錄,并復(fù)制到Excel工作表。
Public Sub 例8—9()
Dim cnn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String, mydata As String, mytable As String
mydata = "研究生管理"      '指定數(shù)據(jù)庫
mytable = "成績"     '指定數(shù)據(jù)表
'清除工作表的所有數(shù)據(jù)
Cells.Clear
'建立與SQL Server服務(wù)器的連接
cnn.ConnectionString = "Provider=SQLOLEDB;" _
& "User ID=sa;" _
& "password=11111;" _
& "Data Source=THTFCOMPUTER;" _
& "Initial Catalog=" & mydata
cnn.Open
'查詢?nèi)砟承┳侄蔚挠涗?div style="height:15px;">SQL = " select * from " & mytable & " where 成績> 80 and 課程代碼='200601004'"
Set rs = cnn.Execute(SQL)
'復(fù)制字段名
For i = 0 To rs.Fields.Count - 1
Cells(1, i + 1) = rs.Fields(i).Name
Cells(1, i + 1).Font.Bold = True
Next i
'復(fù)制全部記錄數(shù)據(jù)
Range("A2").CopyFromRecordset rs
'字段設(shè)置列寬至合適的寬度
Columns.AutoFit
'關(guān)機(jī)記錄集以及與數(shù)據(jù)庫的連接
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub
運(yùn)行上面的程序,就得到如圖8-9所示的結(jié)果。
【例8-10】本例是將數(shù)據(jù)庫“研究生管理”的數(shù)據(jù)表“研究生”中,查詢所有考試成績在80分以上、課程代碼為200601004、并且學(xué)號的前3位字為“A03”的研究生考試記錄,并復(fù)制到Excel工作表。本例的程序代碼與【例8-9】基本相同,唯一不同的是SQL語句,如下所示:
SQL = “select *from ” & mytable_
& “where 成績> 80and 課程代碼 = ‘200601004‘ and left(學(xué)號,3)=’A03‘”
運(yùn)行上面的程序,就得到如圖8-10所示的結(jié)果。
8.5 計算條件下的查詢
所謂計算條件下的查詢,就是在WHERE子句中使用計算公式,并將計算公式的結(jié)果作為條件值進(jìn)行查詢。
【例8-11】本例是在數(shù)據(jù)庫“研究生管理”的數(shù)據(jù)表“研究生”中,查詢所有到現(xiàn)在為止入學(xué)滿1年的研究生考試記錄,并復(fù)制到Excel工作表。
Public Sub 例8—11()
Dim cnn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String, mydata As String, mytable As String
mydata = "研究生管理"      '指定數(shù)據(jù)庫
mytable = "研究生"     '指定數(shù)據(jù)表
'清除工作表的所有數(shù)據(jù)
Cells.Clear
'建立與SQL Server服務(wù)器的連接
cnn.ConnectionString = "Provider=SQLOLEDB;" _
& "User ID=sa;" _
& "password=11111;" _
& "Data Source=THTFCOMPUTER;" _
& "Initial Catalog=" & mydata
cnn.Open
'查詢?nèi)砟承┳侄蔚挠涗?div style="height:15px;">SQL = " select * from " & mytable & " wheredatediff(yy,入學(xué)日期,getdate())>=1"
Set rs = cnn.Execute(SQL)
'復(fù)制字段名
For i = 0 To rs.Fields.Count - 1
Cells(1, i + 1) = rs.Fields(i).Name
Cells(1, i + 1).Font.Bold = True
Next i
'復(fù)制全部記錄數(shù)據(jù)
Range("A2").CopyFromRecordset rs
'字段設(shè)置列寬至合適的寬度
Columns.AutoFit
'關(guān)機(jī)記錄集以及與數(shù)據(jù)庫的連接
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub
運(yùn)行上面的程序,就得到如圖8-11所示的結(jié)果。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VBA-access表信息的獲取
將數(shù)據(jù)庫記錄數(shù)據(jù)全部導(dǎo)入到excel工作表
Excel VBA ADO連接ACCESS數(shù)據(jù)庫
VB和數(shù)據(jù)庫
SQL基本SELECT查詢語句_內(nèi)外連接
SQl添加、刪除、修改語句
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服