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

打開APP
userphoto
未登錄

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

開通VIP
第7章無條件查詢

7章無條件查詢

所謂無條件查詢,就是在查詢時不使用WHERE子句設(shè)置任何條件。例如,查詢數(shù)據(jù)表中的全部記錄、查詢某些字段的全部記錄數(shù)據(jù)、查詢不重復(fù)記錄、查詢前n條記錄等。

7.1 范例數(shù)據(jù)庫設(shè)計及使用

7.1.1 范例數(shù)據(jù)庫設(shè)計

為了更好地掌握利用SELECT查詢數(shù)據(jù)庫數(shù)據(jù)的方法,從本章開始,所有的范例數(shù)據(jù)均是以一個數(shù)據(jù)庫“研究生管理”為例,其包含有5個數(shù)據(jù)表:“院系”、“導(dǎo)師”、“研究生”、“課程”和“成績”等,它們的字段設(shè)計分別如表7-1、表7-2、表7-3、表7-4和表7-5所示,所使用的范例數(shù)據(jù)分別如圖7-1~圖7-5所示。

這里注意,導(dǎo)師編號、編輯編號和學(xué)號的前3位數(shù)據(jù)就是院系編號。

7-1  “院系”數(shù)據(jù)表字段設(shè)計

字段

數(shù)據(jù)類型

字段長度

是否允許為空

院系編號

文本型Char

3

否,主鍵

院系名

文本型Char

12

電話

文本型Char

8

7-2  “導(dǎo)師”數(shù)據(jù)表字段設(shè)計

字段

數(shù)據(jù)類型

字段長度

是否允許為空

導(dǎo)師編號

文本型Char

6

否,主鍵

姓名

文本型Char

8

性別

文本型Char

2

職稱

文本型Char

6

院系編號

文本型Char

3

7-3  “研究生”數(shù)據(jù)表字段設(shè)計

字段

數(shù)據(jù)類型

字段長度

是否允許為空

學(xué)號

文本型Char

10

否,主鍵

姓名

文本型Char

8

性別

文本型Char

2

入學(xué)日期

日期/時間 Datetime

 

班級

文本型Char

10

研究方向

文本型VarChar

20

導(dǎo)師編號

文本型Char

6

7-4  “課程”數(shù)據(jù)表字段設(shè)計

字段

數(shù)據(jù)類型

字段長度

是否允許為空

課程代碼

文本型Char

10

否,主鍵

課程名稱

文本型Char

20

課程名稱

文本型Char

4

學(xué)時

整型 smallint

2

學(xué)分

整型 tinyint

1

授課教師

文本型Char

6

7-5  “成績”數(shù)據(jù)表字段設(shè)計

字段

數(shù)據(jù)類型

字段長度

是否允許為空

學(xué)號

文本型Char

10

課程代碼

文本型Char

10

成績

整型 smallint

2

學(xué)期

文本型Char

20

7.1.2 附加范例數(shù)據(jù)庫到你的SQLServer服務(wù)器上

為了方便讀者學(xué)習(xí),在本書的光盤中收錄了數(shù)據(jù)庫“研究生管理”及其5個數(shù)據(jù)表的范例數(shù)據(jù),只要將光盤的數(shù)據(jù)庫附加到SQL Server服務(wù)器上就可以了。具體步驟如下;

1)單擊Windows的【開始】→【程序】→【Microsoft SQL Server】→【企業(yè)管理器】命令,打開SQLServer的企業(yè)管理器窗口,選擇“數(shù)據(jù)庫”節(jié)點,如圖7-6所示。

2)單擊【操作】→【所有任務(wù)】→【附加數(shù)據(jù)庫】命令,如圖7-7所示,打開【附加數(shù)據(jù)庫】對話框,如圖7-8所示。

3)在“要附加數(shù)據(jù)庫的MDF文件”欄中輸入數(shù)據(jù)庫文件的詳細(xì)路徑和名稱,然后單擊【驗證】按鈕,就得到如圖7-9所示的情形,然后單擊【確定】按鈕,即可將數(shù)據(jù)庫附加到SQL Server服務(wù)器上。

也可以將光盤的實例數(shù)據(jù)庫文件復(fù)制到電腦中,然后單擊【附加數(shù)據(jù)庫】對話框上的按鈕

,打開【瀏覽現(xiàn)有的文件】對話框,如圖7-10所示,從保存實例數(shù)據(jù)庫文件的文件夾里選擇該文件,單擊【確定】按鈕即可。

7.2 查詢表中所有記錄

查詢表中所有記錄的方法有兩種:一種是使用ADOConnection對象的Excute方法或Recordset對象的Open方法下面的SQL語句:

SQL = select *from 數(shù)據(jù)表名

set rs = cnn.Execute(SQL)

