一。概述: SQL(Structure Query Language,结构化查询语言)是美国国家标准局ANSI确认的关系数据库语言的标准,用于对关系型数据库中的数据进行存储,查询及更新等操作。正是由于SQL语言的标准化,所以大多数关系型数据库系统都支持SQL语言,它已经发展成为多种平台进行交互操作的底层会话语言。2 n; M; N3 H, v7 X p+ z
SQL语言也可应用于VFP中,VFP中的SQL命令采用Rushmore技术来优化系统的性能。一个SQL命令可以用来代替多个VFP命令& v( w5 h5 W V: ]8 K1 M* h# N$ U9 c
前面用"查询设计器"和"视图设计器"所做的工作,本质上都是生成一个select-sql命令。单击"查询设计器"中的SQL按钮,即可随时查看VFP在后台建立的SQL命令。
$ L8 N( }6 C Y1 ~ 二。SQL语言的功能:
2 F& |" U* z9 ^- s) w; j. B: Y SQL语言为用户提供了以下功能:数据定义,数据检索,数据操纵和数据控制。
$ h0 r3 C% x q9 f) v3 k SQL语言是一种交互式的计算机操作语言,也是一种数据库编程语言,它不仅能够在单机环境下提供对数据库的各种访问操作,而且还可做为一种分布式数据库语言用于客户机/服务器模式(Client/Server)数据库应用程序的开发。我们这里主要介绍select-sql查询语句。* ], P0 W3 s& {6 ^5 G" b
三。select-sql查询命令:
5 B! k9 t6 K/ O% _ 数据库中的数据查询最终总是通过select-sql命令进行。select-sql命令主要格式为:
; H# x( H! Y2 v/ W* \: ~; { select [all|distinct]列名[,列名] from 表名[,表名][into array 数组名/cursor 临时表名/dbf表名]$ R2 N: Z- t3 N5 g' ~ }, J
[where 条件表达式][group by 列名[,列名][having 条件]][order by 表达式[asc/desc]
8 f d# J% `3 o7 U 说明:
3 m+ D7 r: T5 \2 f3 [9 \ 1.select查询语句的格式主要有select子句,from子句,into子句和to子句,where子句,group by 子句和order by子句。$ R& w2 g! j+ ^' h5 `
2.select 子句指明查询输出的项目(称为列)也可以是表达式。利用表达式可以查询表中未直接存储但可以由表中数据计算出的结果。为了构造表达式,SQL提供了加(+),减(-),乘(*),除(/)四种运算符和一些函数。
. E/ ?8 h% M# t 3.在表达式中,若以*代替列名,则表示查询表的所有列。; d3 S8 I# E# S0 P
4.from子句指明被查询的表名或视图名% C, }; n! B' g& X! y2 @: y( _1 }
5.into子句指明查询结果保存在何处,可以是数组,临时表或表
2 u1 ~7 M; H3 @! n0 O! @$ b 6.select和from子句是每个SQL查询语句所必须的,其他子句是任选的。
& j1 E# a. a% m- o2 J {) G 7.where子句说明查询的条件。满足条件的查询结果可能不止一个,在select子句中有distinct选项,加了这个选项后,则要求消除查询结果中的重复项
% o7 `1 P2 _1 C9 ]) X2 o# m6 r 8.group by子句将表按列值分组,列的值相同的分在一组,having后面的子句是选择组的条件,符合条件的组才能输出。& F1 w& Y6 x! B/ x& K- a$ f% R) W
9.order by子句可对查询结果按子句中指定的列的值排序,ASC表示长序,DESC表示降序。+ f, u, a' I# R/ j# `) o
四。select-sql应用举例:
) B% W B; E6 \+ f/ P select-sql语句在操作表时,不需要先打开表,即能从表中查询出数据。以下的例子,既可在命令窗口中逐条输入运行,也可以将每个例子中的代码存入一个命令文件中,然后运行该命令文件。
+ I; i/ ~- G. t5 k; H 1.查询"职工档案"表中的全部信息:
" u* [, }! ]) G9 b0 ^ select * from 职工档案 into cursor abc &&将查询结果送入临时表abc中,*表示全部的列
0 P4 J9 ^# v- `( S select abc
7 K- `0 Y6 _: ~7 R6 C2 m- I brow' P; b4 Y5 A$ B0 k! D: Y
2.查询职工的姓名,对重名的职工只显示1次0 {5 j! @* A* P5 `( C2 H: r
select distinct 姓名 from 职工档案: T. k: u) y( c
说明:使用distinct可以消除重复的值,这里表示去掉重复的姓名
" @: U, l' b+ @9 F8 b 3.查询职工的编号,姓名和年龄8 \) S* E0 A9 Y/ [, ?6 _
select 编号,姓名,year(date())-year(出生时间) as 年龄 from 职工档案
* |2 Z- d$ c+ ]0 g 说明:select语句后面是列名。列可以是字段,字段组成的表达式或常数,AS用来指定查询结果中列的标题。此处表达式year(date())-year(出生时间)以"年龄"作为列名显示。) A( r8 x1 U+ C v4 I5 q" J! ^
4. 查询工资在800元以上的职工的编号,姓名和工资,并按工资由高到低列出
* y8 x1 }) g" x9 u& d7 Q1 k select 编号,姓名,工资 from 职工档案 where 工资>800 order by 工资 desc
9 o. Z4 s3 U; l( u0 C( K 说明:# R# _$ E9 `( }) o3 O$ O# H8 k( P
(1)order by子句中的desc是用来指明显示结果的顺序,即工资由高到低输出。缺省时,以升序(ASC)排序。& g( c( j3 }$ o) A H
(2)where子句用来指定筛选记录的条件。有多个条件时,可用AND或OR连接。9 h. c3 ]% u, e- ?! d. m l
(3)SQL的查询方式很丰富,它提供了三种谓词,它们分别是between,in和like.下面几个例子说明这三种谓词的使用。 |