1
第 五 章结构化查询语言 (SQL)
目录上页下页退出
2
本 章 目 录第一节 SQL概述第二节 数据定义功能第三节 数据操纵功能第四节 数据查询功能目录上页下页退出
3
一,SQL语言的特点
1,综合统一
SQL语言集数据定义 ( DDL),数据操纵 ( DML),
数据管理 ( DCL) 的功能于一体,语言风格统一,可以独立完成数据库的全部操作,包括定义关系模式,录入数据及建立数据库,查询,更新,维护数据,数据库的重新构造,数据库安全性等一系列操作的要求,
为数据库应用系统开发者提供了良好的环境 。
2,高度非过程化
3,面向集合的操作方式
4,以同一种语法结构提供两种使用方式
5,语言简洁,易学易用第一节 SQL概述目录上页下页退出
4
二,SQL语言的基本概念
SQL语言支持关系型数据库的三级模式结构 。 其中外模式对应于视图 ( View) 和部分基本表 ( Base Table),
模式对应于基本表,内模式对应于存储文件 。
基本表是本身独立存在的表,在 SQL语言中一个关系对应一个表 。 一些基本表对应一个存储文件,一个表可以带若干索引,索引存放在存储文件中 。
存储文件的逻辑结构组成了关系型数据库的内模式 。
而存储文件的物理文件结构是任意的 。
视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库只存放在视力的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表 。
目录上页下页退出
5
数据定义语言 DDL用于执行数据定义的操作,如创建或删除表、索引和视图之类的对象。由 CREATE,DROP、
ALTER命令组成,完成数据库对象的建立( CREATE)、
删除( DROP) 和修改( ALTER)。
一,定义 ( 创建 ) 表
【 格式 】 CREATE TABLE <表名 1> ( <字段名 1><数据类型 >[( <宽度 >[,<小数位数 >]) ][完整性约束 ][NULL |
NOT NULL][,<字段名 2>… ]) [PRIMARY KEY |
UNIQUE] [DEFAULT <表达式 >] [REFERENCES <表名
2>[TAG <标识 1>]]
【 功能 】 定义 ( 也称创建 ) 一个表 。
第二节 数据定义功能目录上页下页退出
6
字段类型 字段宽度 小数位 说明
C n – 字符型字段的宽度为 n ( C h a r a c t e r f i e l d o f w i d t h n )
D – – 日期类型( Date )
T – – 日期时间类型( Date Time )
N n d
数值字段类型,宽度为 n,小数位为 d ( N u m e r i c f i e l d o f
width n with d decimal places )
F n d
浮点数值字段类型,宽度为 n,小数位为 d ( F l o a t i n g
numeric field of width n with d decimal places )
I – – 整数类型( Integer )
B – d 双精度类型( Doub le )
Y – – 货币类型( Currency )
L – – 逻辑类型( Logical )
M – – 备注类型( Memo )
G – – 通用类型( General )
数据类型说明目录上页下页退出
7
【 例 5-1】 创建一个表 STUD( 学生信息表 ),它由以下字段组成:学号 ( C,10) ; 姓名 ( C,8) ; 性别 ( C,
2) ; 班级名 ( C,10) ; 系别代号 ( C,2) ; 地址 ( C,
50) ; 出生日期 ( D) ; 是否团员 ( L) ; 备注 ( M) 。
CREATE TABLE STUD( 学号 C( 10),姓名 C( 10),性别 C( 2),班级名 C( 10),系别代号 C( 2),地址 C
( 50),出生日期 D,是否团员 L,备注 M,照片 G)
LIST STRUCTURE
【 例 5-2】 创建一个表 SC( 课程成绩表 ),它由以下字段组成:学号 ( C,10) ; 课程号 ( C,2) 。
CREATE TABLE SC( 学号 C( 10),课程号 C( 2) )
LIST STRUCTURE
目录上页下页退出
8
【例 5-3】 利用 SQL命令建立,图书管理,数据库,其中包含4个表:读者表、作者表、图书表、借书表。
操作步骤如下:
1.创建数据库,
CREATE DATABASE 图书管理
2.用 SQL命令建立,读者,表:
CREATE TABLE 读者 (读者编号 C(9) NOT NULL;
PRIMARY KEY,姓名 C(8),性别 C(2) CHECK(性别 =,;
男,OR 性别 =,女,) DEFAULT,男,,出身日期 D,
少 ;数民族否 L,籍贯 C(10),联系电话 C(8),照片 G)
说明,该命令在当前打开的图书管理数据库中建立读者表,其中读者编号为主关键字,用 CHECK对性别字段值说明了有效性规则,并设定了性别字段默认值为
,男,。
目录上页下页退出
9
3.用 SQL语句建立,作者,表:
CREATE TABLE 作者 (作者编号 C(2) PRIMARY KEY,;
作者姓名 C(10),职称 C(10),联系电话 C(10),备注 M)
4.用 SQL语句建立,图书,表:
CREATE TABLE 图书 (书号 C(6) NOT NULL PRIMARY KEY,;
作者编号 C(2) NOT NULL,书名 C(14),价格 N(8,2),;
数量 I,出版社 C(18),;
FOREIGN KEY 作者编号 TAG 作者编号 REFERENCES 作者 )
说明,该命令在当前打开的图书管理数据库中建立图书表,
其中书号为主关键字,,FOREIGN KEY 作者编号,表示在该表的,作者编号,字段上建立了一个普通索引,同时说明该字段是联接字段,通过引用作者表中的主索引,作者编号,( TAG 作者编号 REFERENCES 作者)与作者表建立联系。
目录上页下页退出
10
5.用 SQL语句建立,借书,表:
CREATE TABLE 借书 (读者编号 C(6) NOT NULL,读者姓名
C(10),书号 C(6),借书日期 D DEFAULT DATE(),还书日 ;
期 D NULL,;
FOREIGN KEY 读者编号 TAG 读者编号 REFERENCES 读者 ;
FOREIGN KEY 书号 TAG 书号 REFERENCES 图书 )
说明,该命令在当前打开的图书管理数据库中建立借书表,
其中,FOREIGN KEY 读者编号,在该表的,读者编号,字段上建立了一个普通索引,同时说明该字段是联接字段,
通过引用读者表中的主索引,读者编号,( TAG 读者编号
REFERENCES 读者)与读者表建立联系。
这里要注意:,FOREIGN KEY 读者编号 TAG 读者编号
REFERENCES 读者,语句中前后两个,读者编号,的含义不同。
目录上页下页退出
11
6.执行完以上命令后可以在数据库设计器中看到如图 5-1
所示界面。
图 5-1 数据库设计器 — 图书管理目录上页下页退出
12
【 格式 】 ALTER TABLE <表名 >[ADD <新字段名 ><数据类型 >[( <宽度 >[,<小数位数 >]) ]
[完整性约束 ][NULL | NOT NULL]][DROP [完整性约束 ]][MODIFY <字段名 ><数据类型 >]
【 功能 】 修改表结构 。
【 说明 】 ADD子句用于增加指定表的字段变量名,数据类型,
宽度和完整性约束条件; DROP子句用于删除指定的的完整性约束条件; MODIFY子句用于修改原有的字段变量的值 。
【 例 5-4】 在课程成绩表 SC中,增加一个成绩字段变量 (N,3) 。
ALTER TABLE SC ADD 成绩 N(3)
LIST STRUCTURE
二、修改表目录上页下页退出
13
【例 5-5】修改表结构综合练习。
( 1)创建数据库和数据库表
CREATE DATABASE tempbase
CREATE TABLE temp1(aa C(2),bb N(5,2),dd D)
CREATE TABLE temp2(aa1 C(2),bb1 N(5,2),dd1 I)
( 2) 以字段 aa为索引表达式为表 temp1增加一个主索引,
索引标识为 aa_key
ALTER TABLE temp1 ADD PRIMARY KEY aa TAG aa_key
( 3) 以字段 aa1为索引表达式给表 temp2增加一个普通索引,索引标识 aa1_key; 并且将表 temp1的索引 aa_key作为 temp2关联字段。
ALTER TABLE temp2 ADD FOREIGN KEY aa1 TAG aa1_key;
REFERENCES temp1 TAG aa_key
目录上页下页退出
14
( 4)将表 temp1 中,dd”的字段名改为,cc”
ALTER TABLE temp1 RENAME COLUMN dd TO cc
( 5) 删除表 temp2中字段名为,dd1”的字段
ALTER TABLE temp2 DROP dd1
( 6) 将( 3)所建的普通索引的关联字段删除。
ALTER TABLE temp2 DROP FOREIGN KEY TAG aa1_key;
SAVE
( 7) 将( 3)所建的普通索引删除。
ALTER TABLE temp2 DROP FOREIGN KEY TAG aa1_key
注意,增加普通索引时,必须同时指明与它关联的字段。
目录上页下页退出
15
【 格式 】 DROP DATABASE <数据库名 >
【 功能 】 删除指定数据库的结构和数据 。
【 说明 】 谨慎使用 。
四,删除表
【 格式 】 DROP TALBE <表名 >
【 功能 】 删除指定表的结构和内容 ( 包括在此表上建立的索引 ) 。
【 说明 】 如果只是想删除一个表中的所有记录,则应使用 DELETE语句 。
三、删除数据库目录上页下页退出
16
数据操纵语言是完成数据操作的命令,一般分为两种类型的数据操纵,它们统称为 DML:
● 数据检索 ( 常称为查询 ),寻找所需的具体数据 。
● 数据修改:添加,删除和改变数据 。
数据操纵语言一般由 INSERT( 插入 ),DELETE
( 删除 ),UPDATE( 更新 ),SELETE( 检索,又称查询 ) 等组成,由于 SELETE比较特殊,所以一般又将它以查询 ( 检索 ) 语言单独出现 。
第三节 数据操纵功能目录上页下页退出
17
【 格式 1】 INSERT INTO <表名 > [<字段名表 >]
VALUES ( <表达式表 >)
【 格式 2】 INSERT INTO <表名 > FROM ARRAY <
数组名 > | FROM MEMVAR
【 功能 】 在指定的表文件末尾追加一条记录 。 格式 1用表 达 式 表 中 的各 表 达 式 值赋 值 给 < 字段名表 > 中的相应的各字段 。 格式 2 用 数 组 或 内 存 变 量 的值赋值给表文件中各字段 。
【 说明 】 如果某些字段名在 INTO子句中没有出现,则新记录在这些字段名上将取空值 ( 或默认值 ) 。
但必须注意的是,在 表 定 义说 明 了 NOT NULL
的字段名不能取空值 。
一、插入记录目录上页下页退出
18
<字段名表 >:指定表文件中的字段,缺省时,按表文件字段的顺序依次赋值 。
<表达式表 >:指定要追加的记录各个字段的值 。
【 例 5-6】 在表文件 STUD的末尾追加三条记录 。
***用表达式方式追加第一条记录 ***
INSERT INTO STUD (学号,姓名,性别,班级名,
系别代号,地址,出生日期,是否团员 ) ; VALUES
("011110","李建国 ","男 ","计 0121","01","湖北武汉 ",{09/28/02},.T.)
目录上页下页退出
19
DIMENSION DATA[ 8]
DATA( 1) ="011103"
DATA( 2) ="李宁 "
DATA( 3) ="女 "
DATA( 4) ="电 0134"
DATA( 5) ="02"
DATA( 6) ="江西九江 "
DATA( 7) ={ 05/06/85}
DATA( 8) =.F.
INSERT INTO STUD FROM ARRAY DATA
***用数组方式追加第二条记录 ***
目录上页下页退出
20
学号 ="011202"
姓名 ="赵娜 "
性别 ="女 "
班级名 ="英 0112"
系别代号 ="03"
地址 ="广西南宁 "
出生日期 ={02/21/84}
是否团员 =.F.
INSERT INTO STUD FROM MEMVAR
LIST
***用内存变量方式追加第三条记录 ***
目录上页下页退出
21
【 格式 】 UPDATE <表文件名 > SET <字段名 1>=<表达式 >
[,<字段名 2>=<表达式 >… ][WHERE <条件 >]
【 功能 】 更新指定表文件中满足 WHERE条件子句的数据 。
其中 SET子句用于指定列和修改的值,WHERE用于指定更新的行,如果省略 WHERE子句,则表示表中所有行 。
【 说明 】 更新操作又称为修改操作 。
【 例 5-7】 将成绩表 ( SC) 中,所有课程号为 02的成绩各加 5分 。
UPDATE SC SET 成绩 =成绩 +5 ;
WHERE 课程号 ="02"
二、更新记录命令目录上页下页退出
22
三、删除记录
【 格式 】 DELETE FROM <表名 > WHERE <表达式 >
【 功能 】 从指定的表中删除满足 WHERE子句条件的所有记录 。 如果在 DELETE 语 句 中 没 有 WHERE 子句,
则该表中的所有记录都将被删除 。
【 说明 】 这里的删除是逻辑删除,即在删除的记录前加上一个删除标记,*” 。
【 例 5-8】 删除 STUD表中所有性别为男的记录 。
DELETE FROM STUD ;
WHERE 性别 =,男,
目录上页下页退出
23
第四节 数据查询功能数据库中的数据很多时侯是为了查询的,
因此,数据查询是数据库的核心操作。而在 SQL
语言中,查询语言中有一条查询命令,即
SELECT语句。
一,基本查询语句
【 格式 】 SELECT [ALL | DISTINCT] <字段列表 >
FROM <表 >
【 功能 】 无条件查询 。
【 说明 】 ALL,表示显示全部查询记录,包括重复记录 。
DISTINCT,表示显示无重复结果的记录 。
目录上页下页退出
24
【 例 5-9】 显示 STUD(学生信息数据表 )中的所有记录 。
SELECT * ;
FROM STUD
命令中的 *表示输出显示所有的字段,数据来源是 STUD表,表中的内容以浏览方式显示 。
【 例 5-10】 显示 STUD( 学生信息数据表 ) 中的所有的学号及与之对应的姓名,同时能去除重名 。
SELECT DISTINCT 学号,姓名 ;
FROM STUD
目录上页下页退出
25
【 例 5-11】 显示 SC( 课程成绩表 ) 中的所有记录,并将成绩一项乘以 0.7。
SELECT 学号,课程号,成绩 *0.7 AS 成绩 ;
FROM SC
二,带条件 (WHERE)的查询语句
【 格式 】 SELECT [ALL | DISTINCT] <字段列表 >
FROM <表 >
[WHERE <条件表达式 >]
【 功能 】 从一个表中查询满足条件的数据 。
【 说明 】 <条件表达式 >由一系列用 AND 或 OR 连接的 条 件 表 达 式 组 成,条 件 表 达 式 的 格 式 可 以是以下几种:
目录上页下页退出
26
( 1) <字段名 1><关系运算符 ><字段名 2>。
( 2) <字段名 ><关系运算符 ><表达式 >。
( 3) <字段名 ><关系运算符 >ALL( <子查询 >)
( 4) <字段名 ><关系运算符 > ANY|SOME ( <子查询 >)
( 5) <字段名 >[NOT] BETWEEN <起始值 > AND <终止值 >
( 6) [NOT] EXISTS ( <子查询 >)
( 7) <字段名 > [NOT] IN <值表 >
( 8) <字段名 > [NOT] IN ( <子查询 >)
( 9) <字段名 > [NOT] LINK <字符表达式 >
目录上页下页退出
27
运算符 说 明
ALL
满足子查询中所有值的记录。
语法,< 字段 > < 比较符 > ALL(< 子查询 >)
ANY
满足子查询中任意一个值的记录。
语法,< 字段 > < 比较符 > ANY(< 子查询 >)
SOME
满足集合中的某一个值,功能与用法与 ANY 相同。
语法,< 字段 > < 比较符 > SOME < 字符表达式 >
BETWEEN? A N D?
字段的内容在指定范围内,包括上、下限语法,< 字段 > BETWEEN < 下限 > AND < 上限 >
EXISTS
测试子查询中查询结果是否为空,若为空,则返回,F,。
语法,EXISTS(< 子查询 >)
IN
字段内容是否是结果集合或者子查询中的内容。
语法,< 字段 > [ N O T ] I N < 结果集合 > 或者 < 字段 > [ N O T ] I N ( < 子查询 > )
LIKE
对字符型数据进行字符串比较,提供两种通配符,即下划线,_,和百分号,%,,下划线表示 1 个字符,百分号表示 0 个或多个字符。
语法,< 字段 > LIKE < 字符表达式 >
WHERE子句中的条件运算符目录上页下页退出
28
SQL支持的关系运算符如下:
=,<>,! =,#,==,>,>=,<,<= 。
【 例 5-12】 显示 STUD表中所有男生记录的学号,姓名和性别字段值 。
SELECT 学号,姓名,性别 ;
FROM STUD WHERE 性别 ="男 "
【 例 5-13】 显示 STUD表中出生日期在 85年之间的学生的学号,姓名,出生日期 。
SELECT 学号,姓名,出生日期 ;
FROM STUD ;
WHERE 出生日期 BETWEEN {01/01/85} AND {12/31/86}
目录上页下页退出
29
【 例 5-14】 显示 STUD表中姓李的学生的学号,姓名,出生日期 。
SELECT 学号,姓名,出生日期 ;
FROM STUD ;
WHERE 姓名 LIKE,李 %”
目录上页下页退出
30
三,SQL的复杂查询
1,连接查询
【 说明 】 在一个数据库中的多个表之间一般都存在着某些联系,在一个查询语句中同时涉及到两个或两个以上的表时,这种查询称之为连接查询 ( 也称为多表查询 ) 。 在多表之间查询必须处理表与表之间的连接关系 。
SELECT [ALL | DISTINCT] <字段列表 >
FROM <表 1>[,表 2…..]
WHERE <条件表达式 >
目录上页下页退出
31
【 例 5-15】 查询并显示各个学生的学号,姓名,各科成绩及课程名 。
SELECT a.学号,a.姓名,b.课程名,c.成绩 ;
FROM STUD a,COURSE b,SC c ;
WHERE a.学号 =c.学号,AND,b.课程号 =c.课程号
【 例 5-16】 查询并显示各个学生所学课程的情况 。
SELECT STUD.学号,STUD.姓名,COURSE.课程名 ;
FROM STUD,SC,COURSE ;
WHERE STUD.学号 =SC.学号,AND.SC.课程号 =COURSE.;
课程号目录上页下页退出
32
2,连接问题在 SQL语句中,在 FROM子句中提供了一种称之为连接的子句,连接分为内连接和外连接,外连接又可分为左外连接,右外连接和全外连接 。
( 1) 内连接内连接是指包括符合条件的每个表的记录,也称之为全记录操作 。 而上面两个例子就是内连接 。
【 例 5-17】 查询并显示各个学生的学号,所学课程及课程成绩 。
SELECT SC.学号,COURSE.课程名,SC.成绩 ;
FROM SC,COURSE ;
WHERE SC.课程号 =COURSE.课程号目录上页下页退出
33
如果采用内连接方式,则命令如下:
SELECT a.学号,b.课程名,成绩 ;
FROM SC a INNER JOIN COURSE b ON a.课 ;
程号 =b.课程号将会得到完全相同的结果 。
( 2) 外连接外连接是指把两个表分为左右两个表 。 右外连接是指连接满足条件右侧表的全部记录 。 左外连接是指连接满足条件左侧表的全部记录 。 全外连接是指连接满足条件表的全部记录 。
目录上页下页退出
34
3,嵌套查询在 SQL语句中,一个 SELECT- FROM- WHERE语句称为一个查询块 。 将一个查询块嵌套在另一个查询块的 WHERE子句或 HAVING短语的条件中的查询称为嵌套查询或子查询 。
【 例 5-18】 显示,李宁,所在班级的学生名单 。
SELECT 学号,姓名,班级名 ;
FROM STUD ;
WHERE 班级名 =( SELECT 班级名 FROM STUD;
WHERE 姓名 ="李宁 ")
目录上页下页退出
35
4,分组与计算查询
【 格式 】 SELECT [ALL | DISTINCT] <字段列表 >
FROM <表 >
[WHERE <条件 >]
[GROUP BY <分类字段列表 >… ]
[HAVING <过滤条件 >]
[ORDER BY <排序项 > [ASC | DESC]]
【 功能 】 包括有排序,函数运算和谓词演算目录上页下页退出
36
【 例 5-19】 按出生日期降序显示 STUD表中的学号,姓名,出生日期 。
SELECT 学号,姓名,出生日期 ;
FROM STUD ;
ORDER BY 出生日期 DESC
【 例 5-20】 按成绩升序显示 SC表中的学号,课程号,
成绩 。
SELECT 学号,课程号,成绩 ;
FROM SC ;
ORDER BY 成绩目录上页下页退出
37
【 例 5-21】 按班级分类显示学生的姓名,课程名,成绩,同一班级按分数排序 。
SELECT a.姓名,a.班级名,c.课程名,b.成绩 ;
FROM STUD a,SC b,COURSE c ;
WHERE a.学号 =b.学号 AND b.课程号 =c.课程号 ;
ORDER BY a.班级名,b.成绩 ;
【 例 5-22】 显示成绩在 80至 90之间的学号,姓名,课程名和成绩 。
SELECT a.姓名,c.课程名,b.成绩 ;
FROM STUD a,SC b,COURSE c;
WHERE a.学号 =b.学号 AND b.课程号 =c.课程号 ;
AND b.成绩 BETWEEN 80 AND 90
目录上页下页退出
38
【 例 5-23】 显示计算机系学生的成绩 。
SELECT a.姓名,a.系别代号,c.课程名,b.成绩 ;
FROM STUD a,SC b,COURSE c ;
WHERE a.学号 =b.学号 AND b.课程号 =c.课程号 ;
AND a.系别代号 =,01”
【 例 5-24】 显示各班总人数 。
SELECT 班级名,COUNT( 班级名 ) AS 总人数 ;
FROM STUD ;
GROUP BY 班级名目录上页下页退出
39
【 例 5-25】 显示计算机系的学生及所有男学生 。
SELECT 学号,姓名,系别代号,性别 ;
FROM STUD ;
WHERE 系别代号 ="01" UNION ;
SELECT 学号,姓名,系别代号,性别 ;
FROM STUD ;
WHERE 性别 ="男 "
【 例 5-26】 显示选修了英语或数学科目的学生学号 。
SELECT 学号,课程号 FROM SC ;
WHERE 课程号 =,01” UNION ;
SELECT 学号,课程号 ;
FROM SC ;
WHERE 课程号 =,02”
目录上页下页退出
40
【 例 5-27】 显示计算机系男生的名单 。
SELECT 学号,姓名,系别代号,性别 ;
FROM STUD ;
WHERE 系别代号 =,01” AND 性别 =,男,
【 例 5-28】 显示既选修了 01课程又选修了 02课程学生的名单 。
SELECT 学号 ;
FROM SC ;
WHERE 课程号 =,01” AND 学号 IN ;
( SELECT 学号 FROM SC WHERE 课程号 =,02” )
目录上页下页退出
41
【 例 5-29】 显示计算机系非男生的名单 。
SELECT 学号,姓名,系别代号,性别 ;
FROM STUD ;
WHERE 系别代号 =,01” AND 性别 =,女,
【 例 5-30】 显示选修了 01课程而没有选修 02课程学生的名单 。
SELECT 学号 ;
FROM SC ;
WHERE 课程号 =,01” AND 学号 NOT IN ;
( SELECT 学号 FROM SC WHERE 课程号 =,02” )
目录上页下页退出
42
5.输出合并
SQL命令的输出合并功能是由 UNION子句实现的,其含义是将两个 SELECT命令的查询结果合并成一个查询结果。
子句格式,[UNION[ALL]<SELECT 命令 >]
其中 ALL表示结果全部合并。若没有 ALL,则重复的记录将被自动取掉。合并的规则是:
(1)不能合并子查询的结果。
(2)两个 SELECT命令必须输出同样的列数。
(3)两个表各相应列出的数据类型必须相同,数字和字符不能合并。
(4)仅最后一个 SELECT命令中可以用 ORDER BY子句,
且排序选项必须用数字说明。
目录上页下页退出
43
【例 5-31】 对读者数据表中列出籍贯为湖南、湖北的所有读者编号与姓名。
SELECT 读者编号,姓名 FROM 读者 WHERE 籍贯
=,湖南,UNION SELECT 读者编号,姓名 ;
FROM 读者 WHERE 籍贯 ="湖北 "
目录上页下页退出
44
6,重定向输出默认情况下,查询输出到一个浏览窗口,用户在
,SELECT”语句中可使用 [INTO<目标 >|TO FILE<文件名
>|TO SCREEN| TO PRINTER]子句选择查询去向:
INTO ARRAY 数组名,将查询结果保存到一个数组中 。
CURSOR< 临时表名 >,将查询结果保存到一个临时表中 。
DBF | TABLE <表名 >,将查询结果保存到一个永久表中 。
TO FILE<文件名 >[ADDITIVE],将查询结果保存到文本文件中 。 如果带,ADDITIVE”关键字,查询结果以追加方式添加到 <文件名 >指定的文件,否则,以新建或覆盖方式添加到 <文件名 >指定的文件 。
TO SCREEN,将查询结果保在屏幕上显示 。
TO PRINTER,将查询结果送打印机打印 。
目录上页下页退出
45
【 例 5-32】 将 【 例 5-30】 的查询结果保存到 aaa.txt文本文件中 。
SELECT 学号 ;
FROM SC ;
WHERE 课程号 =,01” AND 学号 NOT IN ;
( SELECT 学号 FROM SC WHERE 课程号 =,02” ) ;
TO FILE aaa
46
结 束
第 五 章结构化查询语言 (SQL)
目录上页下页退出
2
本 章 目 录第一节 SQL概述第二节 数据定义功能第三节 数据操纵功能第四节 数据查询功能目录上页下页退出
3
一,SQL语言的特点
1,综合统一
SQL语言集数据定义 ( DDL),数据操纵 ( DML),
数据管理 ( DCL) 的功能于一体,语言风格统一,可以独立完成数据库的全部操作,包括定义关系模式,录入数据及建立数据库,查询,更新,维护数据,数据库的重新构造,数据库安全性等一系列操作的要求,
为数据库应用系统开发者提供了良好的环境 。
2,高度非过程化
3,面向集合的操作方式
4,以同一种语法结构提供两种使用方式
5,语言简洁,易学易用第一节 SQL概述目录上页下页退出
4
二,SQL语言的基本概念
SQL语言支持关系型数据库的三级模式结构 。 其中外模式对应于视图 ( View) 和部分基本表 ( Base Table),
模式对应于基本表,内模式对应于存储文件 。
基本表是本身独立存在的表,在 SQL语言中一个关系对应一个表 。 一些基本表对应一个存储文件,一个表可以带若干索引,索引存放在存储文件中 。
存储文件的逻辑结构组成了关系型数据库的内模式 。
而存储文件的物理文件结构是任意的 。
视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库只存放在视力的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表 。
目录上页下页退出
5
数据定义语言 DDL用于执行数据定义的操作,如创建或删除表、索引和视图之类的对象。由 CREATE,DROP、
ALTER命令组成,完成数据库对象的建立( CREATE)、
删除( DROP) 和修改( ALTER)。
一,定义 ( 创建 ) 表
【 格式 】 CREATE TABLE <表名 1> ( <字段名 1><数据类型 >[( <宽度 >[,<小数位数 >]) ][完整性约束 ][NULL |
NOT NULL][,<字段名 2>… ]) [PRIMARY KEY |
UNIQUE] [DEFAULT <表达式 >] [REFERENCES <表名
2>[TAG <标识 1>]]
【 功能 】 定义 ( 也称创建 ) 一个表 。
第二节 数据定义功能目录上页下页退出
6
字段类型 字段宽度 小数位 说明
C n – 字符型字段的宽度为 n ( C h a r a c t e r f i e l d o f w i d t h n )
D – – 日期类型( Date )
T – – 日期时间类型( Date Time )
N n d
数值字段类型,宽度为 n,小数位为 d ( N u m e r i c f i e l d o f
width n with d decimal places )
F n d
浮点数值字段类型,宽度为 n,小数位为 d ( F l o a t i n g
numeric field of width n with d decimal places )
I – – 整数类型( Integer )
B – d 双精度类型( Doub le )
Y – – 货币类型( Currency )
L – – 逻辑类型( Logical )
M – – 备注类型( Memo )
G – – 通用类型( General )
数据类型说明目录上页下页退出
7
【 例 5-1】 创建一个表 STUD( 学生信息表 ),它由以下字段组成:学号 ( C,10) ; 姓名 ( C,8) ; 性别 ( C,
2) ; 班级名 ( C,10) ; 系别代号 ( C,2) ; 地址 ( C,
50) ; 出生日期 ( D) ; 是否团员 ( L) ; 备注 ( M) 。
CREATE TABLE STUD( 学号 C( 10),姓名 C( 10),性别 C( 2),班级名 C( 10),系别代号 C( 2),地址 C
( 50),出生日期 D,是否团员 L,备注 M,照片 G)
LIST STRUCTURE
【 例 5-2】 创建一个表 SC( 课程成绩表 ),它由以下字段组成:学号 ( C,10) ; 课程号 ( C,2) 。
CREATE TABLE SC( 学号 C( 10),课程号 C( 2) )
LIST STRUCTURE
目录上页下页退出
8
【例 5-3】 利用 SQL命令建立,图书管理,数据库,其中包含4个表:读者表、作者表、图书表、借书表。
操作步骤如下:
1.创建数据库,
CREATE DATABASE 图书管理
2.用 SQL命令建立,读者,表:
CREATE TABLE 读者 (读者编号 C(9) NOT NULL;
PRIMARY KEY,姓名 C(8),性别 C(2) CHECK(性别 =,;
男,OR 性别 =,女,) DEFAULT,男,,出身日期 D,
少 ;数民族否 L,籍贯 C(10),联系电话 C(8),照片 G)
说明,该命令在当前打开的图书管理数据库中建立读者表,其中读者编号为主关键字,用 CHECK对性别字段值说明了有效性规则,并设定了性别字段默认值为
,男,。
目录上页下页退出
9
3.用 SQL语句建立,作者,表:
CREATE TABLE 作者 (作者编号 C(2) PRIMARY KEY,;
作者姓名 C(10),职称 C(10),联系电话 C(10),备注 M)
4.用 SQL语句建立,图书,表:
CREATE TABLE 图书 (书号 C(6) NOT NULL PRIMARY KEY,;
作者编号 C(2) NOT NULL,书名 C(14),价格 N(8,2),;
数量 I,出版社 C(18),;
FOREIGN KEY 作者编号 TAG 作者编号 REFERENCES 作者 )
说明,该命令在当前打开的图书管理数据库中建立图书表,
其中书号为主关键字,,FOREIGN KEY 作者编号,表示在该表的,作者编号,字段上建立了一个普通索引,同时说明该字段是联接字段,通过引用作者表中的主索引,作者编号,( TAG 作者编号 REFERENCES 作者)与作者表建立联系。
目录上页下页退出
10
5.用 SQL语句建立,借书,表:
CREATE TABLE 借书 (读者编号 C(6) NOT NULL,读者姓名
C(10),书号 C(6),借书日期 D DEFAULT DATE(),还书日 ;
期 D NULL,;
FOREIGN KEY 读者编号 TAG 读者编号 REFERENCES 读者 ;
FOREIGN KEY 书号 TAG 书号 REFERENCES 图书 )
说明,该命令在当前打开的图书管理数据库中建立借书表,
其中,FOREIGN KEY 读者编号,在该表的,读者编号,字段上建立了一个普通索引,同时说明该字段是联接字段,
通过引用读者表中的主索引,读者编号,( TAG 读者编号
REFERENCES 读者)与读者表建立联系。
这里要注意:,FOREIGN KEY 读者编号 TAG 读者编号
REFERENCES 读者,语句中前后两个,读者编号,的含义不同。
目录上页下页退出
11
6.执行完以上命令后可以在数据库设计器中看到如图 5-1
所示界面。
图 5-1 数据库设计器 — 图书管理目录上页下页退出
12
【 格式 】 ALTER TABLE <表名 >[ADD <新字段名 ><数据类型 >[( <宽度 >[,<小数位数 >]) ]
[完整性约束 ][NULL | NOT NULL]][DROP [完整性约束 ]][MODIFY <字段名 ><数据类型 >]
【 功能 】 修改表结构 。
【 说明 】 ADD子句用于增加指定表的字段变量名,数据类型,
宽度和完整性约束条件; DROP子句用于删除指定的的完整性约束条件; MODIFY子句用于修改原有的字段变量的值 。
【 例 5-4】 在课程成绩表 SC中,增加一个成绩字段变量 (N,3) 。
ALTER TABLE SC ADD 成绩 N(3)
LIST STRUCTURE
二、修改表目录上页下页退出
13
【例 5-5】修改表结构综合练习。
( 1)创建数据库和数据库表
CREATE DATABASE tempbase
CREATE TABLE temp1(aa C(2),bb N(5,2),dd D)
CREATE TABLE temp2(aa1 C(2),bb1 N(5,2),dd1 I)
( 2) 以字段 aa为索引表达式为表 temp1增加一个主索引,
索引标识为 aa_key
ALTER TABLE temp1 ADD PRIMARY KEY aa TAG aa_key
( 3) 以字段 aa1为索引表达式给表 temp2增加一个普通索引,索引标识 aa1_key; 并且将表 temp1的索引 aa_key作为 temp2关联字段。
ALTER TABLE temp2 ADD FOREIGN KEY aa1 TAG aa1_key;
REFERENCES temp1 TAG aa_key
目录上页下页退出
14
( 4)将表 temp1 中,dd”的字段名改为,cc”
ALTER TABLE temp1 RENAME COLUMN dd TO cc
( 5) 删除表 temp2中字段名为,dd1”的字段
ALTER TABLE temp2 DROP dd1
( 6) 将( 3)所建的普通索引的关联字段删除。
ALTER TABLE temp2 DROP FOREIGN KEY TAG aa1_key;
SAVE
( 7) 将( 3)所建的普通索引删除。
ALTER TABLE temp2 DROP FOREIGN KEY TAG aa1_key
注意,增加普通索引时,必须同时指明与它关联的字段。
目录上页下页退出
15
【 格式 】 DROP DATABASE <数据库名 >
【 功能 】 删除指定数据库的结构和数据 。
【 说明 】 谨慎使用 。
四,删除表
【 格式 】 DROP TALBE <表名 >
【 功能 】 删除指定表的结构和内容 ( 包括在此表上建立的索引 ) 。
【 说明 】 如果只是想删除一个表中的所有记录,则应使用 DELETE语句 。
三、删除数据库目录上页下页退出
16
数据操纵语言是完成数据操作的命令,一般分为两种类型的数据操纵,它们统称为 DML:
● 数据检索 ( 常称为查询 ),寻找所需的具体数据 。
● 数据修改:添加,删除和改变数据 。
数据操纵语言一般由 INSERT( 插入 ),DELETE
( 删除 ),UPDATE( 更新 ),SELETE( 检索,又称查询 ) 等组成,由于 SELETE比较特殊,所以一般又将它以查询 ( 检索 ) 语言单独出现 。
第三节 数据操纵功能目录上页下页退出
17
【 格式 1】 INSERT INTO <表名 > [<字段名表 >]
VALUES ( <表达式表 >)
【 格式 2】 INSERT INTO <表名 > FROM ARRAY <
数组名 > | FROM MEMVAR
【 功能 】 在指定的表文件末尾追加一条记录 。 格式 1用表 达 式 表 中 的各 表 达 式 值赋 值 给 < 字段名表 > 中的相应的各字段 。 格式 2 用 数 组 或 内 存 变 量 的值赋值给表文件中各字段 。
【 说明 】 如果某些字段名在 INTO子句中没有出现,则新记录在这些字段名上将取空值 ( 或默认值 ) 。
但必须注意的是,在 表 定 义说 明 了 NOT NULL
的字段名不能取空值 。
一、插入记录目录上页下页退出
18
<字段名表 >:指定表文件中的字段,缺省时,按表文件字段的顺序依次赋值 。
<表达式表 >:指定要追加的记录各个字段的值 。
【 例 5-6】 在表文件 STUD的末尾追加三条记录 。
***用表达式方式追加第一条记录 ***
INSERT INTO STUD (学号,姓名,性别,班级名,
系别代号,地址,出生日期,是否团员 ) ; VALUES
("011110","李建国 ","男 ","计 0121","01","湖北武汉 ",{09/28/02},.T.)
目录上页下页退出
19
DIMENSION DATA[ 8]
DATA( 1) ="011103"
DATA( 2) ="李宁 "
DATA( 3) ="女 "
DATA( 4) ="电 0134"
DATA( 5) ="02"
DATA( 6) ="江西九江 "
DATA( 7) ={ 05/06/85}
DATA( 8) =.F.
INSERT INTO STUD FROM ARRAY DATA
***用数组方式追加第二条记录 ***
目录上页下页退出
20
学号 ="011202"
姓名 ="赵娜 "
性别 ="女 "
班级名 ="英 0112"
系别代号 ="03"
地址 ="广西南宁 "
出生日期 ={02/21/84}
是否团员 =.F.
INSERT INTO STUD FROM MEMVAR
LIST
***用内存变量方式追加第三条记录 ***
目录上页下页退出
21
【 格式 】 UPDATE <表文件名 > SET <字段名 1>=<表达式 >
[,<字段名 2>=<表达式 >… ][WHERE <条件 >]
【 功能 】 更新指定表文件中满足 WHERE条件子句的数据 。
其中 SET子句用于指定列和修改的值,WHERE用于指定更新的行,如果省略 WHERE子句,则表示表中所有行 。
【 说明 】 更新操作又称为修改操作 。
【 例 5-7】 将成绩表 ( SC) 中,所有课程号为 02的成绩各加 5分 。
UPDATE SC SET 成绩 =成绩 +5 ;
WHERE 课程号 ="02"
二、更新记录命令目录上页下页退出
22
三、删除记录
【 格式 】 DELETE FROM <表名 > WHERE <表达式 >
【 功能 】 从指定的表中删除满足 WHERE子句条件的所有记录 。 如果在 DELETE 语 句 中 没 有 WHERE 子句,
则该表中的所有记录都将被删除 。
【 说明 】 这里的删除是逻辑删除,即在删除的记录前加上一个删除标记,*” 。
【 例 5-8】 删除 STUD表中所有性别为男的记录 。
DELETE FROM STUD ;
WHERE 性别 =,男,
目录上页下页退出
23
第四节 数据查询功能数据库中的数据很多时侯是为了查询的,
因此,数据查询是数据库的核心操作。而在 SQL
语言中,查询语言中有一条查询命令,即
SELECT语句。
一,基本查询语句
【 格式 】 SELECT [ALL | DISTINCT] <字段列表 >
FROM <表 >
【 功能 】 无条件查询 。
【 说明 】 ALL,表示显示全部查询记录,包括重复记录 。
DISTINCT,表示显示无重复结果的记录 。
目录上页下页退出
24
【 例 5-9】 显示 STUD(学生信息数据表 )中的所有记录 。
SELECT * ;
FROM STUD
命令中的 *表示输出显示所有的字段,数据来源是 STUD表,表中的内容以浏览方式显示 。
【 例 5-10】 显示 STUD( 学生信息数据表 ) 中的所有的学号及与之对应的姓名,同时能去除重名 。
SELECT DISTINCT 学号,姓名 ;
FROM STUD
目录上页下页退出
25
【 例 5-11】 显示 SC( 课程成绩表 ) 中的所有记录,并将成绩一项乘以 0.7。
SELECT 学号,课程号,成绩 *0.7 AS 成绩 ;
FROM SC
二,带条件 (WHERE)的查询语句
【 格式 】 SELECT [ALL | DISTINCT] <字段列表 >
FROM <表 >
[WHERE <条件表达式 >]
【 功能 】 从一个表中查询满足条件的数据 。
【 说明 】 <条件表达式 >由一系列用 AND 或 OR 连接的 条 件 表 达 式 组 成,条 件 表 达 式 的 格 式 可 以是以下几种:
目录上页下页退出
26
( 1) <字段名 1><关系运算符 ><字段名 2>。
( 2) <字段名 ><关系运算符 ><表达式 >。
( 3) <字段名 ><关系运算符 >ALL( <子查询 >)
( 4) <字段名 ><关系运算符 > ANY|SOME ( <子查询 >)
( 5) <字段名 >[NOT] BETWEEN <起始值 > AND <终止值 >
( 6) [NOT] EXISTS ( <子查询 >)
( 7) <字段名 > [NOT] IN <值表 >
( 8) <字段名 > [NOT] IN ( <子查询 >)
( 9) <字段名 > [NOT] LINK <字符表达式 >
目录上页下页退出
27
运算符 说 明
ALL
满足子查询中所有值的记录。
语法,< 字段 > < 比较符 > ALL(< 子查询 >)
ANY
满足子查询中任意一个值的记录。
语法,< 字段 > < 比较符 > ANY(< 子查询 >)
SOME
满足集合中的某一个值,功能与用法与 ANY 相同。
语法,< 字段 > < 比较符 > SOME < 字符表达式 >
BETWEEN? A N D?
字段的内容在指定范围内,包括上、下限语法,< 字段 > BETWEEN < 下限 > AND < 上限 >
EXISTS
测试子查询中查询结果是否为空,若为空,则返回,F,。
语法,EXISTS(< 子查询 >)
IN
字段内容是否是结果集合或者子查询中的内容。
语法,< 字段 > [ N O T ] I N < 结果集合 > 或者 < 字段 > [ N O T ] I N ( < 子查询 > )
LIKE
对字符型数据进行字符串比较,提供两种通配符,即下划线,_,和百分号,%,,下划线表示 1 个字符,百分号表示 0 个或多个字符。
语法,< 字段 > LIKE < 字符表达式 >
WHERE子句中的条件运算符目录上页下页退出
28
SQL支持的关系运算符如下:
=,<>,! =,#,==,>,>=,<,<= 。
【 例 5-12】 显示 STUD表中所有男生记录的学号,姓名和性别字段值 。
SELECT 学号,姓名,性别 ;
FROM STUD WHERE 性别 ="男 "
【 例 5-13】 显示 STUD表中出生日期在 85年之间的学生的学号,姓名,出生日期 。
SELECT 学号,姓名,出生日期 ;
FROM STUD ;
WHERE 出生日期 BETWEEN {01/01/85} AND {12/31/86}
目录上页下页退出
29
【 例 5-14】 显示 STUD表中姓李的学生的学号,姓名,出生日期 。
SELECT 学号,姓名,出生日期 ;
FROM STUD ;
WHERE 姓名 LIKE,李 %”
目录上页下页退出
30
三,SQL的复杂查询
1,连接查询
【 说明 】 在一个数据库中的多个表之间一般都存在着某些联系,在一个查询语句中同时涉及到两个或两个以上的表时,这种查询称之为连接查询 ( 也称为多表查询 ) 。 在多表之间查询必须处理表与表之间的连接关系 。
SELECT [ALL | DISTINCT] <字段列表 >
FROM <表 1>[,表 2…..]
WHERE <条件表达式 >
目录上页下页退出
31
【 例 5-15】 查询并显示各个学生的学号,姓名,各科成绩及课程名 。
SELECT a.学号,a.姓名,b.课程名,c.成绩 ;
FROM STUD a,COURSE b,SC c ;
WHERE a.学号 =c.学号,AND,b.课程号 =c.课程号
【 例 5-16】 查询并显示各个学生所学课程的情况 。
SELECT STUD.学号,STUD.姓名,COURSE.课程名 ;
FROM STUD,SC,COURSE ;
WHERE STUD.学号 =SC.学号,AND.SC.课程号 =COURSE.;
课程号目录上页下页退出
32
2,连接问题在 SQL语句中,在 FROM子句中提供了一种称之为连接的子句,连接分为内连接和外连接,外连接又可分为左外连接,右外连接和全外连接 。
( 1) 内连接内连接是指包括符合条件的每个表的记录,也称之为全记录操作 。 而上面两个例子就是内连接 。
【 例 5-17】 查询并显示各个学生的学号,所学课程及课程成绩 。
SELECT SC.学号,COURSE.课程名,SC.成绩 ;
FROM SC,COURSE ;
WHERE SC.课程号 =COURSE.课程号目录上页下页退出
33
如果采用内连接方式,则命令如下:
SELECT a.学号,b.课程名,成绩 ;
FROM SC a INNER JOIN COURSE b ON a.课 ;
程号 =b.课程号将会得到完全相同的结果 。
( 2) 外连接外连接是指把两个表分为左右两个表 。 右外连接是指连接满足条件右侧表的全部记录 。 左外连接是指连接满足条件左侧表的全部记录 。 全外连接是指连接满足条件表的全部记录 。
目录上页下页退出
34
3,嵌套查询在 SQL语句中,一个 SELECT- FROM- WHERE语句称为一个查询块 。 将一个查询块嵌套在另一个查询块的 WHERE子句或 HAVING短语的条件中的查询称为嵌套查询或子查询 。
【 例 5-18】 显示,李宁,所在班级的学生名单 。
SELECT 学号,姓名,班级名 ;
FROM STUD ;
WHERE 班级名 =( SELECT 班级名 FROM STUD;
WHERE 姓名 ="李宁 ")
目录上页下页退出
35
4,分组与计算查询
【 格式 】 SELECT [ALL | DISTINCT] <字段列表 >
FROM <表 >
[WHERE <条件 >]
[GROUP BY <分类字段列表 >… ]
[HAVING <过滤条件 >]
[ORDER BY <排序项 > [ASC | DESC]]
【 功能 】 包括有排序,函数运算和谓词演算目录上页下页退出
36
【 例 5-19】 按出生日期降序显示 STUD表中的学号,姓名,出生日期 。
SELECT 学号,姓名,出生日期 ;
FROM STUD ;
ORDER BY 出生日期 DESC
【 例 5-20】 按成绩升序显示 SC表中的学号,课程号,
成绩 。
SELECT 学号,课程号,成绩 ;
FROM SC ;
ORDER BY 成绩目录上页下页退出
37
【 例 5-21】 按班级分类显示学生的姓名,课程名,成绩,同一班级按分数排序 。
SELECT a.姓名,a.班级名,c.课程名,b.成绩 ;
FROM STUD a,SC b,COURSE c ;
WHERE a.学号 =b.学号 AND b.课程号 =c.课程号 ;
ORDER BY a.班级名,b.成绩 ;
【 例 5-22】 显示成绩在 80至 90之间的学号,姓名,课程名和成绩 。
SELECT a.姓名,c.课程名,b.成绩 ;
FROM STUD a,SC b,COURSE c;
WHERE a.学号 =b.学号 AND b.课程号 =c.课程号 ;
AND b.成绩 BETWEEN 80 AND 90
目录上页下页退出
38
【 例 5-23】 显示计算机系学生的成绩 。
SELECT a.姓名,a.系别代号,c.课程名,b.成绩 ;
FROM STUD a,SC b,COURSE c ;
WHERE a.学号 =b.学号 AND b.课程号 =c.课程号 ;
AND a.系别代号 =,01”
【 例 5-24】 显示各班总人数 。
SELECT 班级名,COUNT( 班级名 ) AS 总人数 ;
FROM STUD ;
GROUP BY 班级名目录上页下页退出
39
【 例 5-25】 显示计算机系的学生及所有男学生 。
SELECT 学号,姓名,系别代号,性别 ;
FROM STUD ;
WHERE 系别代号 ="01" UNION ;
SELECT 学号,姓名,系别代号,性别 ;
FROM STUD ;
WHERE 性别 ="男 "
【 例 5-26】 显示选修了英语或数学科目的学生学号 。
SELECT 学号,课程号 FROM SC ;
WHERE 课程号 =,01” UNION ;
SELECT 学号,课程号 ;
FROM SC ;
WHERE 课程号 =,02”
目录上页下页退出
40
【 例 5-27】 显示计算机系男生的名单 。
SELECT 学号,姓名,系别代号,性别 ;
FROM STUD ;
WHERE 系别代号 =,01” AND 性别 =,男,
【 例 5-28】 显示既选修了 01课程又选修了 02课程学生的名单 。
SELECT 学号 ;
FROM SC ;
WHERE 课程号 =,01” AND 学号 IN ;
( SELECT 学号 FROM SC WHERE 课程号 =,02” )
目录上页下页退出
41
【 例 5-29】 显示计算机系非男生的名单 。
SELECT 学号,姓名,系别代号,性别 ;
FROM STUD ;
WHERE 系别代号 =,01” AND 性别 =,女,
【 例 5-30】 显示选修了 01课程而没有选修 02课程学生的名单 。
SELECT 学号 ;
FROM SC ;
WHERE 课程号 =,01” AND 学号 NOT IN ;
( SELECT 学号 FROM SC WHERE 课程号 =,02” )
目录上页下页退出
42
5.输出合并
SQL命令的输出合并功能是由 UNION子句实现的,其含义是将两个 SELECT命令的查询结果合并成一个查询结果。
子句格式,[UNION[ALL]<SELECT 命令 >]
其中 ALL表示结果全部合并。若没有 ALL,则重复的记录将被自动取掉。合并的规则是:
(1)不能合并子查询的结果。
(2)两个 SELECT命令必须输出同样的列数。
(3)两个表各相应列出的数据类型必须相同,数字和字符不能合并。
(4)仅最后一个 SELECT命令中可以用 ORDER BY子句,
且排序选项必须用数字说明。
目录上页下页退出
43
【例 5-31】 对读者数据表中列出籍贯为湖南、湖北的所有读者编号与姓名。
SELECT 读者编号,姓名 FROM 读者 WHERE 籍贯
=,湖南,UNION SELECT 读者编号,姓名 ;
FROM 读者 WHERE 籍贯 ="湖北 "
目录上页下页退出
44
6,重定向输出默认情况下,查询输出到一个浏览窗口,用户在
,SELECT”语句中可使用 [INTO<目标 >|TO FILE<文件名
>|TO SCREEN| TO PRINTER]子句选择查询去向:
INTO ARRAY 数组名,将查询结果保存到一个数组中 。
CURSOR< 临时表名 >,将查询结果保存到一个临时表中 。
DBF | TABLE <表名 >,将查询结果保存到一个永久表中 。
TO FILE<文件名 >[ADDITIVE],将查询结果保存到文本文件中 。 如果带,ADDITIVE”关键字,查询结果以追加方式添加到 <文件名 >指定的文件,否则,以新建或覆盖方式添加到 <文件名 >指定的文件 。
TO SCREEN,将查询结果保在屏幕上显示 。
TO PRINTER,将查询结果送打印机打印 。
目录上页下页退出
45
【 例 5-32】 将 【 例 5-30】 的查询结果保存到 aaa.txt文本文件中 。
SELECT 学号 ;
FROM SC ;
WHERE 课程号 =,01” AND 学号 NOT IN ;
( SELECT 学号 FROM SC WHERE 课程号 =,02” ) ;
TO FILE aaa
46
结 束