或者 rs.Open SQL,cnn,adopenKeyset,adLockOptimistic

這里的星號(*)表示表中的所有字段。

另一種方法是直接執(zhí)行查詢表的命令,如下所示:

Set rs = cnn.Execute(數(shù)據(jù)表名)

或者rs.Open數(shù)據(jù)表名,cnn,adOpenKeyset,adLockOptimistic

【例7-1】下面的例子是數(shù)據(jù)庫“研究生管理”中的數(shù)據(jù)表“導(dǎo)師”的全部記錄復(fù)制到Excel工作表。

在運行下面的程序之前,要確保已經(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 71()

  Dim cnn As New ADODB.Connection

  Dim rs As New 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數(shù)據(jù)庫服務(wù)器上指定數(shù)據(jù)庫的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

        & "Initial Catalog=" &mydata

   cnn.Open

    '查詢?nèi)碛涗?/span>

   SQL = "select * from" & mytable

   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

   Set ws = Nothing

End Sub

運行上面的程序,就得到如圖7-11所示的結(jié)果。

7.3 查詢表中所有記錄的指定字段

查詢表中某些字段的所有記錄,要使用下面的SQL語句:

SQL = select 字段1,字段2,……from 數(shù)據(jù)表名”

這里,各個字段名之間用逗號隔開。

【例7-2】下面的例子是查詢“研究生管理”中的數(shù)據(jù)表“導(dǎo)師”的全部導(dǎo)師的姓名、性別和職稱數(shù)據(jù)查詢出來,并復(fù)制到Excel工作表。

在運行下面的程序之前,要確保已經(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 72()

  Dim cnn As New ADODB.Connection

  Dim rs As New 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數(shù)據(jù)庫服務(wù)器上指定數(shù)據(jù)庫的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=" & mydata

   cnn.Open

    '查詢?nèi)砟承┳侄蔚挠涗?/span>

   SQL = "select 姓名,性別,職稱 from" & mytable

   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

   Set ws = Nothing

End Sub

運行上面的程序,就得到如圖7-12所示的結(jié)果。

7.4 查詢結(jié)果不顯示重復(fù)記錄

在一個數(shù)據(jù)表中,有可能有一些重復(fù)記錄,比如在“成績表”中,每個研究生可能選修了幾門課程,而某個課程也可能被幾個研究生選修。如果我們要想在“成績表”中查詢本學(xué)期研究生共選修了哪些課程,那么就需要將不重復(fù)的課程篩選出來。此時,在SQL語句中要使用DISTINCT關(guān)鍵詞,而SQL語句的結(jié)構(gòu)如下:

SQL = selectDISTINCT 字段1,字段2,……from 數(shù)據(jù)表名”

【例7-3】下面的例子是查詢“研究生管理”中的數(shù)據(jù)表“成績”中的所有課程編號記錄(不包括重復(fù)記錄),并復(fù)制到Excel工作表。

在運行下面的程序之前,要確保已經(jīng)引用了ADO對象庫MicrosoftActive Data Objects 2.5 Library或其他版本(如Microsoft Active Data Objects 2.1 LibraryMicrosoft Active Data Objects 2.8 Library等)。同時,還要根據(jù)電腦實際情況,將連接字符串中的SQL Server服務(wù)器名稱進(jìn)行變更,并輸入相應(yīng)的用戶名和密碼(如果有的話)。

Public Sub 73()

  Dim cnn As New ADODB.Connection

  Dim rs As New ADODB.Recordset

  Dim SQL As String, mydata As String, mytable As String

  mydata = "研究生管理"      '指定要修改的數(shù)據(jù)庫

  mytable = "成績"            '指定數(shù)據(jù)表

   '清除工作表的所有數(shù)據(jù)

  Cells.Clear

   '建立與SQL Server數(shù)據(jù)庫服務(wù)器上指定數(shù)據(jù)庫的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=" & mydata

   cnn.Open

    '查詢?nèi)砟承┳侄蔚挠涗?/span>

    SQL = "select distinct 課程代碼 from" & mytable

   Set rs = cnn.Execute(SQL)

    '復(fù)制字段名

   Range("A1") = rs.fielse(0).Name

   Range("A1").Font.Bold = True

    '復(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

   Set ws = Nothing

End Sub

運行上面的程序,就可以得到如圖7-13所示的結(jié)果。

從圖7-13可以看出本學(xué)期共開設(shè)了哪些調(diào)和。由于在“成績”表中只是課程代碼,為了獲取課程名稱,需要使用多表查詢的方法從“課程”數(shù)據(jù)表中獲取“成績”表中課程代碼所對應(yīng)的課程名稱,具體方法可參閱第14章的有關(guān)內(nèi)容。

7.5 查詢前n條記錄

如果要查詢數(shù)據(jù)表中的前n條記錄,那么就需要在SQL語句中使用TOP關(guān)鍵詞,此時的SQL語句結(jié)構(gòu)如下所示:

SQL = select TOPn 字段1,字段2……from 數(shù)據(jù)表名”

【例7-4】下面的例子是查詢“研究生管理”中的數(shù)據(jù)表“成績”中的前5行記錄,并復(fù)制到Excel工作表。

在運行下面的程序之前,要確保已經(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 74()

  Dim cnn As New ADODB.Connection

  Dim rs As New ADODB.Recordset

  Dim SQL As String, mydata As String, mytable As String

   mydata = "研究生管理"       '指定要修改的數(shù)據(jù)庫

  mytable = "成績"            '指定數(shù)據(jù)表

   '清除工作表的所有數(shù)據(jù)

  Cells.Clear

   '建立與SQL Server數(shù)據(jù)庫的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=" & mydata

   cnn.Open

    '查詢?nèi)砟承┳侄蔚挠涗?/span>

   SQL = "select top 5 from" & mytable

   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

   Set ws = Nothing

End Sub

運行上面的程序,就得到如圖7-14所示的結(jié)果。

7.6 查詢前百分?jǐn)?shù)n的記錄

如果要查詢數(shù)據(jù)表中的前百分?jǐn)?shù)n的記錄,那么就需要在SQL語句中使用PERCENT關(guān)鍵詞,此時的SQL語句結(jié)構(gòu)如下所示。

