(重点)计算机二级vfp-SQL命令集
- 格式:doc
- 大小:61.50 KB
- 文档页数:14
Vf讲义第二部分第一节关系数据库标准语言1、SQL概述(1)SQL(structured query language)是结构化查询语言的缩写,是关系数据库的标准语言。
SQL的核心是查询,主要功能为:数据查询(Select)、数据定义(Create、Drop,Alter)、数据操纵(Insert ,Update , Delete)、数据控制(Grant , Revoke)(2)特点:A:是一种一体化的语言B:是一种高度非过程化的语言C:非常简洁D:既可在命令窗口中使用,也可在程序中使用2、数据查询简单查询[美][dɪˈst(1)A:格式:select [distinct] 字段名列表 from 表名 [where 条件] select 姓名,性别,出生日期 from zgdaselect * from zgdaselect distinct 职称 from zgdaselect distinct 性别,职称from zgdaselect * from zgda where 性别=”女”select * from zgda where 职称="教授"select * from zgda where 工资>700select 姓名,性别,婚否 from zgda where 婚否=.t.select * from zgda where 职称="教授" and 性别="男"select * from zgda where 性别="男" or 出生日期<={^1975-01-01} B:注释:可用通配符“*”来代表所有字段distinct 表示唯一显示,各个字段值完全一致的相同记录只显示一条记录where 条件构成了条件查询,如果缺省默认为所有记录查询窗口可以按ESC键关闭(2)几种特殊的运算符A:in格式:字段名 [not] in (表达式1,表达式2,……)select * from zgda where 职称 in("教授","助教")select * from zgda where 职称 not in("助教","讲师")B:between格式1(函数):[not] between(字段名,表达式1,表达式2)select * from zgda where between(工资,500,700)格式2(短语):字段名 [not] between 表达式1 and 表达式2字段的取值范围在或不在:>=表达式1并且<=表达式2select * from zgda where not between(奖金,100,200)C:like格式1(函数): like(表达式,字段名)select * from zgda where like("王*",姓名)格式2(短语):字段名 like 表达式select * from zgda where 姓名 like “_小_”(3)排序格式:select [top n [percent%] ] [all / distinct] 字段表达式 [as 新字段名] from 表名 order by 排序字段列表 [asc] / [desc]①order by 短语的使用,asc 表示升序,desc 表示降序,默认升序select * from zgda order by 工资select * from zgda order by 出生日期 descselect * from zgda order by 奖金,工资 descselect * from zgda where 性别="女" order by 奖金 desc②top n [percent] 表示在符合查询条件的所有记录中,选取指定数量或百分比的记录,Top短语必须与order by短语同时使用select top 3 * from zgda order by 出生日期select top 2 * from zgda where 婚否=.t. order by 工资 desc③产生新字段的方法,字段表达式 as 新字段名select 姓名,职称,工资+奖金 as 实发工资 from zgdaselect 姓名,性别,year(date())-year(出生日期) as 年龄 from zgda where 职称="助教" order by 年龄 desc(4)分组与计算查询A:计算查询sum(求和字段名)avg(字段名)count(*)max(字段名)min(字段名)select sum(工资) as 工资合计 from zgdaselect sum(工资) as 工资合计,avg(工资) as 平均工资,max(工资) as 最高工资,min(工资) as 最低工资 from zgda where 性别=”男”select count(*) as 职工人数 from zgdaselect count(*) as 职工人数 from zgda where 职称=”教授”注释:以上函数均为列项求值;查询中只要有任一个(也可为多个)函数,如果没有group by 分组,则查询结果只有表中最后一条记录,如果有group by 分组,则查询结果留下每一类最后一条记录。
如果使用了以上函数,则在查询结果中只有分组字段和统计字段有效,其他字段均无实际意义。
B:分组查询:格式:select 字段表达式 [as 新字段名] from 表名 where 条件Group by 分类字段 having 条件注释:①Group by 按列的值对查询的行进行分组,查询结果留下每一类最后一条记录select 职称,sum(工资) as 工资合计 from zgda group by 职称select 性别,count(*) as 职工人数 from zgda group by 性别select 职称,性别,sum(工资) as 工资合计,count(*) as 人数 from zgda group by 职称,性别 order by 职称 desc②where短语是指在原表中进行条件筛选,也就是说,只有满足条件的记录才参与分组。
Select 职称,count(*) as 人数 from zgda where 性别=”女”group by 职称Select 性别,sum(工资) as 工资合计 from zgda where 职称=”讲师”group by 性别select 职称,性别,sum(工资+奖金) as 工资总和,max(工资+奖金) as 最高工资,avg(工资+奖金) as 平均工资 from zgda group by 职称,性别③Having 包含在查询结果中的组必须满足的条件,即对分组的结果进行筛选,去掉不满足条件的分组,必须与Group by 同时使用select 职称,count(*) as 职工人数 from zgda group by 职称select 职称,count(*) as 职工人数 from zgda group by 职称 having职工人数>=2④如果有Group by短语,而无order by 短语时,查询的结果默认以分组字段的升序排列⑤如果Where 和 Having 同时使用时,先执行Where ,再执行Having补充:在查询的过程当中使用了统计函数,并且查询结果可能有多个值,此时使用group by 短语进行分组,在分组了以后,每组对应一条记录(5)集合的并运算(union)A:是将两个select 语句的查询结果合并成一个查询结果,默认情况下,合并的结果删除重复的记录。
用all表示显示所有记录(包含重复记录)B:合并条件:列数相同,并且对应字段的数据类型和宽度相同对应字段的取值范围相同合并格式:第一条完整的sql语句 union 第二条完整的sql 语句例如:sele * from zgda where 性别=”女” union sele * from zgda where 职称=”教授”(6)利用空值查询注:查询空值时用:字段名 is nullselect * from 订购单 where 订购日期 is null查询不为空值时用:字段名 is not nullselect * from 订购单 where 订购日期 is not null(7)保存查询结果格式:select [all / distinct] 字段表达式 [as 新字段名] [top n [percent] ] from 表名Group by 分类字段having 条件order by 排序字段列表[asc] / [desc]A:输出到临时表中:into cursor 表名执行完select 语句后,临时表仍然保持打开和活动状态,但为只读一旦关闭临时表,查询结果则自动被删除B:输出到永久表中:into dbf / table [表名]执行完select 语句后,此表依然处于打开和活动状态这个表将永远保存在默认目录下C:输出到数组中: into array 数组名这里的数组为二维数组,每行一条记录,每列对应查询结果的一列,数组中有几行几列由查询结果中记录以及字段来确定数组中可以存放n个值,但他只属于一个内存变量数组的下标是从1开始的。
D:输出到文本文件中:to file 文件名 [additive]扩展名为 .txt,无格式仅是纯文本有 additive表示将查询结果追加到此文件内容的后面3、数据定义(1)建立表(若建立数据库表,则必须事先建立或打开数据库)格式:create table 表名 [free] (字段名 1 类型(宽度,小数位数)[check 条件] [error字符串] [default 默认值] [NULL] [NOT NULL] [primary key] [unique],…,… [,foreign key 索引表达式 tag 索引名 references 父表名 [tag 父表的索引名]] )注释:free 说明此表为自由表。
create table 注册 free(姓名 c(6),性别 c(2),出生年月 d)类型只能用代表字母。
check 为字段指定有效性规则;error 表示出错时的提示信息create table student(姓名 c(6),性别 c(2),年龄 i check 年龄>=10error "年龄超范围")Default 表示默认值create table score(学号 c(10),成绩 n(7,2) default 40)create table 教师(姓名 c(6),性别 c(2) default "女",基本工资 n(8,2))NULL 表示字段中允许取空值;NOT NULL 表示字段中不能取空值。