SQL語言基本教程(一) (轉)
語言基本教程(一)
查詢語言(SQL)是使用於關聯式資料庫的標準語言,被很多型別的資料庫所支援。本文將以VB加DAO為例,來介紹
基本的SQL語法以及使用。本章將介紹的是SQL語言中的基本查詢語句,並帶有範例。
要更好的閱讀本文,讀者需要對資料庫的基本結構以及術語有一個基本的瞭解,而且最好能有一定的VB資料庫。
除非特別說明,本文將使用的資料庫是VB中附帶的BIBLIO.M資料庫。
一、...FROM...WHERE語句
語句的語法如下:
SELECT [all | * | distinct column1, column2]
FROM table1[, table2]
WHERE [condition1 | expression1] [AND condition2 | rxpression2]
在上面的語法中,[]外的語句是必須的,而[]內的是可選的,對於以 | 分割的運算子,則表明語法中必須從| 分割的
運算子中選擇一個。下面的語法描述同上。
在SELECT...FROM...WHERE語句中其中SELECT指定需要檢索的欄位,FROM指定要查詢的表,WHERE指定選擇紀錄的條件,
另外還可以包含ORDER BY語句來制定排序紀錄。語法如下:
ORDER BY column1 | Integer [ASC | DESC]
其中column1制定排序的欄位,也可以使用Integer指定的欄位來排序,ASC為升序、DESC為降序。
範例一:找到Titles表中所有出版日期在1990年以後以及包含文字Beginner的書名
建立一個新工程,加入DAO定義庫(點選選單中的 Project | References項,在列表中選擇 DAO 3.51 Library
(也可以是更高版本的3.60,如果了的話),然後在Form中加入一個ListBox。在Form1的程式碼視窗中加入以下程式碼:
Private Sub Form_Load()
Dim rsTemp As Recordset
Dim dbTemp As Database
Dim astr As String
Set dbTemp = DBEngine(0).OpenDatabase("e:program filesmicrosoft vb98biblio.mdb", _
dbOpenSnapshot)
astr = "SELECT [Title] FROM [Titles] WHERE [Year Published] > 1990 " & _
"AND Title LIKE '*Beginner*' ORDER BY Title DESC"
Set rsTemp = dbTemp.OpenRecordset(astr)
If rsTemp.RecordCount > 0 Then
rsTemp.MoveFirst
Do Until rsTemp.EOF
List1.AddItem rsTemp![Title]
rsTemp.MoveNext
L
End If
End Sub
執行,List1中就會列出所有出版日期在1990年以後以及包含文字Beginner的書的書名並將書名按照降序進行排列。
在上面的SELECT語句的WHERE中,我們使用了運算子號 > 來比較大小以及使用LIKE進行匹配。在WHERE語句中,可以使
用的運算子有以下幾類:
1、比較運算子
包含 =、<>、>、=、<= 等若干類
2、邏輯運算子
包含以下若干類:
LIKE、IN、BETWEEN、UNIQUE、IS NULL、EXISTS、ALL和ANY
LIKE 運算子透過使用萬用字元將一個值同其它值比較,在VB的SQL查詢中,可以使用的萬用字元是 * 和 ? 其中 * 代表任
意的若干個字元,而 ? 代表一個字元,例如上面語句中的LIKE '*Beginner* 代表查詢所有包含字串Beginner的值。不
過要注意的是使用 * 和 ? 作為萬用字元是VB的專利。真正的SQL語言的萬用字元是 % 和 _ ,其中 % 代表任意多個字元,_
代表一個字元例如VB中的Data Environment使用的就是 % 和 _ 作為查詢萬用字元。另外Microsoft Jet Engine對於LIKE
運算子還提供了其它一些的過濾選項,具體的內容可參見MSDN索引中的 Like Operator 條目。
IN 運算子用於比較某一個值是否等於幾個值中的一個值,例如下面的語句:
"SELECT [Title],[Year Published] FROM [Titles] WHERE [Year Published] IN (1990,1991,1995)"
將從表Titles中選擇所有在1990、1991、1995年出版的書籍紀錄。
BETWEEN 運算子勇於在兩個值之間搜尋,例如 WHERE [Year Published] BETWEEN 1989 AND 1991 指定出版日期必須
在1989年和1991年之間。
對於邏輯運算子,可以結合NOT運算子實現改變查詢條件的方向。例如 WHERE [Year Published] NOT IN (1990,1991,1995)
3、連線符
WHERE中的連線符包括 AND 和 OR ,使用AND時,所有查詢都必須是True時,條件才成立,而使用OR時,只要連線的
一個查詢為True,條件就成立。象上面的範例中,只有書名中包含 "Beginner" 同時又是在1990年以後出版的紀錄才會被
查詢到。
在使用比較運算子時要注意,在VB運算元據庫引擎時對於查詢的字串,要使用單引號或者雙引號將字串括起來,例
如 WHERE [Name]='LiGang'。而對於日期型別的資料,要使用#號將日期括起來,例如 WHERE [BirthDay] > #19980-10-01#
而在使用萬用字元和LIKE運算子時,需要使用引號而不是#號,例如 WHERE [BirthDay] LIKE "1990-01-*"。引號告訴資料庫引
擎將日期當字串處理,而#號告訴資料庫引擎將日期當數字處理。對於WHERE語句所要使用的邏輯運算子,在下面的文章中還
要提到。
範例二:如何在資料表中加入統計等功能
SQL當中提供了一定數量的統計以及計算功能,其中統計主要有如下一些:
COUNT 計算欄位中的紀錄數
SUM 計算欄位中的所有值的和
MAX 獲得欄位中所有值中的最大值
MIN 獲得欄位中所有值中的最小值
AVG 計算欄位中所有值的平均值
計算符有 +、-、*、/ 4種。這些計算、統計函式的使用方法如下:
functionname fieldname AS outfieldname
其中functionname定義函式名、fieldname 定義要操作的欄位、outfieldname定義儲存輸出結果欄位名稱,下面是範例
程式,首先建立一個資料庫,將資料庫儲存為 c:db4.mdb。然後在資料庫中加入一個名稱為db1的表,表的結構如下:
欄位名稱 產品編號 成本 出廠價 銷售數量
A00020 ¥89.95 ¥95.00 900
A00056 ¥54.00 ¥89.00 2400
A00021 ¥2,300.00 ¥2,896.00 600
A10916 ¥120.00 ¥209.00 1200
A00987 ¥907.00 ¥1,090.00 1000
其中產品編號為文字型別、成本和出廠價欄位為貨幣型別、銷售數量為長整形資料。儲存表,在VB工程中加入DAO定義
庫,在Form1中加入一個ListBox控制元件,在Form1程式碼視窗中加入以下程式碼:
Private Sub Form_Load()
Dim rsTemp As Recordset
Dim dbTemp As Database
Dim astr As String
Set dbTemp = DBEngine(0).OpenDatabase("c:db4.mdb", dbOpenSnapshot)
astr = "SELECT db1.產品編號, ((db1.出廠價 - db1.成本)/db1.成本) AS dRate, " & _
"(db1.出廠價 * db1.銷售數量)AS eTotal FROM db1 ORDER BY db1.產品編號"
Set rsTemp = dbTemp.OpenRecordset(astr)
If rsTemp.RecordCount > 0 Then
rsTemp.MoveFirst
Do Until rsTemp.EOF
List1.AddItem rsTemp![產品編號] & " " & rsTemp![dRate] & _
" " & rsTemp![eTotal]
rsTemp.MoveNext
Loop
End If
End Sub
在上面的程式段中,透過計算字元操作表中以有欄位,然後再將結果輸出到輸出欄位中儲存。
二、JOIN...ON...語句
JOIN...ON... 語句是SQL查詢中用於連線多個表的語句,該語句的語法為:
FROM table1 [INNER|OUTER|LEFT|RIGHT] JOIN table2 ON table1.field1 compopr table2.field2
其中tabel1指定要查詢的表,tabel2指定連線到tabel1的表,field1, field2指定連線欄位名稱,
compopr指定關係比較符,它可以是大於、小於、等於、不等於等。
範例三: 列出所有書籍以及它的作者
在BIBLIO中,書籍的名稱位於Titles表的Title欄位中,而書籍的作者位於Authors表的Autoor欄位中,而這兩個表之間沒
有相關聯的欄位,我們這時需要聯合資料庫中的Title Author表,利用該表的Au_ID欄位同Authors表中的Au_ID欄位的關聯以及
ISBN欄位同Titles表中的ISBN欄位的關聯,範例如下:
Private Sub Form_Load()
Dim rsTemp As Recordset
Dim dbTemp As Database
Dim astr As String
Set dbTemp = DBEngine(0).OpenDatabase("e:program filesmicrosoft visual studiovb98biblio.mdb", dbOpenSnapshot)
astr = "SELECT Authors.Author, Titles.Title FROM " & _
"([Title Author] INNER JOIN Titles ON [Title Author].ISBN = Titles.ISBN)" & _
"INNER JOIN Authors ON [Title Author].Au_ID = Authors.Au_ID " & _
"WHERE Titles.Title LIKE '*Beginner*'"
Set rsTemp = dbTemp.OpenRecordset(astr)
If rsTemp.RecordCount > 0 Then
rsTemp.MoveFirst
Do Until rsTemp.EOF
List1.AddItem rsTemp![Title] & " " & rsTemp![Author]
rsTemp.MoveNext
Loop
End If
End Sub
在上面的範例中,我們使用兩個INNER JION聯合將Authors表中的Au_ID欄位 和Titles表中的ISBN欄位連線到Title Author
表中,然後在Title Author表中查詢Title欄位中包含字串“Beginner”的紀錄並將Title欄位和Author欄位輸出。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987945/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL查詢語言基本教程(2) (轉)SQL
- SQL查詢語言基本教程(3) (轉)SQL
- Oracle SQL語言(轉)OracleSQL
- PL/SQL基本語法要素(轉)SQL
- Java 語法介紹(一):Java語言的基本組成(轉)Java
- SQL語言快速入門(轉)SQL
- Oracle PL/SQL語言基礎(轉)OracleSQL
- SQL基本語法SQL
- SQL基本語句SQL
- 【sql】編寫基本的SQL SELECT語句一SQL
- SQL語言SQL
- R語言基本技巧R語言
- Oracle基本SQL語句OracleSQL
- SQL Server SQL語句進行優化的基本原則 (轉)SQLServer優化
- sql程式語言SQL
- sql語言演示!SQL
- 程式語言基本組成
- Go語言學習教程:xorm表基本操作及高階操作GoORM
- SQL語言基礎(資料控制語言)SQL
- SQL語言(結構化查詢語言)SQL
- Dart語言詳解(二)——基本語法Dart
- Oracle PL/SQL語言初級教程之異常處理OracleSQL
- SQL語言分類SQL
- oracle資料庫巡檢(一)基本sql語句Oracle資料庫SQL
- Java 語言是強型別語言語言(轉)Java型別
- Swift 語言的基本運算子Swift
- [一、基本語法]1基本語法概述
- 關聯式資料庫SQL語言詳解(轉)資料庫SQL
- 【自制程式語言】1 - 基本語句(1)
- MySQL基本sql語句總結MySql
- SQL語言學習(二)SQL
- 面嚮物件語言概論 (一) (轉)物件
- Java語言編碼規範(一) (轉)Java
- C語言 Make命令教程C語言
- flutter【1】-dart語言--基本知識FlutterDart
- C語言指標基本知識C語言指標
- C語言(基本資料型別)C語言資料型別
- Swift語言指南(九)--基本運算子Swift