在VB6中用Select语句检索记录
【打印文章】
在VB数据库程序设计中经常要检索记录,常用的是把一条SELECT语句传送给Recordset对象的Open方法或Execute方法。下面就SELECT语句做一比较全面的阐述。
1.简单SELECT语句
“SELECT *” 的意思是:返回在所指定的记录源中能找到的所有字段。这种命令形式很方便,因为你无需知道从表中检索的字段名称。然而,检索表中的所有列是低效的。因此,因该只检索需要的字段,这样可以大大的提高查询的效率。
2.使用 From 子句指定记录源
From 子句说明的是查询检索记录的记录源;该记录源可以是一个表或另一个存储查询。
例:Select * From students 检索students表中的所有记录
3.用 Where 子句说明条件
Where 子句告诉数据库引擎根据所提供的一个或多个条件限定其检索的记录。条件是一个表达式,可具有真假两种判断。
例:Select * From USERS Where ID='123' (注:标准的SQL语句使用单引号作为字符的定界符)
返回USERS表中ID字段为"123"的所有记录。
使用 And 和 Or 逻辑可以将两个或更多的条件链接到一起以创建更高级的 Where 子句。
例:Select * From USERS Where ID = '123' And PWD <> ''
返回ID为“123”PWD不为空的记录。
SQL语句中的比较运算符
操作符
功能
操作符
功能
>
大于
>=
大于或等于
<
小于
<=
小于或等于
=
等于
<>
不等于
Between
在某个取值范围内
Like
匹配某个模式
In
包含在某个值列表中
(1)Between 操作符
Select * From USERS Where ID Between 1 And 100
Between 操作符返回的是位于所说明的界限之内的所有记录值。这个例子就返回ID字段从1到100之间的全部记录。
(2)Like 操作符和通配符
Select * From USERS Where ID Like "%3%"
Like 操作符把记录匹配到你说明的某个模式。这个例子是返回ID中含“3”的所有记录。
四种通配符的含义
通配符
描述
通配符
描述
%
代表零个或者多个任意字符
[ ]
指定范围内的任意单个字符
_
代表一个任意字符
[^]
不在指定范围内的任意单个字符
全部示例子如下:
Like "BR%" 返回以"BR"开始的任意字符串
Like "br%" 返回以"br"开始的任意字符串
Like "%een" 返回以"een"结束的任意字符串
Like "%en%" 返回包含"en"的任意字符串
Like "_en" 返回以"en"结束的三个字符串
Like "[CK]%" 返回以"C"或者"K"开始的任意字符串
Like "[S-V]ing" 返回长为四个字符的字符串,结尾是"ing",开始是从S到V
Like "M[^c]%" 返回以"M"开始且第二个字符不是"c"的任意字符串
4.使用Order By排序
在一个正式的 Select 查询之后包含一个 Order By 子句,后跟想排序的字段(可以有多个)便可以说明一个排序顺序。
例:Select * From USERS Where ID Like '%3%' Order By ID
对返回的记录按ID进行排序。
以降序排序(默认按升序),只需在排序的字段之后使用 Desc 关键字。
例:Select * From USERS Where ID Like '%3%' Order By ID Desc
5.使用 Top 显示某个范围的第一个记录或最后一个记录
使用 Top 关键字可以只显示一个大记录前面或后面的少数几个记录。在查询中,Top 关键字与排序子句一起把结果集限制为少数几个记录或按某个百分比显示整个结果记录集合中的一部分。
例:Select Top 3 * From USERS 返回USERS表中的前3条记录
Select Top 10 Percent * From USERS 返回USERS表中前面的10%个记录
Select Top 3 * From USERS Order By ID Desc 返回USERS表中ID最大的的3条记录
6.用 As 对字段名进行别名化
为什么在查询中对字段命以别名,或重新命名,这样做的原因有两个:
(1)所涉及的表的字段名很长,想使字段在结果集中更易处理一些。
(2)创建的查询产生了某些计算或合计列,需要对之进行命名。
例:Select ID As 用户号 ,PAS As 密码 From USERS
8.连接查询
在实际使用过程中经常需要同时从两个表或者两个以上表中检索数据。连接就是允许同时从两个表或者两个以上表中检索数据,指定这些表中某个或者某些列作为连接条件。在 SQL Server 中,可以使用两种连接语法形式,一种是 Ansi 连接语法形式,这是连接用在 From 子句中,另外一种是 SQL Server 连接语句形式,这是连接用在 Where 子句中。
Ansi 连接语法形式如下:
Select table_name.column_name,table_name.column_name,......
From {table_name [join_type] Join table_name On search_conditions}
Where [search_conditions]
在 Ansi 语法形式中,可以 Ansi 连接关键字来确定使用的连接形式。
(1)使用 Inner Join 关键字,结果集中仅包含满足条件的行。
(2)使用 Cross Join 关键字,结果集中包含两个表中所有行的组合。
(3)使用 Outer Join 关键字,结果集中既包含那些满足条件的行,还包含那些其中某个表的全部行。
连接有多种形式,例如内连接、外边接、无限制连接、自边接等外连接又可以分为左外连接、右外连接和全连接。下面详细介绍这些连接方法。
(1)内连接
内连接用于把两个表一个第三个表,在这个第三个表中,仅包含那么满足连接条件的记录的记录行。内连接主要有两种形式,即等价连接和自然连接。
等价连接就是连接通过比较列值是相等的列,等价连接总会产生冗余行,因为连接的列要显示两次。
自然连接就是比较列值与两个或者多个表中列是否相等,但是连接的列只显示一次。自然连接清除了等价连接产生的冗余行。
(2)无限制连接
无限制连接有时也称为交叉连接,产生一个结果集。在这个结果集中中,包含了所连接的两个表中所有行的全部组合。交叉连接既可以使用 Ansi 连接的 Cross Join 关键字来创建,也可以使用 Where 子句的 SQL Server 连接形式可以产生非常大的结果集,例如如果在连接中,一个表的记录是12行,另一个表中的记录是15行,那么在产生的结果集中就有 180 行记录。因此,这种连接形式通常没有什么实际意义。
(3)外连接
内连接是保证两面三刀个表中所有的行都要满足连接条件,而外连接则不然。在外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表中行。这种连接形式在许多情况下是非常有用的。外连接只能用于两个表中。
在 Ansi 语法形式中,包含下列三种外连接关键字:
◆Left Outer Join 包含了左表中的全部行(表达式中第一个表)
◆Right Outer Join 包括了右表中的全部行(表达式中第二个表)
◆Full Outer Join 包括了左表和右表中所有不满足条件的行
在 SQL Server 连接语法形式中,包括下列两种外连接运算符:
◆* = 包含了左表中的全部行(表达式中第一个表)
◆ = * 包括了右表中的全部行(表达式中第二个表)
左外连接和右连接都可以产生同样的结果,关键是看表达式中出现的前后顺序
(4)自连接
自连接就是把某一个表中的行同该表中另外一些行连接起来。自连接主要用在查询比较相同的信息。例如,如果希望得到所有合作出版书的作者,那么可以使用比较作者代号的查询。所比较的列必须有相同的或者兼容的数据类型。
为了连接同一个表,为该表指定两个别名是非常重要的,这样才可以把该逻辑上作为两个不同的表使用。通过在 From 子句中的表名后面增加一个名称,这种名称就是表的别名。
在 Ansi 语法形式中,自连接形式如下:
Select column_name,column_name,.....
From column_name alias [join_type] Join column_name alias
On search_conditions
Where table_name.column_name join_operator table_name.column_name
在 SQL Server 连接语法形式中,自连接形式如下:
Select column_name,column_name,.....
Where table_name.column_name join_operator table_name.column_name
(5)子查询
Select 语句可以嵌套在其它许多语句中,例如 Select、Insert、Update 或者 Delete 这些嵌套的 Select 语句就称为子查询。子查询有两种类型,一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方种是返回一列值的的子查询,这时它只能用在 Where 子句中。子查询必须使用括号括起来。
9.在 SQL 查询中涉及的多个合计函数
合计函数
参数
描述
AVG
([ALL|DISTINCT]expr)
数据表达式的平均值
COUNT
([ALL|DISTINCT]expr)
在某个表达式中数据值的数量
COUNT
(*)
所选择行的数量
MAX
(expression)
表达式中的最大值
MIN
(expresion)
表达式中的最小值
SUM
([ALL|DISTINCT]expr)
数据表达式的总合值
1.简单SELECT语句
“SELECT *” 的意思是:返回在所指定的记录源中能找到的所有字段。这种命令形式很方便,因为你无需知道从表中检索的字段名称。然而,检索表中的所有列是低效的。因此,因该只检索需要的字段,这样可以大大的提高查询的效率。
2.使用 From 子句指定记录源
From 子句说明的是查询检索记录的记录源;该记录源可以是一个表或另一个存储查询。
例:Select * From students 检索students表中的所有记录
3.用 Where 子句说明条件
Where 子句告诉数据库引擎根据所提供的一个或多个条件限定其检索的记录。条件是一个表达式,可具有真假两种判断。
例:Select * From USERS Where ID='123' (注:标准的SQL语句使用单引号作为字符的定界符)
返回USERS表中ID字段为"123"的所有记录。
使用 And 和 Or 逻辑可以将两个或更多的条件链接到一起以创建更高级的 Where 子句。
例:Select * From USERS Where ID = '123' And PWD <> ''
返回ID为“123”PWD不为空的记录。
SQL语句中的比较运算符
操作符
功能
操作符
功能
>
大于
>=
大于或等于
<
小于
<=
小于或等于
=
等于
<>
不等于
Between
在某个取值范围内
Like
匹配某个模式
In
包含在某个值列表中
(1)Between 操作符
Select * From USERS Where ID Between 1 And 100
Between 操作符返回的是位于所说明的界限之内的所有记录值。这个例子就返回ID字段从1到100之间的全部记录。
(2)Like 操作符和通配符
Select * From USERS Where ID Like "%3%"
Like 操作符把记录匹配到你说明的某个模式。这个例子是返回ID中含“3”的所有记录。
四种通配符的含义
通配符
描述
通配符
描述
%
代表零个或者多个任意字符
[ ]
指定范围内的任意单个字符
_
代表一个任意字符
[^]
不在指定范围内的任意单个字符
全部示例子如下:
Like "BR%" 返回以"BR"开始的任意字符串
Like "br%" 返回以"br"开始的任意字符串
Like "%een" 返回以"een"结束的任意字符串
Like "%en%" 返回包含"en"的任意字符串
Like "_en" 返回以"en"结束的三个字符串
Like "[CK]%" 返回以"C"或者"K"开始的任意字符串
Like "[S-V]ing" 返回长为四个字符的字符串,结尾是"ing",开始是从S到V
Like "M[^c]%" 返回以"M"开始且第二个字符不是"c"的任意字符串
4.使用Order By排序
在一个正式的 Select 查询之后包含一个 Order By 子句,后跟想排序的字段(可以有多个)便可以说明一个排序顺序。
例:Select * From USERS Where ID Like '%3%' Order By ID
对返回的记录按ID进行排序。
以降序排序(默认按升序),只需在排序的字段之后使用 Desc 关键字。
例:Select * From USERS Where ID Like '%3%' Order By ID Desc
5.使用 Top 显示某个范围的第一个记录或最后一个记录
使用 Top 关键字可以只显示一个大记录前面或后面的少数几个记录。在查询中,Top 关键字与排序子句一起把结果集限制为少数几个记录或按某个百分比显示整个结果记录集合中的一部分。
例:Select Top 3 * From USERS 返回USERS表中的前3条记录
Select Top 10 Percent * From USERS 返回USERS表中前面的10%个记录
Select Top 3 * From USERS Order By ID Desc 返回USERS表中ID最大的的3条记录
6.用 As 对字段名进行别名化
为什么在查询中对字段命以别名,或重新命名,这样做的原因有两个:
(1)所涉及的表的字段名很长,想使字段在结果集中更易处理一些。
(2)创建的查询产生了某些计算或合计列,需要对之进行命名。
例:Select ID As 用户号 ,PAS As 密码 From USERS
8.连接查询
在实际使用过程中经常需要同时从两个表或者两个以上表中检索数据。连接就是允许同时从两个表或者两个以上表中检索数据,指定这些表中某个或者某些列作为连接条件。在 SQL Server 中,可以使用两种连接语法形式,一种是 Ansi 连接语法形式,这是连接用在 From 子句中,另外一种是 SQL Server 连接语句形式,这是连接用在 Where 子句中。
Ansi 连接语法形式如下:
Select table_name.column_name,table_name.column_name,......
From {table_name [join_type] Join table_name On search_conditions}
Where [search_conditions]
在 Ansi 语法形式中,可以 Ansi 连接关键字来确定使用的连接形式。
(1)使用 Inner Join 关键字,结果集中仅包含满足条件的行。
(2)使用 Cross Join 关键字,结果集中包含两个表中所有行的组合。
(3)使用 Outer Join 关键字,结果集中既包含那些满足条件的行,还包含那些其中某个表的全部行。
连接有多种形式,例如内连接、外边接、无限制连接、自边接等外连接又可以分为左外连接、右外连接和全连接。下面详细介绍这些连接方法。
(1)内连接
内连接用于把两个表一个第三个表,在这个第三个表中,仅包含那么满足连接条件的记录的记录行。内连接主要有两种形式,即等价连接和自然连接。
等价连接就是连接通过比较列值是相等的列,等价连接总会产生冗余行,因为连接的列要显示两次。
自然连接就是比较列值与两个或者多个表中列是否相等,但是连接的列只显示一次。自然连接清除了等价连接产生的冗余行。
(2)无限制连接
无限制连接有时也称为交叉连接,产生一个结果集。在这个结果集中中,包含了所连接的两个表中所有行的全部组合。交叉连接既可以使用 Ansi 连接的 Cross Join 关键字来创建,也可以使用 Where 子句的 SQL Server 连接形式可以产生非常大的结果集,例如如果在连接中,一个表的记录是12行,另一个表中的记录是15行,那么在产生的结果集中就有 180 行记录。因此,这种连接形式通常没有什么实际意义。
(3)外连接
内连接是保证两面三刀个表中所有的行都要满足连接条件,而外连接则不然。在外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表中行。这种连接形式在许多情况下是非常有用的。外连接只能用于两个表中。
在 Ansi 语法形式中,包含下列三种外连接关键字:
◆Left Outer Join 包含了左表中的全部行(表达式中第一个表)
◆Right Outer Join 包括了右表中的全部行(表达式中第二个表)
◆Full Outer Join 包括了左表和右表中所有不满足条件的行
在 SQL Server 连接语法形式中,包括下列两种外连接运算符:
◆* = 包含了左表中的全部行(表达式中第一个表)
◆ = * 包括了右表中的全部行(表达式中第二个表)
左外连接和右连接都可以产生同样的结果,关键是看表达式中出现的前后顺序
(4)自连接
自连接就是把某一个表中的行同该表中另外一些行连接起来。自连接主要用在查询比较相同的信息。例如,如果希望得到所有合作出版书的作者,那么可以使用比较作者代号的查询。所比较的列必须有相同的或者兼容的数据类型。
为了连接同一个表,为该表指定两个别名是非常重要的,这样才可以把该逻辑上作为两个不同的表使用。通过在 From 子句中的表名后面增加一个名称,这种名称就是表的别名。
在 Ansi 语法形式中,自连接形式如下:
Select column_name,column_name,.....
From column_name alias [join_type] Join column_name alias
On search_conditions
Where table_name.column_name join_operator table_name.column_name
在 SQL Server 连接语法形式中,自连接形式如下:
Select column_name,column_name,.....
Where table_name.column_name join_operator table_name.column_name
(5)子查询
Select 语句可以嵌套在其它许多语句中,例如 Select、Insert、Update 或者 Delete 这些嵌套的 Select 语句就称为子查询。子查询有两种类型,一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方种是返回一列值的的子查询,这时它只能用在 Where 子句中。子查询必须使用括号括起来。
9.在 SQL 查询中涉及的多个合计函数
合计函数
参数
描述
AVG
([ALL|DISTINCT]expr)
数据表达式的平均值
COUNT
([ALL|DISTINCT]expr)
在某个表达式中数据值的数量
COUNT
(*)
所选择行的数量
MAX
(expression)
表达式中的最大值
MIN
(expresion)
表达式中的最小值
SUM
([ALL|DISTINCT]expr)
数据表达式的总合值
本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )
【编程爱好者论坛】