SQL = select TOPn PERCENT 字段1,字段2,……from 數(shù)據(jù)表名”

【例7-5】下面的例子是查詢“研究生管理”中的數(shù)據(jù)表“成績”中的前30%的數(shù)據(jù)記錄,并復(fù)制到Excel工作表。

在運行下面的程序之前,要確保已經(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 75()

  Dim cnn As New ADODB.Connection

  Dim rs As New ADODB.Recordset

  Dim SQL As String, mydata As String, mytable As String

  mydata = "研究生管理"      '指定要修改的數(shù)據(jù)庫

  mytable = "成績"            '指定數(shù)據(jù)表

   '清除工作表的所有數(shù)據(jù)

  Cells.Clear

   '建立與SQL Server數(shù)據(jù)庫的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

        & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=" & mydata

   cnn.Open

    '查詢?nèi)砟承┳侄蔚挠涗?/span>

   SQL = "select top 30 from" & mytable

   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

    Setcnn = Nothing

End Sub

運行上面的程序,就得到如圖7-15所示的結(jié)果。

7.7 將表達(dá)式作為查詢字段進(jìn)行查詢

在查詢SQL語句中,我們還可以使用表達(dá)式作為查詢字段進(jìn)行查詢,這里的表達(dá)式可以是由各種運算符和函數(shù)構(gòu)成。這樣,我們就可以進(jìn)行更加復(fù)雜的查詢,獲取需要的各種數(shù)據(jù)。

為了使表達(dá)式返回值的意義清楚,我們可以使用AS為表達(dá)式的結(jié)果命名一個別名,即“表達(dá)式 AS 別名”。

將表達(dá)式作為查詢字段進(jìn)行SQL語句結(jié)構(gòu)如下:

SQL = select 表達(dá)式1 as 別名1,表達(dá)式2 as 別名2,字段1,字段2,……from 數(shù)據(jù)表名”

這里的表達(dá)式與數(shù)據(jù)表的原字段順序排列可以是任意的。

【例7-6】下面的例子是查詢“研究生管理”中的數(shù)據(jù)表“研究生”中的各個研究生的入學(xué)年份和月份,并復(fù)制到Excel工作表。

在運行下面的程序之前,要確保已經(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 76()

  Dim cnn As New ADODB.Connection

  Dim rs As New ADODB.Recordset

  Dim SQL As String, mydata As String, mytable As String

  mydata = "研究生管理"      '指定要修改的數(shù)據(jù)庫

  mytable = "研究生"            '指定數(shù)據(jù)表

   '清除工作表的所有數(shù)據(jù)

  Cells.Clear

   '建立與SQL Server數(shù)據(jù)庫的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=" & mydata

   cnn.Open

    '查詢?nèi)砟承┳侄蔚挠涗?/span>

   SQL = "select 姓名,性別,year(入學(xué)日期) as 入學(xué)年份," _

       & "month(入學(xué)日期) as 入學(xué)月份from" & mytable

   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

運行上面的程序,就得到如圖7-16所示的結(jié)果。

7.8 將查詢結(jié)果以別名輸出

除了可以為表達(dá)式命名別名外,我們還可以對數(shù)據(jù)表的原字段命名別名,即輸出結(jié)果不是原字段名,而是一個新的名稱,此時的SQL語句的結(jié)構(gòu)如下:

SQL = select 字段1 as 別名1,字段2 as 別名2,字段3 as 別名3,……from 數(shù)據(jù)表名”

【例7-7】下面的例子是查詢“研究生管理”中的數(shù)據(jù)表“研究生”中的各個研究生的姓名、性別、班級等名稱以“Name”、“Sex”、“Class”名稱輸出復(fù)制到Excel工作表。

在運行下面的程序之前,要確保已經(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 77()

  Dim cnn As New ADODB.Connection

  Dim rs As New ADODB.Recordset

  Dim SQL As String, mydata As String, mytable As String

  mydata = "研究生管理"      '指定要修改的數(shù)據(jù)庫

  mytable = "研究生"            '指定數(shù)據(jù)表

   '清除工作表的所有數(shù)據(jù)

  Cells.Clear

   '建立與SQL Server數(shù)據(jù)庫的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=" & mydata

   cnn.Open

    '查詢?nèi)砟承┳侄蔚挠涗?/span>

   SQL = "select 姓名 as Name,性別 as Sex,班級 as Classno from" & mytable

   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

運行上面的程序,就得到如圖7-17所示的結(jié)果。

7.9 將字段合并并以別名查詢輸出

我們可以在SELECT語句中利用加號(+)將某些字段進(jìn)行合并,形成一個新字段,并以一個別名輸出,此時的SQL語句的結(jié)構(gòu)如下:

SQL = select字段1+字段2+……as 別名 from 數(shù)據(jù)表名”

【例7-8】下面的例子是查詢“研究生管理”中的數(shù)據(jù)表“導(dǎo)師”中,將導(dǎo)師的姓名和職稱組成一個新列,并以一個別名“全稱”輸出復(fù)制到Excel工作表。

在運行下面的程序之前,要確保已經(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 78()

  Dim cnn As New ADODB.Connection

  Dim rs As New 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數(shù)據(jù)庫的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=" & mydata

   cnn.Open

    '查詢?nèi)砟承┳侄尾⒑喜橐粋€記錄

   SQL = "select 姓名 + 職稱 as 全稱 from" & mytable

   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

運行上面的程序,就得到如圖7-18所示的結(jié)果。

7.10 合并查詢

我們可以使用UNION子句將多個SQL命令連接起來生成單個SQL無法做到的結(jié)果集合。此時的SQL語句的結(jié)構(gòu)如下:

SQL = “第1SELECT語句 UNION2SELECT語句”

需要注意的是:

1)使用UNION連接的SELECT必須有相同的輸出表達(dá)式,即對應(yīng)欄目應(yīng)具有相同的數(shù)據(jù)類型和字段長度。

2)僅最后一個SELECT可以帶ORDER BYINTO子句。

3UNION不能連接嵌套的SELECT語句。

【例7-9】下面的例子是查詢所有的導(dǎo)師和研究生的姓名和性別,并輸出復(fù)制到Excel工作表。

Public Sub 79()

  Dim cnn As New ADODB.Connection

  Dim rs As New ADODB.Recordset

  Dim SQL As String

   '建立與SQL Server數(shù)據(jù)庫的連接

  cnn.ConnectionString = "Provider=SQLOLEDB;" _

       & "User ID=sa;" _

       & "password=11111;" _

       & "Data Source=THTFCOMPUTER;" _

       & "Initial Catalog=研究生管理"

   cnn.Open

    '查詢數(shù)據(jù)

   SQL = "select 姓名,性別 from 導(dǎo)師 " _

       & " union " _

       & " select 姓名,性別 from 研究生"

   Set rs = cnn.Execute(SQL)

    '復(fù)制查詢出的數(shù)據(jù)

   Cells.Clear

   Range("A1:B1") = Array("姓名","性別")

   Range("A1:B1").Font.Bold = True

   Range("A2").CopyFromRecordset rs

    '字段設(shè)置列寬至合適的寬度

   Columns.AutoFit

    '關(guān)機(jī)記錄集以及與數(shù)據(jù)庫的連接

   rs.Close

   cnn.Close

   Set rs = Nothing

   Set cnn = Nothing

End Sub

運行上面的程序,就得到如圖7-19所示的結(jié)果。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
將數(shù)據(jù)庫記錄數(shù)據(jù)全部導(dǎo)入到excel工作表
Excel VBA ADO連接ACCESS數(shù)據(jù)庫
VBA-access表信息的獲取
Excel創(chuàng)建acc數(shù)據(jù)庫的幾個方法ZT
vba 連接數(shù)據(jù)庫(vba中主要提供了3種數(shù)據(jù)庫訪問接口)
不得不會的MySQL數(shù)據(jù)庫知識點(一)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服