数据库地查询与排序
' 定义SQL查询 sSQL = "SELECT * FROM 职工工资"
' 打开Recordset对象 oRS.Open sSQL, objConn, 1,1,1
2. 在连接对象的Execute方法中使用SQL
下 述 代 码 使 用 Connection 对 象 的 Execute 方 法 执 行SQL语句,并返回一个符合SQL语句的Recordset对 象实例并打开Recordset对象:
CS="Provider=Microsoft.jet.OLEDB.4.0;Data Source=" conn.ConnectionString=CS & Server.MapPath("rsgl.mdb") conn.Open
' 创建Recordset对象 Set oRS = Server.CreateObject("ADODB.Recordset")
SELECT [ALL | DISTINCT] [TOP〈表达式〉] 〈Select表达式〉[AS〈列名〉][,〈Select表达式〉[AS〈列
名〉] ...] FROM 〈表名〉
[[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN 〈表名〉 [ON〈联接条件〉]]
表5.2-2 联接类型
联接类型
意义
Inner Join(内部联接) 只有满足联接条件的记录包含在结果中
Left Outer Join (左联 接)
左表某记录与右表所有记录比较字段值,若有满足联接 条件的,则产生一个真实值记录;若都有满足,则产生 一个含.NULL值的记录。直至右表所有记录都比较完。
1. 在记录集对象的Open方法中使用SQL
下述代码创建Recordset对象实例,读取数据表中 符 合 SQL 语 句 的 记 录 存 放 在 Recordset 对 象 中 并 打 开 Recordset对象:
' 创建Connection对象并打开连接 set conn=server.createobject("adodb.Connection")
(2) 几个特殊运算符 在SQL语句中,WHERE子句后面的联接条件除了可 以使用VBScript语言中的关系表达式以及逻辑表达式 外,还使用几个特殊运算符: ① [NOT] IN:意思是[不]在…之中; ② [NOT] BETWEEN…AND…:意思是[不]在…之 间; ③ [NOT] LIKE:意思是[不]与…匹配。 下面我们以几个实例来说明。
5.2.2.2 查询功能
数据库中最常见的操作是数据查询,也是SQL的 核心。
SQL给出了简单而又丰富的查询语句形式,SQL的 查 询 命 令 也 称 作 SELECT 命 令 , 它 的 基 本 形 式 由 SELECT-FROM-WHERE查询块组成,多个查询块可以嵌 套执行。SELECT-SQL的语法格式如下:
说明:SELECT-SQL命令的格式包括三个基本子句: SELECT子句、FROM子句、WHERE子句,还包括操作子 句:ORDER子句、GROUP子句、UNION子句以及其他一 些选项。
1. SELECT子句
SELECT子句用来指定查询结果中的数据。其中: 选项ALL表示选出的记录中包括重复记录,这是缺 省值;DISTINCT则表示选出的记录中不包括重复记录。 选项TOP〈表达式〉表示在符合条件的记录中选取 指定数量或百分比(〈表达式〉)的记录。 选项〈Select表达式〉[AS〈列名〉] 中的Select 表达式可以是字段名或字段表达式,列名用于指定输 出时使用的列标题,可以不同于字段名。 〈Select表达式〉用一个*号来表示时,指定所有 的字段。
' 定义SQL查询 sSQL = "SELECT * FROM 职 工 工 资 WHERE 实 发 工 资 BETWEEN 800 AND 880"
' 设置Command对象的查询串 mandText = sSQL
' 返回并打开Recordset对象 set rs=cmn.Execute( , , 1)
1. 在记录集对象的Open方法中使用SQL 2. 在连接对象的Execute方法中使用SQL 3. 在命令对象的Execute方法中使用SQL
5.2.2.1 SQL语句的执行
SQL语句可以在记录集对象RecordSet的Open方法 中作为参数被执行,也可以作为链接对象Connection 和命令对象Command的Execute方法中作为参数被执行。
SELECT DISTINCT 部门 FROM 职工工资
说明: ① 使用下述SQL语句可以检索实发工资大于1000 的职工姓名
SELECT 姓名 as 多于1000者 FROM 职工工资 WHERE 实发工资 > 1000
② 使用下述SQL语句可以查询哪些部门至少有一 人实发工资大于1000
SELECT DISTINCT 部门 FROM 职工工资 WHERE 实发工资 > 1000
5.2 数据库的查询与排序
5.2.1 5.2.2 5.2.3 5.2.4
课前导读 课堂教学 上机练习 课后作业
5.2.1 课前导读
SQL是Structured Query Language的缩写,即结 构化查询语言。它是关系数据库的标准语言,来源于 70 年 代 IBM 的 一 个 被 称 为 SEQUEL ( Structured English Query Language) 的 研 究 项 目。80年代, SQL由ANSI进行了标准化,它包含了定义和操作数据 的指令。由于它具有功能丰富、使用方式灵活、语言 简洁易学等突出特点,在计算机界深受广大用户欢迎, 许多数据库生产厂家都相继推出各自支持的SQL标准。 1989年4月,ISO提出了具有完整性特征的SQL,并将 其定为国际标准,推荐它为标准关系数据库语言。 1990年,我国也颁布了《信息处理系统数据库语言 SQL》,将其定为中国国家标准。
3. WHERE子句
用来指定查询的条件。其中的〈联接条件〉指定 一个字段,该字段连接FROM子句中的表。如果查询中 包含不止一个表,就应该为第1个表后的每一个表指 定连接条件。
4. 其它子句和选项
其它子句和选项有: ① GROUP BY子句:对记录按〈组表达式〉值分 组,常用于分组统计。 ② HAVING 子 句 : 当 含 有 GROUP BY 子 句 时 , HAVING子句可用作记录查询的限制条件;无GROUP BY 子句时HAVING子句的作用如同WHERE子句。
【例5.2-2】使用下述SQL语句可以检索“职工工资” 表中“财务”部门所有姓李的职工信息。
sSQL = “SELECT * FROM 职工工资 ;财务' and 姓名 Like " & "'李%'"
这是一个字符串匹配的查询,LIKE运算符专门对字 符型数据进行字符串比较。
' 创建Connection对象并打开连接 set conn=server.createobject("adodb.Connection")
CS="Provider=Microsoft.jet.OLEDB.4.0;Data Source=" conn.ConnectionString=CS & Server.MapPath("rsgl.mdb") conn.Open
③ UNION 子 句 : 可 以 用 UNION 子 句 嵌 入 另 一 个 SELECT-SQL命令,使这两个命令的查询结果合并输出, 但输出字段的类型和宽度必须一致。UNION子句默认 组合结果中排除重复行,使用ALL则允许包含重复行。
④ ORDER BY子句:指定查询结果中记录按〈关 键字表达式〉排序,默认升序。选项ASC表示升序, DESE表示降序。
' 定义SQL查询 sSQL = "SELECT * FROM 职工工资 WHERE 实发工资 BETWEEN 800 AND 880"
' 返回并打开Recordset对象 set rs=conn.Execute(sSQL)
3. 在命令对象的Execute方法中使用SQL
' 创建Connection对象并打开连接, ' 注意,Command对象没有可以用来建立连接的Open方法。 set conn=server.createobject("adodb.Connection") CS="Provider=Microsoft.jet.OLEDB.4.0;Data Source=" conn.ConnectionString=CS & Server.MapPath("rsgl.mdb") conn.Open ‘ 创建Command对象,使用ActiveConnection属性 ‘ 向Command对象附加连接。 Set cmn= Server.CreateObject("mand") Set cmn.ActiveConnection = conn
命令动词
SELECT CREATE、DROP、ALTER INSERT、UPDATE、DELETE GRANT、REVOKE
5.2.2 课堂教学
5.2.2.1 5.2.2.2 5.2.2.3 5.2.2.4
SQL语句的执行 查询功能 操作功能 使用Command对象改善查询
5.2.2.1 SQL语句的执行
一般说来,SQL语言具有如下特点: ① 一体化语言:用SQL可以实现数据库生命周期 中的全部活动,包括简单地定义数据库和表的结构, 实现表中数据的录入、修改、删除及查询、维护、数 据库重构、数据库安全性控制等一系列操作要求。 ② 高度非过程化:SQL和其他数据操作语言不同, SQL是一种非过程性语言,它不必一步步地告诉计算机 “如何”去做,用户只需说明做什么操作,而不用说 明怎样做,不必了解数据存储的格式及SQL命令的内部, 就可以方便地对关系数据库进行操作。