分享
 
 
 

SQL语言基本教程(一)

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

SQL语言基本教程(一)

数据库查询语言(SQL)是使用于关系数据库的标准语言,被很多类型的数据库所支持。本文将以VB加DAO为例,来介绍

基本的SQL语法以及使用。本章将介绍的是SQL语言中的基本查询语句,并带有范例。

要更好的阅读本文,读者需要对数据库的基本结构以及术语有一个基本的了解,而且最好能有一定的VB数据库编程经验。

除非特别说明,本文将使用的数据库是VB中附带的BIBLIO.MDB数据库。

一、SELECT...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项,在列表中选择Microsoft DAO 3.51 Object 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 files\microsoft visual studio\vb98\biblio.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

Loop

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 files\microsoft visual studio\vb98\biblio.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字段输出。

www.applevb.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有