CSS201.mps

Size: px
Start display at page:

Download "CSS201.mps"

Transcription

1 第 章 SQL 基础 学习目标 瞯掌握 SQL 的概念, 了解其发展历程和特点 瞯掌握 SQL 中的数据定义 数据查询和数据更新功能及基本命令格式 内容框架 SQL 是数据库应用系统开发过程中必然会用到的技术, 所以, 在开发数据库应用之前必须掌 握 SQL 的具体命令和用法 本章将对 SQL 的各种命令进行详细介绍 3.1 SQL 概述 SQL( Structured Query Language, 结构化查询语言 ) 是关系数据库的标准语言, 是一种通用的 功能强大的关系数据库语言 当前几乎所有的关系数据库管理系统都支持 SQL, 许多软件厂商还对 SQL 基本命令集进行了不同程度的修改和扩充 SQL 的产生和发展 SQL 是由 Boyce 和 Chamberlin 于 1974 年提出的,1975 ~1979 年,IBM 公司 San Jose 研究实验室所研制的著名的关系数据库管理系统原型 System R 中实现了这种语言 由于 SQL 功能丰

2 3.1 SQL 概述 45 富 语法简洁, 因而深受计算机业界的欢迎 经过各公司的不断修改 扩充和完善,SQL 最终发展成为关系数据库的标准语言 1986 年 10 月, 美国国家标准学会 ( American National Standards Institute,ANSI) 确定其为美国关系数据库系统的工业标准 1987 年, 国际标准化组织 ( Interna- tional Organization for Standardization,ISO) 也通过了这一标准 SQL 正式成为数据库领域的主流语言之一 自 1986 年公布以来,SQL 随着数据库技术的发展而不断发展 丰富, SQL 标准的进程如表 3.1 所示 表 3.1 SQL 标准的进程标准原文大致页数发布期 SQL / 年 10 月 SQL / 年 SQL / 年 SQL / 年 SQL / 年 SQL 的特点 SQL 之所以能够为用户和业界所普遍接受并成为国际标准, 是因为它是一种综合的 功能极强同时又简单 易学的语言,SQL 集数据查询 ( data query) 数据操纵( data manipulation) 数据定义 (data definition) 数据控制( data control) 功能于一体, 其主要特点如下 (1) 综合统一因为 SQL 集 DQL( 数据查询语言 ) DDL( 数据定义语言 ) DML( 数据操纵语言 ) DCL( 数据控制语言 ) 于一体, 所以 SQL 风格统一, 可以独立地完成数据库生命周期中的全部活动 由于关系模型的数据结构单一, 关系模型中的实体及实体间的联系均用关系表示, 所以 SQL 中的所有修改操作只需一种操作符 (2) 高度非过程化在使用 SQL 时, 存取路径的选择以及 SQL 的操作过程由系统自动完成, 这不但大大降低了用户干预的程度, 减轻了用户的负担, 而且有利于提高数据的独立性 (3) 面向集合的操作方式 SQL 采用集合操作方式, 不仅操作对象 查询结果可以是记录的集合, 而且插入 删除 更新操作的对象也可以是记录的集合 (4) 以同一种语法结构提供两种使用方式 SQL 既是独立的语言, 又是嵌入式语言 作为独立的语言,SQL 能够独立地用于联机交互方式, 用户可以在终端键盘上直接输入 SQL 命令对数据库进行操作 ; 作为嵌入式语言,SQL 能够嵌入高级语言 ( 例如 C Java C ++) 程序中, 供程序员设计程序时使用 在上述两种不同的使用方式下,SQL 语法结构基本上是一致的, 从而提供其使用的灵活性和

3 46 第 3 章 SQL 基础 方便性 (5) 语言简洁, 易学易用 SQL 所实现的功能极强, 但由于其设计巧妙, 语言结构简洁, 完成核心功能只用到 9 个动词 ( 又称命令 ), 如表 3.2 所示 表 3.2 SQL 的动词 功能 SQL 动词 数据查询数据定义数据更新数据控制 SELECT CREATE ALTER DROP INSERT UPDATE DELETE GRANT REVOKE 本章只介绍 SQL 的数据定义 数据查询 数据更新命令, 关于数据控制命令的内容将在第 9 章介绍 由第 2 章可知学生选课系统的关系模式与相应的数据表是一一对应的, 所以, 学生选课系统中的关系模式一经确定, 就可以考虑在数据库系统中建立其关系模式了, 即建立数据表 如果数据表的结构有误, 则应对其加以修改 ; 如果不再需要某数据表, 则应删除之 数据表建好之后, 应向表中输入数据 如果所输入的数据有误, 则应修改之 数据一旦正确输入, 就可以进行查询 统计等操作了 为了提高数据查询速度, 应在数据表的相应字段上建立索引 为了增强数据查询操作的安全性, 还应考虑建立视图机制 3.2 数据定义 SQL 的数据定义包括针对各种数据库对象的定义, 本章只介绍定义表 索引和视图的方法, 基本定义语句 ( 命令 ) 如表 3.3 所示 表 3.3 SQL 的数据定义语句 操作对象 操作方式 定义删除修改 表 CREATE TABLE DROP TABLE ALTER TABLE 索引 CREATE INDEX DROP INDEX 视图 CREATE VIEW DROP VIEW 表的定义 查看 修改与删除表是数据库最基本的操作对象, 是实际存放数据的地方 不同的 DBMS( 数据库管理系统 ) 中定义数据表的方法稍有差别, 在开发实际应用系统时, 应针对所使用的 DBMS 查找相关资料以确定 本书中的所有内容均针对 Oracle 数据库系统 Oracle 数据库中的数据存储在一张二维表中, 通过表中的行和列来组织数据 通常表中的

4 3.2 数据定义 47 一行称为记录, 表中的一列称为字段, 一个表一般具有多个字段 Oracle 数据库中常用的基本数据类型如表 3.4 所示 表 3.4 Oracle 数据库中常用的基本数据类型 数据类型 说明 CHAR(n) VARCHAR2(n) NUMBER(p,s) INT SMALLINT FLOAT(n) DATE TIME 用于存储长度为 n 的定长字符串用于存储长度为 n 的变长字符串用于存储带符号的整型数或浮点型数,p 指有效数字位数,s 指小数位数用于存储长整型数, 也可将其写为 INTEGER 用于存储短整型数用于存储精度至少为 n 位的浮点型数用于存储日期, 包含年 月 日, 其格式为 YYYY -MM -DD 用于存储时间, 包含时 分 秒, 其格式为 HH MM SS 1. 定义表定义表的命令的一般格式如下 : CREATE TABLE < 表名 > ( < 字段名 > < 数据类型 ( 长度 ) >[ < 字段级约束 >] [, < 字段名 > < 数据类型 ( 长度 ) > [ < 字段级约束 >] ] [,CONSTRAINT < 约束名 > < 约束类型 >( 字段 [, 字段 ])] [ [,CONSTRAINT < 约束名 > < 约束类型 >( 字段 [, 字段 ]) ] ] ); 其中 : (1) CREATE 为定义表的关键字,TABLE 为表关键字 (2) 表名的命名规则如下 : 1 表名要尽量短, 且能够说明表的主要特征 ; 2 将主表与从表的名称联系起来, 引用列与被引用列最好能够使用同一个名称 ; 3 与表相关的对象的命名要与表名联系起来 ; 4 避免使用引号 关键字 非字符或非数字的字符, 除非 $ _ # 这 3 种符号 ; 5 尽量不使用特殊字符, 如中欧字符集 亚洲字符集 ( Oracle8i 版本以上可用中文字符来命名表和列, 但即便这样也尽量不要用, 除非存在特殊需求 ); 6 Oracle 系统保留字和 dual 不能用, 开发工具或软件中的保留字不能用 ; 7 表中最多可以有 个字段 ; 8 表名不区分字母大小写 注意 : 所谓主表是指参照完整性中的被引用表, 从表是指参照完整性中引用其他表中的字段值的表 例如, 课程选修 表中的 学号 字段值参照 学生 表中的 学号 字段值, 学生 表即为主表, 课程选修 表即为从表 (3) 约束可分为表级约束和字段级约束两种 如果某个约束只作用于单个字段, 则在此字

5 48 第 3 章 SQL 基础 段定义后面写出字段级约束 ; 如果某个约束作用于多个字段, 则必须在所有字段定义完成之后使 用 CONSTRAINT 子句来定义表级约束 字段级约束可被定义成表级约束, 但表级约束不能被定 义成字段级约束 Oracle 数据库中的约束类型分为主键 ( PRIMARY KEY ) 外键 ( FOREIGN KEY ) 检查 (CHECK) 唯一性 ( UNIQUE) 非空 (NOT NULL) 默认值 ( DEFAULT)6 种, 各种约束类型及其作 用如表 3.5 所示 表 3.5 Oracle 数据库的约束类型及其作用 约束类型 作用 主键约束外键约束唯一性约束检查约束非空约束默认值 保证主键列值的唯一性和非空性用来限定主表和从表中相应字段取值的一致性用来限定字段取值的非重复性, 一般用于非主属性用来限定字段的取值范围用来限定字段值必须是一个确切的值用来设定当向表中插入一条记录却未给指定字段赋值时, 用此字段的默认值填充字段 下面分别介绍表 3.5 中各种约束的定义方法 1 定义 PRIMARY 类型的约束 ( a) 定义 PRIMARY 类型的字段级约束时, 在相应字段后面标明 PRIMARY KEY 即可 例如, 在某个表中要求字段 s_no 单独作主键, 可将 s_no 定义为字段级约束, 其格式为 s_no CHAR(6) PRIMARY KEY ( b) 定义 PRIMARY 类型的表级约束时, 其格式为 CONSTRAINT < 约束名 > PRIMARY KEY( 主键字段列表 ) 字段列表中的各字段之间用符号, 分隔 例如, 在某个表中要求字段 s_no c_no 联合作主键, 由于此时主键约束作用于 2 个字段上, 因而只能将主键约束定义成表级约束, 其格式为 CONSTRAINT sc_pri PRIMARY KEY ( s_no,c_no) 上面的命令中将字段 s_no c_no 定义为表级主键约束, 约束名为 sc_pri 由于一个表的主键约束是唯一的, 所以可以省略主键约束名, 直接将主键约束写成 PRIMARY KEY ( s_no,c_no) 注意 : 一个表的主键约束是唯一的, 这并不表明一个表中的主键列是唯一的 一个表的主键可以由一列构成, 也可以由多列联合作主键 例如, 学生 表的主键是 学号, 课程 表的主键是 课程编号, 但 课程选修 表的主键则是 学号 和 课程编号 两个字段 2 定义 FOREIGN 类型的约束 ( a) 定义 FOREIGN 类型的字段级约束时, 在相应字段后面定义 REFERENCES 子句, 其格式为 REFERENCES < 引用表 >( < 引用字段 >) [ ON DELETE CASCADE DELETE SET NULL DELETE NO ACTION] 其中关键字 ON 指定引用行为, 即当主表中的一条记录被删除时, 外键所关联的从表中的所有

6 3.2 数据定义 49 相关记录的处理方法的含义如表 3.6 所示 表 3.6 外键引用行为的含义 项 DELETE CASCADE DELETE SET NULL DELETE NO ACTION 说明主表中的一条记录被删除时, 从表中的所有相关记录均被删除主表中的一条记录被删除时, 从表中的所有相关记录中的相关字段值被设置为 NULL 主表中的一条记录被删除时, 从表中的所有相关记录不执行任何操作 例如, 某个表要求字段 s_no 与 学生 表 ( student) 中的主键 s_no 关联, 并且当删除 学生 表中某个 s_no 值所在的记录时一并删除该表中的所有相关记录 该表的 s_no 字段属于外键, 可以定义为 FOREIGN 字段级约束, 具体的定义格式如下 : s_no CHAR(6) REFERENCES student( s_no) ON DELETE CASCADE ( b) 定义 FOREIGN 类型的表级约束时, 其格式为 CONSTRAINT < 约束名 >FOREIGN KEY( 字段 ) REFERENCES < 引用表 >( < 引用字段 >) [ ON DELETE CASCADE DELETE SET NULL DELETE NO ACTION] 同样, 可以将上面的例子用表级约束的方式来定义, 其格式为 CONSTRAINT stu_fig FOREIGN KEY ( s_no) REFERENCES student( s_no) ON DELETE CAS- CADE 上面的命令中定义字段 s_no 为表级外键约束, 约束名为 stu_fig 在一般情况下,FOREIGN 类型的约束均定义为字段级约束 注意 : 由于一个表的外键约束不唯一, 所以必须为每个外键约束标明不同的名称 3 定义 CHECK 类型的约束 ( a) 定义 CHECK 类型的字段级约束时, 需要在字段后面标明检查约束 检查约束的定义格式为 CHECK( < 约束表达式 >) 例如, 某个表要求字段 s_no 的取值范围为 ~ 00100, 可以在字段 s_no 上定义 CHECK 类型的字段级约束 字段级检查约束的定义格式如下 : s_no CHAR(6) CHECK( s_no BETWEEN AND ) 例如, 某个表要求字段 s_score 的值必须大于 500, 其字段级检查约束的定义格式如下 : s_score NUMBER(5,2) CHECK( s_score >500) ( b) 定义 CHECK 类型的表级约束时, 其格式为 CONSTRAINT < 约束名 > CHECK < 约束表达式 >) 例如, 某个表要求 s_score 和 s_addf 字段值之和必须大于 600, 由于检查约束作用于 2 个字段上, 因而只能将检查约束定义成表级约束, 其格式为 CONSTRAINT ck_1 CHECK( s_score +s_addf >600) 上面的命令定义表级检查约束, 其约束名为 ck_1 注意 : 由于一个表的检查约束不唯一, 所以必须为每个检查约束标明不同的名称 4 定义 UNIQUE 类型的约束

7 50 第 3 章 SQL 基础 ( a) 定义 UNIQUE 类型的字段级约束时, 在相应字段后面标明 UNIQUE 即可 例如, 某个表要求字段 s_name 的值不能重复, 则将 s_name 定义为字段级约束, 其格式为 s_name CHAR(6) UNIQUE ( b) 定义 UNIQUE 类型的表级约束时, 其格式为 CONSTRAINT < 约束名 > UNIQUE ( < 字段列表 >) 字段列表中的各字段之间用符号, 分隔 例如, 某个表要求字段 s_name s_sex 的值不能重复, 由于唯一性约束作用于 2 个字段上, 因 而只能将唯一性约束定义成表级约束, 其格式为 CONSTRAINT ut UNIQUE( s_name,s_sex) 上面的命令定义表级唯一性约束, 约束名为 ut 注意 : 由于一个表的唯一性约束不唯一, 所以必须为每个唯一性约束标明不同的名称 5 非空约束一般定义成字段级约束 定义字段级非空约束时, 在字段后面直接标明 NOT NULL 即可 例如, 某个表要求字段 s_name 必须给定一个确切的值, 不能为空值, 那么定义格式如下 : s_name CHAR(8) NOT NULL 6 默认值一般定义成字段级约束 定义字段的默认值时在字段后面标明 DEFAULT < 默认 值 > 即可 例如, 某个表要求设置字段 s_score 的默认值为 50.00, 定义格式如下 : s_score NUMBER (5,2) DEFAULT 此时所给出的默认值应与此字段的数据类型一致 下面定义学生选课系统中的 学生 表 (student) 课程 表 (course) 和 课程选修 表 (sc) 例 3.1 在数据库中定义学生选课系统中的 学生 表 ( student), 写出其 SQL 命令, 基本 要求如表 3.7 所示 表 3.7 学生选课系统中 学生 表基本要求 属性名属性代码数据类型长度小数位数约束类型 学号 s_no CHAR 6 主键约束 姓名 s_name CHAR 8 非空约束 性别 s_sex CHAR 2 取值仅限于 男 女 出生日期 s_birthday DATE 入学成绩 s_score NUMBER 5 2 默认值为 附加分 s_addf NUMBER 3 1 班级编号 class_no CHAR 4 CREATE TABLE student ( s_no CHAR(6) PRIMARY KEY, s_name CHAR(8) NOT NULL, s_sex CHAR(2) CHECK(s_sex IN( 男, 女 )),

8 3.2 数据定义 51 s_birthday DATE, s_score NUMBER(5, 2) DEFAULT , s_addf NUMBER(3,1), class_no CHAR(4) ); 本例中所使用的约束都是字段级约束, 这是因为主键约束只作用于 学号 一个字段上, 检查约束只作用于 性别 一个字段上, 默认值只是 入学成绩 单个字段的默认值 也可以将字段级约束定义成表级约束, 相应的命令如下 : CREATE TABLE student ( s_no CHAR(6), s_name CHAR(8) NOT NULL, s_sex CHAR(2), s_birthday DATE, s_score NUMBER(5,2) DEFAULT , s_addf NUMBER(3,1), class_no CHAR(4), PRIMARY KEY( s_no), CONSTRAINT ck_1 CHECK(s_sex IN( 男, 女 )) ); 此命令执行后, 在数据库中创建一个名为 student 的数据表, 其字段信息 约束信息存储于 Oracle 系统表中 例 3.2 在数据库中定义学生选课系统中的 课程 表 (course), 写出其 SQL 命令, 基本要求如表 3.8 所示 表 3.8 学生选课系统中 课程 表基本要求属性名属性代码数据类型长度小数位数约束类型课程编号 c_no CHAR 4 主键约束课程名称 c_name CHAR 20 非空约束学分 c_fen NUMBER 3 1 CREATE TABLE course ( c_no CHAR(4), c_name CHAR(20) NOT NULL, c_fen NUMBER(3,1), PRIMARY KEY(c_no)) ; 同理, 也可以将表级主键约束定义成字段级约束, 相应的命令如下 : CREATE TABLE course ( c_no CHAR(4) PRIMARY KEY, c_name CHAR(20) NOT NULL, c_fen NUMBER(3,1) ); 同样, 此命令执行后, 在数据库中创建一个名为 course 的数据表, 其字段信息 约束信息存储

9 52 第 3 章 SQL 基础 于 Oracle 系统表中 例 3.3 在数据库中定义学生选课系统中的 课程选修 表 ( sc), 写出其 SQL 命令, 基本要求如表 3.9 所示 表 3.9 学生选课系统中 课程选修 表基本要求属性名属性代码数据类型长度小数位数约束类型 课程编号 c_no CHAR 4 学号 s_no CHAR 6 与 学号 字段联合作主键, 与 课程 表的 课程编号 外键关联与 课程编号 字段联合作主键, 与 学生 表的 学号 外键关联, 且级联删除 成绩 score NUMBER 3 1 CREATE TABLE sc ( s_no CHAR(6) REFERENCES student( s_no) ON DELETE CASCADE, c_no CHAR(4) REFERENCES course( c_no), score NUMBER(3,1), PRIMARY KEY( s_no,c_no)) ; 由于主键约束作用于 学号 课程编号 两个字段上, 因此, 主键约束只能定义成表级约束而不能定义成字段级约束 由于两个外键约束作用于单个字段上, 因此外键约束也可以定义成表级约束, 相应的命令如下 : CREATE TABLE sc ( s_no CHAR(6), c_no CHAR(4), score NUMBER(3,1), PRIMARY KEY( s_no,c_no), CONSTRAINT fk_1 FOREIGN KEY( s_no) REFERENCES student( s_no) ON DELETE CASCADE, CONSTRAINT fk_2 FOREIGN KEY( c_no) REFERENCES course( c_no)); 同样, 此命令执行后, 在数据库中创建一个名为 sc 的数据表, 其字段信息 约束信息存储于 Oracle 系统表中 注意 : 在定义表时通常先定义无外键关联的独立的表, 如果某个表存在外键关系, 则必须先定义主表, 再定义从表 在学生选课系统中, 必须先定义 student 表和 course 表, 再定义 sc 表, 因为 sc 表外键关联 student 表和 course 表 上面的例子中定义了学生选课系统中的 学生 表 课程 表和 课程选修 表, 涉及 Oracle 系统表的主键约束 外键约束 检查约束 唯一性约束 非空约束和表的字段级约束 表级约束的定义方法 学生选课系统中的其他表的定义方法与此类似, 请读者自行练习 2. 查看表在学生选课系统的开发过程中, 特别是在开发和调试程序时, 经常需要查看数据表的结构信

10 3.2 数据定义 53 息 在 Oracle 数据库中, 一旦表的定义成功执行, 表的相关信息就被存储在 Oracle 数据库的多 个系统表中, 具体的系统表如表 3.10 所示 表 3.10 表信息所存储的系统表 系统表名 DBA_TABLES DBA_TAB_COLUMNS DBA_CONSTRAINTS DBA_CONS_COLUMNS 存储参数存储表的表空间 存储参数 块空间管理参数 事务处理参数等信息存储表的字段信息存储表的约束信息存储字段的约束信息 使用 DESC 命令可以查看系统表的结构 例 3.4 用 DESC 命令查看系统表 DBA_TAB_COLUMNS 的结构 DESC DBA_TAB_COLUMNS; 此命令的 名称 是否为空 数据类型 OWNER NOT NULL VARCHAR2(30) TABLE_NAME NOT NULL VARCHAR2(30) COLUMN_NAME NOT NULL VARCHAR2(30) DATA_TYPE DATA_TYPE_MOD DATA_TYPE_OWNER VARCHAR2(106) VARCHAR2(3) VARCHAR2(30) DATA_LENGTH NOT NULL NUMBER DATA_PRECISION DATA_SCALE NUMBER NUMBER 由于字段太多, 在此不逐一罗列 从本例可以看出,DBA_TAB_COLUMNS 系统表中存储着表名 ( TABLE_NAME) 字段名( COLUMN_NAME) 数据类型(DATA_TYPE) 等信息 可以用 SELECT 命令从表 3.10 所示的各个系统表中查询所需要的信息,SELECT 命令的具体使用方法将在 3.4 节介绍 例 3.5 查看学生选课系统中 学生 表 ( student) 的字段名 数据类型 字段长度等信息, 写出相应的 SQL 命令 要实现题目要求的功能, 可以利用 DBA_TAB_COLUMNS 系统表查看 student 表 其 SQL 命令如下 : SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH FROM DBA_TAB_COLUMNS WHERE TABLE_NAME = STUDENT ; 此命令的

11 54 第 3 章 SQL 基础 COLUMN_NAME DATA_TYPE DATA_LENGTH S_NO CHAR 6 S_NAME CHAR 8 S_SEX CHAR 2 S_BIRTHDAY DATE 7 S_SCORE NUMBER 22 S_ADDF NUMBER 22 CLASS_NO CHAR 4 注意 : 在 Oracle 数据库中查看系统表时, 所有方案下的 student 表都显示出来, 此时可以在 WHERE 条件中增加 AND OWNER = 用户名 来限定只显示某用户下的 student 表结构 也可以用 DESC 命令直接调用表名以查看表的字段信息, 此命令的一般格式如下 : DESC < 表名 >; 例如, 用 DESC 命令查看 student 表的字段信息, 相应的命令如下 : DESC student; 执行结果为 名称 是否为空 数据类型 S_NO NOT NULL CHAR(6) S_NAME NOT NULL CHAR(8) S_SEX S_BIRTHDAY S_SCORE S_ADDF CLASS_NO CHAR(2) DATE NUMBER(5,2) NUMBER(3,1) CHAR(4) 此执行结果与利用 SELECT 的结果大体相同, 只不过 DBA_TAB_COLUMNS 系统表中的信息比利用 DESC < 表名 > 命令所得到的信息更多 3. 修改表当发现表名 字段名 字段数据类型 长度或约束条件的定义错误时, 需要修改表中的相关内容 修改表的相关操作包括修改表名和表结构两部分 (1) 修改表名在学生选课系统中的表的定义过程中, 如果表名的定义不合适, 可以修改表名 修改表名的命令的一般格式为

12 3.2 数据定义 55 RENAME < 旧表名 > TO < 新表名 >; 其中 RENAME 是表名重命名关键字 例 3.6 将表 student 重命名为 student_sql, 写出其 SQL 命令 RENAME student TO student_sql; 此命令执行后,Oracle 数据库中将不再有 student 表, 而只有 student_sql 表了 (2) 修改表结构在学生选课系统中的表的定义过程中, 如果字段数据类型及约束条件的定义不妥, 则需要修改表结构 修改表结构的命令的一般格式为 ALTER TABLE < 表名 > [ ADD ( < 字段名 > < 数据类型 ( 长度 ) >[ < 字段级约束 >] [, < 字段名 > < 数据类型 ( 长度 ) > [ < 字段级约束 >] ] )] [ DROP [COLUMN < 字段名 >] ( < 字段名 >[, < 字段名 > ]) ] [ MODIFY ( < 字段名 >< 字段数据类型 > [DEFAULT < 值 > NOT NULL NULL] [, < 字段名 >< 字段数据类型 > [DEFAULT < 值 > NOT NULL NULL]]) ]; 其中,ALTER 是修改操作的关键字,ADD 子句向表中添加字段,DROP 子句从表中删除字段, MODIFY 子句修改表中已有字段 下面以学生选课系统中的 学生 表 (student) 为例介绍表中的字段及约束条件的修改方法 例 3.7 向表 student 添加 age INT salary NUMBER(5,2) salary_add NUMBER(3,1) 这 3 个字段, 写出其 SQL 命令 题目要求向表 student 添加字段, 可以使用 ALTER TABLE 命令中的 ADD 子句加以实现 ALTER TABLE student ADD ( age INT,salary NUMBER(5,2),salary_add NUMBER(3,1)) ; 此命令执行后, 使用 DESC 命令查看 student 表的结构, 名称是否为空数据类型 S_NO NOT NULL CHAR(6) S_NAME NOT NULL CHAR(8) S_SEX S_BIRTHDAY S_SCORE S_ADDF CLASS_NO AGE SALARY SALARY_ADD CHAR(2) DATE NUMBER(5,2) NUMBER(3,1) CHAR(4) INT NUMBER(5,2) NUMBER(3,1) 从执行结果可以看出, 表 student 增加了 age salary salary_add 这 3 个字段

13 56 第 3 章 SQL 基础 实现 例 3.8 从表 student 中删除字段 age, 写出其 SQL 命令 题目要求从表 student 中删除一个字段, 可以使用 ALTER TABLE 命令中的 DROP 子句加以 ALTER TABLE student DROP COLUMN age; 此命令执行后, 使用 DESC 命令查看 student 表的结构, 名称是否为空数据类型 S_NO NOT NULL CHAR(6) S_NAME NOT NULL CHAR(8) S_SEX S_BIRTHDAY S_SCORE S_ADDF CLASS_NO SALARY SALARY_ADD CHAR(2) DATE NUMBER(5,2) NUMBER(3,1) CHAR(4) NUMBER(5,2) NUMBER(3,1) 从执行结果中可以看出,student 表中删除了一个字段 age 例 3.9 从表 student 中删除两个字段 salary salary_add, 写出其 SQL 命令 ALTER TABLE student DROP( salary,salary_add); 此命令执行后, 使用 DESC 命令查看 student 表的结构, 名称 是否为空 数据类型 S_NO NOT NULL CHAR(6) S_NAME NOT NULL CHAR(8) S_SEX S_BIRTHDAY S_SCORE S_ADDF CLASS_NO CHAR(2) DATE NUMBER(5,2) NUMBER(3,1) CHAR(4) 从执行结果可以看出, 表 student 中删除了 salary salary_add 两个字段 注意 : 删除一个字段和删除多个字段的命令格式是不同的 在一般情况下, 非空属性字段是不能删除的 ; 如果某字段的所有记录值均为空, 则可删除此字段 例 3.10 将 student 表的 s_name 字段的长度改为 10, 且为 s_addf 字段增加默认值为 50.0 的约束条件, 写出其 SQL 命令

14 3.2 数据定义 57 题目要求修改表 student 中的字段长度, 可以使用 ALTER TABLE 命令中的 MODIFY 子句加 以实现 ALTER TABLE student MODIFY(s_name CHAR(10), s_addf DEFAULT 50.0) ; 此命令执行后, 使用 DESC 命令查看 student 表的结构, 名称 是否为空 数据类型 S_NO NOT NULL CHAR(6) S_NAME NOT NULL CHAR(10) S_SEX S_BIRTHDAY S_SCORE S_ADDF CLASS_NO CHAR(2) DATE NUMBER(5,2) NUMBER(3,1) CHAR(4) 从执行结果可以看出, 修改后的 student 表中的 s_name 字段长度为 10, 如果查看 DBA_CONS _COLUMNS 系统表, 可以看到为 s_addf 字段增加了默认值为 50.0 的约束条件 注意 : 要改变表中字段的数据类型或缩短字段长度, 此字段的所有记录值必须为空 如果此字段存在某些记录值, 则字段长度只能加长, 不能缩短 4. 删除表一旦在数据库中成功定义表之后, 表会一直存储在数据库中 但对于某些表, 有时会不再需要, 此时应删除此表, 以释放其所占用的存储空间 删除表的命令的一般格式如下 : DROP TABLE < 表名 >; 其中 DROP 为删除操作的关键字 假设学生选课系统中不再需要 课程选修 表 (sc), 此时就应该将其删除 例 3.11 删除表 sc, 写出其 SQL 命令 DROP TABLE sc; 此命令执行后, 数据库中将不再有 sc 表了 注意 : 表成功定义后, 删除存在外键关联的表的顺序与定义表的顺序正好相反, 应先删除从表, 再删除主表, 否则会出现 表中的唯一 / 主键被外部关键字引用 错误, 所以在学生选课系统中应先删除 sc 表, 再删除 student course 表 索引的定义 查看与删除在学生选课系统中, 当 student course sc 表中的数据量达到一定的值之后 ( 比如, 达到几万

15 58 第 3 章 SQL 基础 条记录 ), 数据查询的速度会大大降低, 直接影响应用系统的性能 为了解决查询速度问题, 需 要在针对数据表的查询字段上定义索引 索引提供了一种直接 快速访问记录的方式, 可以大大 提高数据查询速度 一个表可以拥有任意多个索引, 可以索引一列, 也可以索引多列, 在一个索引中最多可包含 16 列 索引必须先定义, 然后由数据库管理系统在执行数据查询时自动调用 1. 定义索引 定义索引的命令的一般格式如下 : CREATE [UNIQUE] INDEX < 索引名 > ON < 表名 >( < 字段 >< 次序 >[, < 字段 >< 次序 >] ) ; 其中 CREATE 是用于定义的关键字,INDEX 是索引关键字,UNIQUE 表示索引类型是唯一的, 即索 引列的值不重复, 次序 指索引值的排列顺序,ASC 表示升序,DESC 表示降序, 其默认值为升序 在学生选课系统中, 经常需要按照学生姓名来查询学生信息, 为了提高查询速度, 应该在 student 表的 姓名 ( s_name) 字段上定义索引 例 3.12 在 学生 表的 姓名 (s_name) 字段上定义升序索引, 写出其 SQL 命令 CREATE INDEX student_sname_index ON student( s_name); 此命令执行后, 在数据库中创建了一个按照学生姓名升序排列 名为 student_sname_index 的 索引, 此索引信息存储在 Oracle 系统表中 在学生选课系统中, 经常需要按照课程名称来查询课程信息, 为了提高查询速度, 也应该在 course 表的 课程名称 ( c_name) 字段上定义索引 命令 例 3.13 在 课程 表的 课程名称 ( c_name) 字段上定义唯一性降序索引, 写出其 SQL CREATE UNIQUE INDEX course_cname_index ON course( c_name DESC); 本例利用关键字 UNIQUE 定义唯一性索引, 利用 DESC 定义降序索引 同样, 此命令执行 后, 在数据库中创建一个名为 course_cname_index 的索引, 此索引具有降序唯一性的特点, 其信 息存储在 Oracle 系统表中 注意 : Oracle 自动为表的主键定义升序索引 如果删除表的主键约束, 则定义在此主键上 的索引会自动被删除 2. 查看索引 索引成功定义之后, 索引信息存储于系统表 DBA_INDEXES 中 例 3.14 用 DESC 命令查看系统表 DBA_INDEXES 的结构 DESC DBA_INDEXES; 名称是否为空数据类型 OWNER NOT NULL VARCHAR2(30)

16 3.2 数据定义 59 INDEX_NAME NOT NULL VARCHAR2(30) INDEX_TYPE VARCHAR2(27) TABLE_OWNER NOT NULL VARCHAR2(30) TABLE_NAME NOT NULL VARCHAR2(30) TABLE_TYPE VARCHAR2(11) 由于字段太多, 在此不逐一罗列 从本例可以看出,DBA_INDEXES 系统表中存储着索引的名称 ( INDEX_NAME) 索引的类型( INDEX_TYPE) 索引所依附的表( TABLE_NAME) 等信息 可以用 SELECT 命令查看 DBA_INDEXES 中所存储的索引信息 例 3.15 查看学生选课系统中 课程 ( course) 表的索引信息, 写出其 SQL 命令 SELECT INDEX_NAME, INDEX_TYPE, TABLE_NAME FROM DBA_INDEXES WHERE TABLE_NAME = COURSE ; INDEX_NAME INDEX_TYPE TABLE_NAME SYS_C NORMAL COURSE COURSE_CNAME_INDEX NORMAL COURSE 由执行结果可以看出,course 表中存在两个索引, 一个是例 3.13 中所定义的索引, 二是定义 course 表时 Oracle 系统自动为主键所创建的索引 3. 删除索引当应用系统中的查询条件发生变化时, 查询不再涉及某字段, 因此在此字段上所定义的索引也就不再需要了, 此时应该删除索引, 以释放其所占用的存储空间 删除索引的命令的一般格式如下 : DROP INDEX < 索引名 >; 假设在学生选课系统中, 查询条件不再涉及学生的姓名, 此时, 可以删除基于 姓名 字段所建立的索引 例 3.16 删除 student_sname_index 索引, 写出其 SQL 命令 DROP INDEX student_sname_index; 此命令执行后, 数据库中就不再存在 student_sname_index 索引了 注意 : 主键索引是不能被删除的 如果删除表的主键约束, 主键索引会自动被删除

17 60 第 3 章 SQL 基础 3.3 数据更新 学生选课系统中的数据表定义完成后, 就需要向表中插入数据 如果数据输入有误, 则需要修改数据 如果不再需要某些数据, 则需要删除数据 数据的插入 修改 删除统称为数据更新 插入数据一般地,SQL 提供 3 种插入数据方法 (1) 单行 :INSERT 命令向表中插入一条新记录 这种方法在日常应用中最为常用 (2) 多行 :INSERT 命令从数据库的其他对象中选取多行数据并将其添加至表中 (3) 表间数据复制 : 从一个数据表中选择所需要的数据并将其插入新表中 这种方法经常用于初始装载数据库或者插入由其他计算机系统下载而来的或从某些结点收集来的数据 1. 单行插入命令 INSERT 命令可以向数据库表中插入一行数据 单行 INSERT 命令的格式如下 : INSERT INTO < 表名 >[( < 字段列表 >)] VALUES( < 数值列表 >); 其中,INSERT 是用于插入的关键字,INTO 子句指定接收新数据的表和字段,VALUES 子句指定其数值 字段列表 和 数值列表 指定哪些数据进入哪些字段, 且数值列表应与字段列表一一对应, 列表各项之间用符号, 分隔 如果是向表中的所有字段插入数据, 那么字段列表可以省略 如果是向表中的部分字段插入数据, 那么字段列表就不可省略 如果某字段的值未知, 可以使用关键字 NULL 将其设置为空值 但是, 如果在表定义中将此字段设置为 NOT NULL, 则不能使用空值插入 对于数值型字段, 可以直接输入值 ; 字符型字段值要添加西文单引号 ; 日期型字段值要添加西文单引号, 其输入顺序为 日 - 月 - 年, 如 月 表示 2003 年 12 月 20 日 例 3.17 向 student 表中插入一条新记录, 学号为 , 姓名为孙明, 性别为男, 出生日期为 1980 年 6 月 7 日, 入学成绩为 560 分, 附加分为 40 分, 班级编号为 0102, 写出其 SQL 命令 题目要求向 student 表中插入一条记录, 使用 INSERT 命令如下 : INSERT INTO student( s _ no, s _ name, s _ sex, s _ birthday, s _ score, s _ addf, class_no) VALUES( , 孙明, 男, 7-6 月 -1980,560,40, 0102 ) ; 此命令执行后, 将向 student 表中插入一条记录, 且为所有的字段赋值 由于本例需向 student 表中的所有字段插入值, 所以执行此操作的命令也可写成 : INSERT INTO student VALUES( , 孙明, 男, 7-6 月 -1980,560,40, 0102 ); 例 3.18 向 student 表中插入一条新记录, 学号为 , 姓名为张仪, 性别为男, 班级编号为 0102, 其他字段信息不确定, 写出其 SQL 命令 题目要求向 student 表的部分字段插入数据, 所以表名后面的字段列表不能省略, 命令如下 :

18 3.3 数据更新 61 INSERT INTO student( s_no,s_name,s_sex,class_no) VALUES( , 张仪, 男, 0102 ); 此命令执行后, 将向 student 表中插入一条记录, 且只为 学号 姓名 性别 和 班级编号 字段赋值 注意 : 在向表中插入数据时, 所插入的数据应满足定义表时的约束条件 如果再次向 student 表中插入学号为 的学生记录的话, 系统就会给出错误提示信息, 违反了主键约束 另外, 存在外键关联的主从表之间的数据插入顺序是, 先插入主表数据, 再插入从表数据 例如, 在学生选课系统中, 先在 student 表中插入某学号学生的记录, 然后才能在 sc 表中插入这名学生的课程选修记录 2. 多行插入命令如果某表中已有数据, 需要将这些数据插入另外一个表中, 此时可以使用多行插入命令 多行插入命令的格式如下 : INSERT INTO < 表名 >[( < 字段列表 >)] SELECT 子句 ; 此命令将多行数据插入目标表中 在这种形式的 INSERT 命令中, 未明确地在命令中指定新行的数据, 新行的数据源是 SELECT 子句的查询结果 这是从一个表向另一个表复制多行记录的典型方法 例 3.19 将 student_bak 表中的数据插入 student 表中 student_bak 表的定义与 student 表的定义一样, 此表中装入部分学生的记录, 而且这些学生的信息在 student 表中尚未插入, 写出其 SQL 命令 题目要求将 student_bak 表中的数据插入 student 表中 student_bak 表中可能有多条记录, 采用多行插入命令如下 : INSERT INTO student SELECT 倡 FROM student_bak; 此命令执行后,student_bak 表中的数据就插入 student 表中 如果两个表的记录数据中有重复的学号, 则在数据插入过程中会出现错误, 因为主键的值必须是唯一的 关于 SELECT 命令将在 3.4 节详细介绍 3. 表间数据复制被插入数据库的数据通常是从其他计算机系统中下载, 或是从其他站点搜集, 或是存储于数据文件中的数据 为了将数据装载到表中, 可以设计程序采用循环方式读出数据文件中的每条记录, 然后用单行 INSERT 命令将其插入表中, 但是这样做会很费时 为此, 要想快速地从一个表向一个新表复制数据, 可以使用 CREATE TABLE 命令来定义此表, 并将 SELECT 命令的执行结果复制到新表中 其格式如下 : CREATE TABLE < 表名 >AS SELECT 子句 ; 例 3.20 定义一个新表 student_new, 同时将 student 表中的 学号 姓名 性别 这 3 个字段的值复制到 student_new 表中, 写出其 SQL 命令 题目要求在定义新表的基础上将已有表中的数据插入新表中, 其间会用到表间数据复制命

19 62 第 3 章 SQL 基础 令如下 : CREATE TABLE student_new AS SELECT s_no,s_name,s_sex FROM student; 此命令执行后, 将定义新表 student_new, 同时将 student 表中所指定字段的所有记录复制到 新表 student_new 中 可以用 DESC 命令查看 student_new 表的结构, 用 SELECT 命令查看其数 据 关于 SELECT 命令将在 3.4 节详细介绍 修改数据 如果表中的数据出现错误, 可以利用 UPDATE 命令进行修改 一般地,SQL 提供两种修改 数据的方法 (1) 直接赋值修改 :UPDATE 命令直接将表中的数据修改为确定值 这种方法在日常应用 中最为常用 (2) 嵌套修改 :UPDATE 命令将表中数据修改为从数据库的其他对象中所选取的数据 1. 直接赋值修改 UPDATE 命令可以修改单个表所选行的一个或多个字段的值 UPDATE 命令的格式如下 : UPDATE < 表名 >SET < 字段名 >=< 表达式 > [, < 字段名 >=< 表达式 > ] [ WHERE < 条件 >] ; 其中,UPDATE 是用于修改的关键字, 表名是被修改的目标表,WHERE 子句指定被修改表中的 记录,SET 子句指定所修改的字段并对其赋予新值, 赋值表达式之间用符号, 分隔 例 3.21 将 student 表中王蕾同学的学号改为 , 将班级编号改为 0102, 写出其 SQL 命令 命令 题目要求修改指定学生的数据, 使用 UPDATE 命令如下 : UPDATE student SET s_no =010204, class_no =0102 WHERE s_name = 王蕾 ; 此命令执行后, 王蕾同学的学号改为 , 其班级编号改为 嵌套修改 与 INSERT 命令一样,UPDATE 命令也可以使用 SELECT 子句的查询结果进行修改 例 3.22 将 student 表中王蕾同学的班级编号改为马力同学的班级编号, 写出其 SQL 题目要求将 student 表中王蕾同学的班级编号改为马力同学的班级编号, 应首先查询马力同 学的班级编号, 再将王蕾同学的班级编号修改为此值 需要用到嵌套查询, 命令如下 : UPDATE student SET class_no = (SELECT class_no FROM student WHERE s_name = 马力 ) WHERE s_name = 王蕾 ;

20 3.3 数据更新 63 此命令执行后, 王蕾同学的班级编号修改为马力同学的班级编号 0202 关于 SELECT 命令将在 3.4 节详细介绍 注意 : 在修改表中的数据时, 修改后的数据应满足定义表时设定的约束条件, 否则系统就会给出错误提示信息 例如, 如果将某学生的姓名修改为空值, 就违反了表定义时对于 姓名 字段的非空约束 删除数据如果不再需要学生选课系统中的某些数据, 此时应删除此数据, 以释放其所占用的存储空间 一般地,SQL 提供两种删除数据的方法 (1) 删除所选行数据 :DELETE 命令可以从数据表中删除所选行的数据 这种方法在日常应用中最为常用 (2) 整表数据删除 :TRUNCATE 命令可以删除整个数据表中的数据 整表数据删除操作只删除数据, 表定义仍然存在 1. 删除所选行数据 DELETE 命令可以从数据表中删除所选行的数据 DELETE 命令的格式如下 : DELETE FROM < 表名 >[WHERE < 条件 >]; 其中,DELETE 是用于删除的关键字,FROM 子句指定目标表,WHERE 子句指定被删除的行 如果未指定条件, 则将删除表中的所有数据 例 3.23 将 student 表中姓名为王蕾的学生的记录删除, 写出其 SQL 命令 DELETE FROM student WHERE s_name = 王蕾 ; 此命令执行后, 王蕾同学的记录将从 student 表中删除 注意 : 在删除表中的数据时, 应满足定义表时设定的约束条件, 否则系统会给出错误提示信息 例如, 如果 sc 表中仍存在某门课程的选修信息, 此时如果想在 课程 表中删除这一门课程就会出现错误, 因为外键关联的表的数据删除顺序是先删除从表中的数据, 再删除主表中的数据 2. 整表数据删除使用 DELETE 命令删除一个大型表中的所有记录需要很长的时间, 因为需要把这些数据存储在系统回滚段中, 以备数据恢复时使用 Oracle 数据库提供快速地删除一个表中全部记录的命令 TRUNCATE 这个命令所做的修改不能回滚, 对于已经删除的表数据不能恢复, 即所做的删除是永久删除 其格式为 TRUNCATE TABLE < 表名 >; 其中,TRUNCATE 是用于永久删除数据的关键字 假设要删除例 3.20 中所定义的表 student_new 中的所有数据, 而且不再恢复, 需要利用整表数据删除的方法 例 3.24 永久删除 student_new 表中的全部记录, 写出其 SQL 命令 TRUNCATE TABLE student_new;

21 64 第 3 章 SQL 基础 此命令执行后,student_new 表中的记录为空, 但 student_new 表仍然存在 注意 : 在对数据库表中的数据执行操作后使用 COMMIT 命令, 此命令将对数据库所做的修 改都变成永久性的 如果想撤销对数据库所做的修改, 则使用 ROLLBACK 命令 3.4 数据查询 当学生选课系统中的数据表在数据库中已建立并向其输入数据之后, 接下来就要考虑如何查询数据表中的数据了 查询数据的方法主要涉及 SQL 中的 SELECT 命令 SELECT 命令可以从数据库中查询数据, 并将查询结果进行排序 分组 统计等 SELECT 命令的一般格式如下 : SELECT [ALL DISTINCT] < 显示列表项 > 倡 FROM < 数据来源项 > [ WHERE < 条件表达式 >] [ GROUP BY < 分组选项 >[HAVING < 组条件表达式 >]] [ ORDER BY < 排序选项 >[ASC DESC] ]; 其中 : (1) SELECT 是用于查询的关键字 (2) ALL DISTINCT 表示 ALL 和 DISTINCT 可以任选其一 ALL 表示筛选出数据库表中满足条件的所有记录, 一般情况下省略不写 DISTINCT 表示输出结果中无重复记录 (3) 显示列表项 指定查询结果中所显示的项, 既可以是数据库表中的字段 字段表达式, 也可以是 SQL 常量, 各项之间用逗号分隔 字段表达式可以是 SQL 函数表达式, 也可以是 SQL 操作符所连接的表达式 如果 显示列表项 包含表中的所有字段, 可以用符号 倡 代替 (4) 数据来源项 指定显示列表中显示项的来源, 可以是数据库中的一个或多个表 视图, 各项之间用逗号分隔 (5) WHERE < 条件表达式 > 指定查询条件 查询条件中会涉及 SQL 函数和 SQL 操作符 (6) GROUP BY < 分组选项 > 表示在查询时, 可以按照某个或某些字段分组汇总, 各分组选项之间用逗号分隔 HAVING < 组条件表达式 > 表示在分组汇总时, 可以根据组条件表达式筛选出满足条件的组记录 (7) ORDER BY < 排序选项 > 表示在显示结果时, 可以按照指定字段进行排序, 各选项之间用逗号分隔 ASC 表示升序,DESC 表示降序, 系统默认为升序 SELECT 命令的含义是, 根据 WHERE 子句的条件表达式, 从 FROM 子句所指定的表或视图中查找满足条件的记录, 再将显示列表项中的显示项的值列举出来 在这种固定模式中, 可以不要 WHERE 子句, 但是必须有关键字 SELECT 和 FROM 注意 : 将 SELECT 命令与第 2 章关系代数中所介绍的选择 投影 连接操作做对比学习, 可以加快对 SELECT 命令的理解与掌握

22 3.4 数据查询 单表查询单表查询是指所有的显示列表项来源于同一个表, 此时,SELECT 命令中的 FROM 子句只涉及一个表 在学生选课系统中, 学生 表 ( student) 中的字段数据类型较丰富, 下面以 学生 表为例介绍单表查询方法 例 3.25 查询 student 表中所有学生的全部信息, 写出其 SQL 命令 题目要求查询所有学生的全部信息, 这一查询所涉及的表很容易找到, 就是 student 表 查询所有学生的全部信息, 意味着不带任何查询条件, 命令如下 : SELECT s_ no, s _ name, s _ sex, s _ birthday, s _ score, s _ addf, class _ no FROM student; S_NO S_NAME S_ S_BIRTHDAY S_SCORE S_ADDF CLAS 赵明 男 月 赵以 男 24-8 月 马水 男 06-3 月 杨仪 女 24-4 月 王蕾 女 月 牛可 男 06-6 月 马力 女 07-7 月 查询所有学生的全部信息, 意味着显示列表项中包含 student 表的所有字段, 可以逐一写出 字段名, 也可以用 倡 代替, 命令可以写成 : SELECT 倡 FROM student; 注意 : 命令执行结果中的表头就是显示项字段名的字符, 表头的显示长度是根据字段数据 长度来确定的 例如, 性别 的表头本来应该为 S_SEX, 但是由于 性别 字段的长度为 2 位, 所 以 性别 的表头仅显示 S_ ; 班级编号 的表头本来应该为 CLASS_NO, 但是由于 班级编号 字段的长度只有 4 位, 所以 班级编号 的表头仅显示 CLAS 另外, 如果使用 SELECT 命令未查找到满足条件的数据, 结果将显示信息 未选定行 例 3.26 查询 student 表中所有学生的姓名 出生日期 入学成绩信息, 写出其 SQL 命令, 注意将其与例 2.7 进行比较 题目要求查询 student 表中所有学生的姓名 出生日期 入学成绩信息, 姓名 出生日 期 入学成绩 字段均来源于 student 表, 查询数据库表的部分字段信息时, 显示列表项 中必 须逐一写出字段名, 命令如下 : SELECT s_name,s_birthday,s_score FROM student;

23 66 第 3 章 SQL 基础 S_NAME S_BIRTHDAY S_SCORE 赵明 月 赵以 24-8 月 马水 06-3 月 杨仪 24-4 月 王蕾 月 牛可 06-6 月 马力 07-7 月 例 3.27 查询 student 表中学生所属班级的信息, 写出其 SQL 命令 题目的要求很简单, 班级信息来源于 student 表, 命令如下 : SELECT class_no FROM student; 执行结果如左下表所示 CLAS CLAS 从执行结果可以看出, 输出结果中存在重复的字段值, 这是因为一个班级中可以有多名学生, 一个班级中含有多少名学生, 班级编号在查询结果中就出现几次 如果要使得结果中无重复记录, 可将命令修改为 SELECT DISTINCT class_no FROM student; 执行结果如右上表所示 对比上述两个命令的执行结果, DISTINCT 确保查询结果中无重复记录 例 3.28 查询 student 表中入学成绩大于 520 分的学生的信息, 写出其 SQL 命令, 注意将其与例 2.5 进行比较 题目要求查询入学成绩大于 520 分的学生的信息, 需要设定一个查询条件 执行带条件的查询时须用 WHERE 子句, 命令如下 : SELECT 倡 FROM student WHERE s_score >520;

24 3.4 数据查询 67 S_NO S_NAME S_ S_BIRTHDAY S_SCORE S_ADDF CLAS 赵明 男 月 杨仪 女 24-4 月 王蕾 女 月 牛可 男 06-6 月 例 3.29 查询 student 表中入学成绩大于 520 分的女生的姓名 性别 出生日期和入学成 绩, 写出其 SQL 命令 题目要求查询入学成绩大于 520 分的女生的相关字段信息, 需要设定两个查询条件 执行 组合条件查询须用 WHERE 子句, 且由于查询条件是 既为女生且入学成绩大于 520 分, 所以 WHERE 子句中有逻辑运算操作符 AND, 命令如下 : SELECT s_name,s_sex,s_birthday,s_score FROM student WHERE s_score > 520 AND s_sex = 女 ; S_NAME S_ S_BIRTHDAY S_SCORE 杨仪 女 24-4 月 王蕾 女 月 例 3.30 查询 student 表中学号前 4 位为 0201 的女生的全部信息, 写出其 SQL 命令 题目要求查询 student 表中学号前 4 位为 0201 的女生的全部信息, 这就需要得到学号的前 4 位信息, 要用到 SQL 函数 利用函数 SUBSTR(s_no,1,4) 可以得到学号的前 4 位, 命令如下 : SELECT 倡 FROM student WHERE SUBSTR(s_no,1,4) = 0201 AND s_sex = 女 ; S_NO S_NAME S_ S_BIRTHDAY S_SCORE S_ADDF CLAS 杨仪女 24-4 月 王蕾女 月 注意 : 关于 SQL 函数的内容请参见附录 D 例 3.31 查询 student 表中所有学生的学号 姓名 出生日期信息, 且将出生日期以 yyyy / mm /dd 格式输出, 写出其 SQL 命令 题目要求改变出生日期的输出格式, 这就要用到 SQL 函数 利用函数 TO_CHAR( s_birth- day, yyyy /mm /dd ) 可以控制出生日期的输出格式, 命令如下 : SELECT s_no,s_name,to_char( s_birthday, yyyy /mm /dd ) FROM student;

25 68 第 3 章 SQL 基础 S_NO S_NAME TO_CHAR(S_ 赵明 1980 /11 / 赵以 1978 /08 / 马水 1979 /03 / 杨仪 1980 /04 / 王蕾 1980 /11 / 牛可 1981 /06 / 马力 1981 /07 /07 从上面两例可以看出,SQL 函数既可以用在显示列表项中, 也可以用在查询条件中 例 3.32 查询 student 表中所有学生的学号 姓名 入学总分信息, 其中入学总分为入学 成绩和附加分之和, 写出其 SQL 命令 题目要求查询学生的学号 姓名 入学总分, 利用 s_score +s_addf 可以得到学生的入学总分, 命令如下 : SELECT s_no,s_name,s_score +s_addf FROM student; S_NO S_NAME S_SCORE +S_ADDF 赵明 赵以 马水 杨仪 王蕾 牛可 马力 530 注意 : 关于 SQL 操作符的内容请参见附录 D 例 3.33 查询 student 表中入学总分大于 550 分的学生的学号 姓名 入学总分信息, 写 出其 SQL 命令 SELECT s_no,s_name,s_score +s_addf FROM student WHERE ( s_score +s_addf) >550; S_NO S_NAME S_SCORE +S_ADDF 赵明 杨仪 王蕾 牛可 630 从上面两例可以看出,SQL 操作符既可以用在显示列表项中, 也可以用在查询条件中 例 3.34 查询 student 表中入学总分在 520 ~550 分之间的学生的学号 姓名 入学总分

26 3.4 数据查询 69 信息, 写出其 SQL 命令 题目要求查询入学总分在 520 ~550 分之间的学生信息, 可以利用谓词 BETWEEN AND 定 义一个集合作为查询条件, 命令如下 : SELECT s_no,s_name,s_score +s_addf FROM student WHERE ( s_score +s_addf) BETWEEN 520 AND 550; S_NO S_NAME S_SCORE +S_ADDF 赵以 马水 马力 530 注意 : 关于谓词的内容请参见附录 D 例 3.35 查询 student 表中所有赵姓学生的学号 姓名 入学总分信息, 写出其 SQL 命令 题目要求查询赵姓学生的学号 姓名 入学总分信息, 可以利用谓词 LIKE 定义一个集合作 为查询条件 s_name LIKE 赵 % 表示学生 姓名 字段 s_name 中只要第 1 个字为 赵, 那么 这个表达式就成立, 即此表达式可以找出姓赵的所有学生, 命令如下 : SELECT s_no,s_name,s_score +s_addf FROM student WHERE s_name LIKE 赵 % ; S_NO S_NAME S_SCORE +S_ADDF 赵明 赵以 540 例 3.36 查询 student 表中 班级编号 字段值为 0101 和 0201 的学生的全部信息, 写 出其 SQL 命令 题目要求查询 班级编号 字段值为 0101 和 0201 的学生的全部信息, 可以利用谓词 IN 定义一个集合作为查询条件, 命令如下 : SELECT 倡 FROM student WHERE class_no IN( 0101, 0201 ); S_NO S_NAME S_ S_BIRTHDAY S_SCORE S_ADDF CLAS 赵明 男 月 马水 男 06-3 月 杨仪 女 24-4 月 王蕾 女 月 例 3.37 查询 student 表中所有学生的全部信息, 并将显示结果按照学生入学成绩的降 序排列, 写出其 SQL 命令

27 70 第 3 章 SQL 基础 题目要求将显示结果按照学生入学成绩的降序排列, 利用 ORDER BY 子句可以对查询结果 进行排序, 命令如下 : SELECT 倡 FROM student ORDER BY s_score DESC; S_NO S_NAME S_ S_BIRTHDAY S_SCORE S_ADDF CLAS 牛可男 06-6 月 赵明男 月 王蕾女 月 杨仪女 24-4 月 马水男 06-3 月 马力女 07-7 月 赵以男 24-8 月 从本例可以看出, 利用 ORDER BY 子句可以对查询结果进行排序, 使结果的显示遵循一定 的规律, 便于查找数据 例 3.38 查询 student 表中所有学生的全部信息, 并将显示结果按照入学成绩降序 班级 编号降序排列, 写出其 SQL 命令 如下 : 题目要求将显示结果按照入学成绩降序 班级编号降序排列, 需要用到两个排序条件, 命令 SELECT 倡 FROM student ORDER BY s_score DESC,class_no DESC; S_NO S_NAME S_ S_BIRTHDAY S_SCORE S_ADDF CLAS 牛可男 06-6 月 王蕾女 月 赵明男 月 杨仪女 24-4 月 马水男 06-3 月 马力女 07-7 月 赵以男 24-8 月 从本例可以看出, 对多个字段进行排序时, 依次按照指定字段的指定排序方式进行排序 本 例首先按第 1 个指定字段 入学成绩 的降序排序, 入学成绩相同的则按第 2 个指定字段 班级 编号 的降序排序 例 3.39 按 班级编号 分组统计 student 表中各班的学生人数和入学总分的平均分, 写 出其 SQL 命令 题目要求按班级分别统计学生信息, 一个班级为一组, 为分组查询, 可以利用 GROUP BY 子 句对查询结果进行分组, 命令如下 : SELECT class_no,count( s_no),avg( s_score +s_addf) FROM student GROUP

28 3.4 数据查询 71 BY class_no; CLAS COUNT(S_NO) AVG(S_SCORE +S_ADDF) 从本例可以看出, 利用 GROUP BY 子句可对查询结果进行分组统计 从命令执行结果可以 看出, 结果是按照 班级编号 字段值进行分组的, 每个分组利用 COUNT( ) 函数对各班的学号计 数 ( 统计本班学生人数 ), 利用 AVG( ) 函数求各班学生的入学总分平均分 COUNT( ) 函数和 AVG() 函数均为聚集函数 注意 : (1) 关于聚集函数的内容请参见附录 D (2) 分组查询的显示列表项中只能出现分组字段和利用聚集函数所得到的统计结果, 如果 上例中的 SQL 命令如下 : SELECT class_no,s_no, COUNT( s_no) FROM student GROUP BY class_no; 则会出现错误, 提示非分组信息即 s_no 不是 GROUP BY 表达式 例 3.40 按 班级编号 分组统计 student 表中各班入学总分平均分高于 550 分的班级学 生人数, 写出其 SQL 命令 题目要求按班级进行统计, 为分组查询, 且要求只输出各班入学总分平均分高于 550 分的分 组, 所以应利用 HAVING 子句指定分组查询条件, 命令如下 : SELECT class_no,count( s_no) FROM student GROUP BY class_no HAVING AVG ( s_score +s_addf) >550; CLAS COUNT(S_NO) AVG(S_SCORE +S_ADDF) 从本例可以看出, 利用 HAVING 子句可以指定分组查询条件, 此时, 只有满足条件的分组记 录才会显示出来 例 3.41 查询 student 表中的 s_no 和 s_name 字段, 要求输出结果的表头为学号 姓名, 写 出其 SQL 命令 题目要求输出结果的表头为学生学号 姓名, 利用字段名后面加空格再加别名的方式可以改 变输出表头的显示方式, 即为指定字段定义别名, 命令如下 : SELECT s_no 学号,s_name 姓名 FROM student;

29 72 第 3 章 SQL 基础 学号 姓名 赵明 赵以 马水 杨仪 王蕾 牛可 马力 从本例可以看出, 利用字段名后面加空格再加别名的方式可以改变输出表头的显示方式, 即 为指定字段定义别名 同样, 可以利用字段名后面加 AS 或双引号的方式为指定字段定义别 名, 命令如下 : SELECT s_no AS 学号,s_name AS 姓名 FROM student; 或 SELECT s_no " 学号 ",s_name " 姓名 "FROM student; 例 3.42 查询 student 表中的 s_no 和 s_name 字段, 要求输出结果的表头为学号 姓名, 而 且在学号和姓名之间添加空格和 学生的 3 个汉字, 写出其 SQL 命令 题目特别要求在学号和姓名之间添加空格和 学生的 3 个汉字, 这是字符串常量, 可以直接 将其写在显示列表项中, 命令如下 : SELECT s_no 学号,, 学生的,s_name 姓名 FROM student; 学号 学生的 姓名 学生的 赵明 学生的 赵以 学生的 马水 学生的 杨仪 学生的 王蕾 学生的 牛可 学生的 马力 从本例可以看出, 在显示列表项中可以含有空格或字符串等常量, 这些常量将直接输出到结 果中 例 3.43 查询选修成绩为 NULL 的学生学号 课程编号 成绩, 写出其 SQL 命令 所谓成 绩为 NULL, 即选修某门课程但尚未参加考试, 或考试未能通过而没有得到此门课程的成绩 题目要求查询选修成绩为 NULL 的学生相关信息, 字段值是否为空使用 IS NULL 来判断, 命令如下 : SELECT s_no,c_no,score FROM sc WHERE score IS NULL;

30 3.4 数据查询 73 S_NO C_NO SCORE 多表查询相对于单表查询, 多表查询是指 SELECT 命令中的显示列表项来源于多个数据表 在日常的查询中, 单表查询是很少的, 多数查询涉及多个表的信息 例如, 在学生选课系统中要查询某学生的成绩, 结果中应至少包含学生姓名和成绩, 但学生姓名存储于 学生 表 成绩存储于 课程选修 表, 此查询将涉及两个表 多表查询 SELECT 命令中的 FROM 子句包含多个表, 表间用符号, 分隔, 而且在显示列表项中, 如果某个字段名在多个表中重复出现, 此字段前面必须加 表名. 作为前缀 进行多表查询时,WHERE 子句中必须带有表间连接条件, 最常用的是自然连接 在单表查询中应用的所有 SQL 函数 运算操作等均能用于多表查询 SELECT 中最难的是确定数据来源, 也就是通常所说的查询中涉及的多个表 下面介绍确定全部表的基本步骤 第一步, 将显示列表项中所涉及的字段罗列出来 如果显示列表项是字段表达式或函数表达式, 则将此表达式所涉及的字段也罗列出来 根据列举的所有字段确定显示列表项所涉及的所有表 ; 第二步, 将 WHERE 或 HAVING 子句所涉及的字段罗列出来, 如果设定条件是字段表达式或函数表达式, 则将此表达式中涉及的字段也罗列出来, 根据列举的所有字段确定条件所涉及的所有表 ; 第三步, 查看前两步确定的表是否能通过某些字段建立自然连接, 通常是通过表间的外键关联 如果可以, 则确定了 SELECT 语句中的数据来源 ; 如果不可以, 则应新增将前两步所确定的表连接起来的中间表, 将这些表加入数据来源中 经过上述 3 个步骤, 一个 SELECT 语句所涉及的数据来源就确定下来了 下面以学生选课系统中的 学生 表 课程 表和 课程选修 表为例介绍多表查询方法 例 3.44 查询选修课程的学生学号 姓名 课程编号 课程名称 成绩, 写出其 SQL 命令 题目要求查询选修课程的学生学号 姓名 课程编号 课程名称 成绩, 由于 学号 姓名 字段在 student 表中, 课程编号 课程名称 字段在 course 表中, 成绩 字段在 sc 表中, 属于多表查询, 而且 student 表通过 s_no 与 sc 表连接,course 表通过 c_no 与 sc 表连接, 这 3 个表无需其他表就已经连接起来了, 所以多表查询中的 FROM 子句会涉及 student 表 course 表 sc 表 由于此查询涉及 student 表 course 表 sc 表 3 个表, 而且 s_no 字段在 student 和 sc 两个表中均存在, 所以在显示列表项的字段名 s_no 前面必须加表名 同理,c_no 字段在 course 和 sc 两个表中均存在, 所以在显示列表项的字段名 c_no 前面必须加表名

31 74 第 3 章 SQL 基础 由于是多表查询, 为了保证查询结果的正确性, 需要添加表间自然连接条件, 相应的命令如下 : SELECT student.s _ no, s _ name, course.c _ no, c _ name, score FROM student, course,sc WHERE student.s_no =sc.s_no AND course.c_no =sc.c_no; S_NO S_NAME C_NO C_NAME SCORE 赵明 0001 C 语言 赵明 0002 Java 语言 赵明 0003 C ++ 语言 赵明 0004 VB 语言 马水 0001 C 语言 赵以 0002 Java 语言 赵以 0001 C 语言 马力 0001 C 语言 马力 0002 Java 语言 本例的执行过程为 : 首先进行 student 表 course 表 sc 表的自然连接运算, 连接条件即为 SE- LECT 语句的 WHERE 子句中的条件, 然后进行投影运算, 仅保留显示列表项中所需要的字段 以写成 : 由于 student 表和 sc 表中都有 s_no 字段,course 表和 sc 表中都有 c_no 字段, 所以命令也可 SELECT sc.s_no,s_name,sc.c_no,c_name,score FROM student,course,sc WHERE student.s_no =sc.s_no AND course.c_no =sc.c_no; 例 3.45 查询选修课程的学生姓名 课程名称, 写出其 SQL 命令 题目要求查询选修课程的学生姓名 课程名称, 由于学生 姓名 字段在 student 表中, 课程 名称 字段在 course 表中, 属于多表查询, 但 student 表与 course 表之间不存在直接的关联, 必须 通过 sc 表实现, 因此 sc 表将作为连接表, 所以多表查询的 FROM 子句会涉及 student 表 course 表 sc 表这 3 个表, 命令如下 : SELECT s_name, c_name FROM student,course,sc WHERE student.s_no =sc.s_no AND course.c_no =sc.c_no; S_NAME 赵明赵明赵明赵明马水赵以 C_NAME C 语言 Java 语言 C ++ 语言 VB 语言 C 语言 Java 语言

32 3.4 数据查询 75 赵以 C 语言 马力 C 语言 马力 Java 语言 例 3.46 查询选修课程成绩及格的学生学号 姓名 课程编号 课程名称 成绩, 写出其 SQL 命令 题目要求查询选修课程成绩及格的学生信息, 本例在例 3.44 的基础上增设成绩及格这一条 件, 所以应在 WHERE 子句中添加条件 score >=60, 命令如下 : SELECT student.s _ no, s _ name, course.c _ no, c _ name, score FROM student, course,sc WHERE student.s_no =sc.s_no AND course.c_no =sc.c_no AND score >=60; S_NO S_NAME C_NO C_NAME SCORE 赵明 0001 C 语言 赵明 0003 C ++ 语言 马水 0001 C 语言 赵以 0002 Java 语言 90 本例的执行过程为 : 首先进行 student 表 course 表 sc 表的自然连接运算, 连接条件即为 SE- LECT 语句的 WHERE 子句的前 2 个条件 ; 然后进行选择运算, 选择成绩及格的学生记录 ; 接着再 进行投影运算, 仅保留显示列表项中所需要的字段 例 3.47 查询选修 Java 语言的学生的学号 姓名 课程编号 课程名称 成绩, 写出其 SQL 命令, 注意与例 2.13 进行比较 题目要求查询选修 Java 语言的学生信息, 本例在例 3.44 的基础上增设课程名称为 Java 语 言这一条件, 所以应在 WHERE 子句中添加条件 c_name = Java 语言, 命令如下 : SELECT student.s _ no, s _ name, course.c _ no, c _ name, score FROM student, course,sc WHERE student.s_no =sc.s_no AND course.c_no =sc.c_no AND c_name = Java 语言 ; S_NO S_NAME C_NO C_NAME SCORE 赵明 0002 Java 语言 赵以 0002 Java 语言 马力 0002 Java 语言 例 3.48 查询所有学生选修课程的情况, 要求包含未选修任何课程的学生的信息, 显示 结果中包含学生学号 姓名 课程编号 成绩, 写出其 SQL 命令 题目要求查询所有学生选修课程的情况, 特别要求包含未选修任何课程的学生的信息, 这和

33 76 第 3 章 SQL 基础 例 3.44 的查询要求有所不同 首先观察例 3.44 的查询结果 S_NO S_NAME C_NO C_NAME SCORE 赵明 0001 C 语言 赵明 0002 Java 语言 赵明 0003 C ++ 语言 赵明 0004 VB 语言 马水 0001 C 语言 赵以 0002 Java 语言 赵以 0001 C 语言 马力 0001 C 语言 马力 0002 Java 语言 例 3.44 中的连接均为自然连接, 只有满足条件的记录才能在查询结果中出现, 而未选修任 何课程的学生在 sc 表中并无相关记录, 所以作自然连接时所得结果中就没有此学生的记录 要 想查询所有学生选修课程的记录, 就要用到外连接 所谓外连接, 是指在带有外连接一侧的表中添加一个万能行, 此行所有字段的值均为 NULL, 当此表中不存在满足条件的记录时, 利用这个万能行可以与其他表进行连接 在 Oracle 数据库中, 外连接用符号 + 表示, 外连接可分为左连接和右连接 + 位于连 接条件表达式的等号左边的为左连接, + 位于连接条件表达式的等号右边的为右连接 本例要求查询所有学生的选修信息, 特别包含未选修任何课程的学生的信息, 所以 sc 表中 需要添加一个所有字段的值均为 NULL 的万能行, 应在 sc 表一侧增设符号 +, 命令如下 : SELECT student.s_no,s_name,course.c_no,score FROM student,sc WHERE student.s_no =sc.s_no( +); S_NO S_NAME C_NO SCORE 赵明 赵明 赵明 赵明 赵以 赵以 马水 杨仪 王蕾 牛可 马力 马力 0002 将本例的执行结果与例 3.44 的执行结果进行比较之后可以看出, 进行表间的外连接时未选 修课程的学生数据也查询出来了 例如杨仪 王蕾和牛可同学均未选修课程, 在不建立外连接时

34 3.4 数据查询 77 就不能查询出来 嵌套查询存在这样的实际查询, 它以某一查询的执行结果作为其他查询的条件 例如, 在学生选课系统中查询与王蕾在同一班级学习的学生姓名, 执行此查询应首先查询王蕾所在班级的班级编号, 在此基础上再查询此班级编号对应的学生姓名, 这就需要使用嵌套查询 在 SELECT 查询语句中嵌入 SELECT 查询语句, 这种查询称为嵌套查询 被嵌入的 SELECT 查询语句称为子查询, 包含子查询的查询称为父查询 在嵌套查询中, 要对子查询添加括号, 子查询的格式与 SELECT 语句格式稍有不同, 子查询和 SELECT 语句之间的几点区别如下 (1) 子查询最为常见的用法是必须生成单字段数据作为其查询结果, 即必须是一个确定的项 如果查询结果是一个集合, 则需要使用附录 D 中介绍的谓词操作符 (2) ORDER BY 子句不能用于子查询, 子查询结果只是在主查询内部使用, 对用户而言是不可见的, 所以对其所做的任何排序操作都是没有意义的 嵌套查询常用的求解方法是由内向外进行处理, 即先执行子查询, 将子查询的结果作为父查询的查询条件 例 3.49 查询入学总分高于平均总分的学生的学号 姓名及总分信息, 并将显示结果按照班级编号 学号的升序排列, 写出其 SQL 命令 题目要求查询入学总分高于平均总分的学生信息, 首先需要得到学生入学总分的平均值, 然后才能查询高于此平均总分的学生的信息, 所以查询条件中要用到嵌套查询, 命令如下 : SELECT s_no,s_name,s_score +s_addf FROM student WHERE ( s_score +s_addf) >( SELECT AVG( s_score +s_addf) FROM student) ORDER BY class_no,s_no; S_NO S_NAME S_SCORE +S_ADDF 赵明 杨仪 王蕾 牛可 630 本例的执行过程为 : 先执行子查询 SELECT AVG( s_score +s_addf) FROM student 以获得学生的平均总分 578 分, 再执行父查询 SELECT s_no,s_name,s_score +s_addf FROM student WHERE (s_score +s_addf) >578 获得入学总分高于平均总分的学生的部分信息, 接着将查询结果按照 class_no s_no 的升序排列 例 3.50 查询选修 0001 号课程成绩高于这门课程平均分的学生的学号 姓名 成绩, 并将显示结果按照班级编号 学号的升序排列, 写出其 SQL 命令 题目要求查询选修 0001 号课程成绩高于这门课程平均分的学生信息, 需要先查询 0001 号课程平均分, 再查询高于此平均分的学生有关这门课程的选修信息, 同样要用到嵌套查询, 命

35 78 第 3 章 SQL 基础 令如下 : SELECT student.s_no,s_name,score FROM student,sc WHERE score >(SELECT AVG(score) FROM sc WHERE c_no =0001 ) AND c_no =0001 S_NO S_NAME SCORE 马水 95 AND student.s_no =sc.s_no ORDER BY class_no,s_no; 3.5 视图 在学生选课系统中经常需要查询学生的选修信息, 假设包含学号 姓名 班级编号 课程编号 课程名称 成绩等, 但不想将 student 表 course 表和 sc 表的结构信息向无关人员透露, 为了保证系统的安全性, 需要将所定义的基本表信息隐藏起来, 此时就可以采用视图技术 视图是为了确保数据表的安全性 提高数据的隐蔽性而从一个或多个表中或其他视图中使用 SELECT 语句所导出的虚表 数据库中仅存放视图的定义, 而不存放视图所对应的数据, 数据仍然存放在基础表中, 对视图中数据所做的更新实际上仍然是对组成视图的基础表的更新 换句话说, 视图相当于在基础表上增设一层保护膜, 通过使用视图, 基础表中的数据能够以各种不同的方式提供给用户, 以加强数据库的安全性 视图应先行定义, 再加以使用 定义视图定义视图命令的一般格式如下 : CREATE [OR REPLACE] VIEW < 视图名 >[ ( 列名列表 )] AS 子查询 [ WITH READ ONLY WITH CHECK OPTION] 其中 : VIEW 是视图关键字,OR REPLACE 选项表示将覆盖视图中原有的内容, 仅在修改时使用 ; WITH READ ONLY WITH CHECK OPTION 说明视图的性质, 前者表示视图的属性是只读的, 不能进行插入 修改 删除操作, 后者则表示当向视图中插入 修改 删除数据时, 数据必须满足视图定义中子查询的 WHERE 条件, 默认状态为只读 视图中的 列名列表 要么全部省略, 要么全部指定 当省略它时, 列名是子查询中的显示列表项 在以下 3 种情况下必须指出组成视图的所有列名 (1) 某个目标列不是单纯的属性名, 而是聚集函数或列表达式 ; (2) 进行多表连接时,SELECT 语句中有若干同名列作为视图的字段 ; (3) 需要在视图中为某个列启用新的更合适的名字 例 3.51 定义选修课程成绩及格的只读视图 sc_view, 要求视图中包含学号 姓名 班级

36 3.5 视图 79 编号 课程编号 课程名称 成绩, 写出其 SQL 命令 CREATE VIEW sc_view( s_no,s_name,class_no,c_no,c_name,score) AS SELECT student.s _ no,s _name, class _ no, course.c _ no, c _ name, score FROM student,course,sc WHERE student.s_no =sc.s_no AND course.c_no =sc.c_no AND score >=60 WITH READ ONLY; 本例中的 s_no 字段在 student 表和 sc 表中均存在,c_no 字段在 course 表和 sc 表中均存在, 所以视图列名必须明确指定 ; 由于是 只读 视图, 所以带有 WITH READ ONLY 参数 此命令执行后, 在数据库中创建一个名为 sc_view 的视图, 其信息存储于 Oracle 系统数据表 中 例 3.52 定义班级编号为 0101 的检查视图 student_view, 要求视图中包含学号 姓名 入学成绩, 班级编号, 写出其 SQL 命令 CREATE VIEW student_view AS SELECT s_no,s_name,s_score,class_no FROM student WHERE class_no =0101 WITH CHECK OPTION; 本例中的字段只来源于 student 表, 检查视图带有 WITH CHECK OPTION 子句 同样, 此命令执行后, 在数据库中创建一个名为 student_view 的视图, 其信息存储于 Oracle 系统数据表中 查询视图 视图定义成功之后, 视图信息存储于系统数据表 DBA_VIEWS 中, 通过使用查询命令 DESC 可以得到存储在 DBA_VIEWS 中的视图信息 例 3.53 用 DESC 命令查看 DBA_VIEWS 的结构 DESC DBA_VIEWS; 名称 是否为空 数据类型 OWNER NOT NULL VARCHAR2(30) VIEW_NAME NOT NULL VARCHAR2(30) TEXT_LENGTH NUMBER TEXT LONG TYPE_TEXT_LENGTH NUMBER TYPE_TEXT VARCHAR2(4000) OID_TEXT_LENGTH NUMBER

37 80 第 3 章 SQL 基础 OID_TEXT VARCHAR2(4000) VIEW_TYPE_OWNER VARCHAR2(30) VIEW_TYPE VARCHAR2(30) SUPERVIEW_NAME VARCHAR2(30) 从本例可以看出,DBA_VIEWS 系统数据表中存储着视图名称 ( VIEW_NAME) 视图的子查询语句 (TEXT) 及其长度 (TEXT_LENGTH) 等信息 可以使用 SELECT 命令查询所需的结果 例 3.54 利用 DBA_VIEWS 系统数据表查看视图 sc_view 的内容 长度信息, 写出其 SQL 命令 SELECT TEXT,TEXT_LENGTH FROM DBA_VIEWS WHERE VIEW_NAME = SC_VIEW ; TEXT TEXT_LENGTH SELECT student.s_no,s_name,class_no,course.c_no,c_name,score FROM 163 student,course 从本例可以看出,sc_view 子查询的长度为 163, 由于对查询结果的显示有所限制, 子查询语句没有全部显示出来 基于视图的数据查询与更新视图是从多表所导出的虚表, 具有表的基本特性, 可以基于视图作数据查询和更新 1. 基于视图的数据查询基于视图的数据查询与基于基本表的数据查询一样使用 SELECT 语句, 查询视图的基本方法与查询基本表一致, 只不过数据来源为视图 例 3.55 查询选修课程成绩及格的学生的学号 姓名 课程编号 课程名称和成绩, 写出其 SQL 命令 例 3.51 中所定义的视图 sc_view 就包含了本例所要查询的信息, 可以基于 sc_view 进行查询, 命令如下 : SELECT s_no,s_name,c_no,c_name,score FROM sc_view; 由于视图是建立于基本表基础之上的虚表, 所以基于视图的查询和更新最终都要转化为基于基本表的查询和更新, 这个过程称为视图消解过程 视图消解过程分三步进行, 第一步对视图进行有效性检查, 第二步将视图转换成等价的对基本表的查询语句, 第三步执行经转换后得到的查询语句 例 3.55 中基于视图 sc_view 的查询首先要转化成基于组成视图 sc_view 的基本表 student sc 和 course 的查询, 查询语句如下 : SELECT student.s _ no, s _ name, course.c _ no, c _ name, score FROM student,

38 3.5 视图 81 course,sc WHERE student.s_no =sc.s_no AND course.c_no =sc.c_no AND score >=60; 比较两种查询可知 : (1) 视图能够简化用户的操作, 可以将复杂的查询定义成视图, 然后基于视图执行查询操作, 这样能够简化用户的操作 (2) 可以基于相同的基本表定义不同的视图, 视图的组成属性可以不同, 使用户能够从多种角度分析同一数据 (3) 视图能够通过定义视图的 WHERE 条件来过滤数据, 对机密数据提供安全保护 (4) 视图隐藏了基本表的信息, 提供系统的安全性 例 3.56 查询选修 0001 号课程的成绩及格的学生的学号 姓名, 写出其 SQL 命令 SELECT s_no,s_name FROM sc_view WHERE c_no =0001 ; 2. 基于视图的数据更新在一般情况下, 只能基于行列子集视图进行数据更新 所谓行列子集视图即若一个视图是从单个基本表导出的, 并且只是去除基本表的某些行和列, 但保留主键, 则称这类视图为行列子集视图 注意 : 基于视图的更新实际上仍然是修改基本表中的数据 例 3.57 向 student_view 视图中插入一条记录, 学号为 , 姓名为 张三, 入学成绩为 560 分, 写出其 SQL 命令 INSERT INTO student_view VALUES( , 张三,560, 0101 ) ; 此命令执行后, 利用 SELECT 语句查询 student 表中的数据, 可以发现这一行数据已插入 student 表 可见, 基于视图的数据更新隐藏了数据库基本表的信息, 使得数据库更加安全 注意 : 基于视图作数据更新时, 一定要满足定义视图时查询子句中的 WHERE 条件, 本例中的班级编号应为 0101 如果 班级编号 字段值不是 0101, 则插入操作就会失败 删除视图一旦视图在数据库中定义成功, 会一直存储于数据库中, 但有时会发现不再需要某个视图, 此时应删除此视图, 以释放其所占用的存储空间 删除视图命令的一般格式如下 : DROP VIEW [ < 方案名 >.] < 视图名 >; 假设在学生选课系统中不再需要视图 sc_view, 此时, 可以将视图 sc_view 删除 例 3.58 删除视图 sc_view, 写出其 SQL 命令 DROP VIEW sc_view; 此命令执行后, 数据库中就不再有 sc_view 视图了

39 82 第 3 章 SQL 基础 3.6 小结 本章对 SQL 进行概述, 重点介绍了 SQL 的概念 特点及 SQL 中的数据定义 数据查询和数据操纵功能及基本命令格式 通过本章内容的学习, 读者应该了解 : (1) SQL 称为结构化查询语言, 在许多关系数据库管理系统中均可使用, 其功能并非仅局限于查询, 它集数据定义 数据查询 数据操纵 数据控制功能于一体 (2) 通过 SQL 定义对象的方法是使用 CREATE 命令, 通过 SQL 修改对象的方法是使用 AL- TER 命令, 通过 SQL 删除对象的方法是使用 DROP 命令 在数据定义命令中, 表的关键字为 TA- BLE, 索引的关键字为 INDEX, 视图的关键字为 VIEW (3) 通过 SQL 查询数据的方法是使用 SELECT 命令 (4) 通过 SQL 插入数据的方法是使用 INSERT 命令, 通过 SQL 修改数据的方法是使用 UP- DATE 命令, 通过 SQL 删除数据的方法是使用 DELETE 命令 思考题与习题 1. 简述 SQL 的发展历程 2. 什么是视图, 它与表有何不同? 3. 表级约束和列级约束有何不同? 4. 简述 Oracle 系统中表的约束类型及定义方法 5. 写出 SQL 的 9 个动词 6.UNIQUE 和 PRIMARY KEY 约束之间的区别是什么? 7. 写出视图定义中 WITH CHECK OPTION 约束的含义 8. 写出索引的作用 9. 基于哪种视图可以进行数据更新? 实 训 一 实训目标熟练掌握 SQL 的数据定义 数据查询和数据更新命令 二 实训学时建议实训参考学时为 6 或 8 学时 三 实训准备熟悉附录 A 中 SQL Plus 或 SQL Plus Worksheet 环境, 掌握常用命令的使用方法 四 实训内容针对学生选课系统, 执行下述操作, 记录执行命令和操作过程中所遇到的问题及相应的解决方法, 注意从原理上查找原因 1. 定义学生选课系统中的 学生 表 student 课程 表 course 课程选修 表 sc, 其中各表的表名设置为给

40 实训 83 定表名 + 班级名称缩写 + 学号 下面以 计算 号 学生为例,student 表的表名为 studentjs05102,course 表的表名为 coursejs05102,sc 表的表名为 scjs05102 student 表如表 3.7 所示,course 表如表 3.8 所示,sc 表如表 3.9 所示 2. 查看 学生 表的结构信息 3. 在 学生 表的 姓名 字段上定义降序索引 student_sname_index 4. 在 课程 表的 课程名称 字段上定义升序索引 course_cname_index 5. 在 课程选修 表的 成绩 字段上定义升序索引 sc_grade_index 6. 查看 学生 表的索引信息 7. 查看 课程 表的索引信息 8. 删除 课程选修 表 成绩 字段上的索引 9. 向学生选课系统的 3 个表中各插入 5 条记录, 记录插入数据过程中所遇到的问题及相应的解决方法, 注意体会约束对于数据所产生的影响 10. 定义 学生 表 2(studentjs051022), 向此表中插入 5 条不同的记录, 注意必须与 学生 表中的数据有所不同, 主要体现在主键 学号 上 执行下述操作 (1) 采用多行数据插入的方法, 将 学生 表 2 中的数据插入 学生 表, 观察执行此操作的结果 (2) 将命令再执行一次, 观察所得的结果, 分析产生错误的原因 11. 修改 学生 表 2(studentjs051022) 的结构, 添加 家庭地址 (f_address char(50)) 家庭收入 (f_salary number(5,1)) 和 家庭人数 (f_num number(2)) 这 3 个字段 12. 修改 学生 表 2(studentjs051022) 的结构, 删除 家庭地址 (f_address char(50)) 字段 13. 修改 学生 表 2(studentjs051022) 的结构, 删除 家庭收入 (f_salary number(5,1)) 和 家庭人数 ( f_ num number(2)) 这 2 个字段 14. 修改 学生 表 2(studentjs051022) 的结构, 将 姓名 (s_name) 字段的长度修改为 6, 记录修改结果 15. 修改 学生 表 2(studentjs051022) 的结构, 将 姓名 (s_name) 字段的长度修改为 10, 记录修改结果 16. 采用表间数据复制的方法定义 学生 表 3(studentjs051023), 将 student 表中全部字段的值复制到 学生 表 3, 查看 学生 表 3 的内容, 体会表间数据复制的含义 ; 采用表间数据复制的方法定义 学生 表 4(stu- dentjs051024), 将 student 表中部分字段的值复制到 学生 表 4, 查看 学生 表 4 的内容, 比较 学生 表 3 和 学生 表 4 中数据的不同, 进一步体会表间数据复制的含义 17. 修改 学生 表中某名学生的学号, 能否成功, 记录结果, 并解释成功或失败的原因 18. 修改 课程选修 表中某名学生的学号, 能否成功, 记录结果, 并解释成功或失败的原因 19. 删除 学生 表 3 中的所有数据, 然后删除 学生 表 3, 注意体会删除数据与删除表之间的不同 20. 永久删除 学生 表 2 中的数据, 然后删除 学生 表 定义 只读 视图 sc_view, 要求显示所有学生的学号 姓名 课程编号 课程名称和成绩 22. 查看视图 sc_view 的基本信息 23. 定义检查视图 student_view, 要求显示学生的学号 姓名 班级编号 入学成绩 24. 基于视图 student_view, 向 学生 表插入记录 修改记录 删除记录, 观察 学生 表数据的变化 25. 基于学生选课系统进行下述数据查询练习 (1) 基于视图 sc_view 查询选修课程编号为 0001 课程的学生的学号 姓名 成绩 (2) 查询所有学生的全部情况 (3) 查询男生的学号 姓名 出生日期 (4) 查询选修课程成绩在 60 分以上的学生的姓名 课程名称和成绩 (5) 查询赵以同学所学课程成绩低于 60 分的课程名称

41 84 第 3 章 SQL 基础 (6) 将 Java 语言 课程成绩低于 60 分的学生的成绩改为 60 分 (7) 查询全部赵姓学生的所有信息 (8) 统计学生数据库中选修课程成绩在 80 ~90 分之间的学生人数 (9) 计算 0101 班学生数据库选修课程的平均分 (10) 按班级分别统计学生入学总分在平均分之上的学生人数 (11) 按班级对学生的入学成绩从高到低进行排序 (12) 按班级统计各班学生的入学总分 (13) 分组统计选修各门课程的学生人数 (14) 基于视图 sc_view 查询所有选修课程成绩及格的学生的学号 姓名 课程名称 成绩 (15) 基于视图 sc_view 查询张三同学所学课程的课程编号 课程名称 成绩

untitled

untitled Database System Principle Database System Principle 1 SQL 3.1 SQL 3.2-3.3 3.4 3.5 3.6 Database System Principle 2 3.1 SQL SQL Structured Query Language SQL Database System Principle 3 SQL 3.1.1 SQL 3.1.2

More information

数 据 库 系 统 基 础 2/54 第 6 章 数 据 库 管 理 与 维 护

数 据 库 系 统 基 础 2/54 第 6 章 数 据 库 管 理 与 维 护 数 据 库 系 统 基 础 1/54 数 据 库 系 统 基 础 哈 尔 滨 工 业 大 学 2011.~2012. 数 据 库 系 统 基 础 2/54 第 6 章 数 据 库 管 理 与 维 护 数 据 库 系 统 基 础 3/54 第 6 章 数 据 库 管 理 与 维 护 6.1 数 据 库 管 理 员 的 基 本 职 责 6.2 数 据 库 存 储 与 性 能 管 理 6.3 数 据 库

More information

第 7 章扩展实践教学 SQL Server 数据库项目化教程 ( 主编 : 李蕾 北京师范大学出版社 ) 扩展实践 以随书赠送的素材库中的数据库实例 : 教务管理系统 为例, 要求 : 附加 教务管理系统 数据库至 SQL Server 2008 数据库服务器中 扩展实践 7-1 在教务管理系统数

第 7 章扩展实践教学 SQL Server 数据库项目化教程 ( 主编 : 李蕾 北京师范大学出版社 ) 扩展实践 以随书赠送的素材库中的数据库实例 : 教务管理系统 为例, 要求 : 附加 教务管理系统 数据库至 SQL Server 2008 数据库服务器中 扩展实践 7-1 在教务管理系统数 扩展实践 以随书赠送的素材库中的数据库实例 : 教务管理系统 为例, 要求 : 附加 教务管理系统 数据库至 SQL Server 2008 数据库服务器中 扩展实践 7-1 在教务管理系统数据库的 学生信息 表中定义一个基于 set 赋值语句, 将学生信息统计查询出的学生总人数赋值给局部变量 @num, 并用 print 语句输出 declare @num int set @num=(select

More information

数据库系统概论

数据库系统概论 第三章关系数据库标准语言 SQL 2005/9/27 第三章关系数据库标准语言 SQL 3.1 SQL 概述 3.2 数据定义 3.3 查询 3.4 数据更新 3.5 视图 3.6 数据完整性 3.7 嵌入式 SQL ODBC 及 JDBC 触发器 关系数据库标准语言 SQL( 续 ) SQL 语言 (Structured Query Language) 1974 年由 Boyce 和 Chamberlin

More information

课程名称:数据库系统概论

课程名称:数据库系统概论 数据库系统概论 第三章关系数据库标准语言 SQL(I) 兴义民族师范学院 第三章关系数据库标准语言 SQL 3.1 SQL 概述 3.2 学生 - 课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 视图 3.7 小结 3.1 SQL 概述 SQL(Structured Query Language) 结构化查询语言, 是关系数据库的标准语言 SQL 是一个通用的 功能极强的关系数据库语言

More information

untitled

untitled OO 1 SQL Server 2000 2 SQL Server 2000 3 SQL Server 2000 DDL 1 2 3 DML 1 INSERT 2 DELETE 3 UPDATE SELECT DCL 1 SQL Server 2 3 GRANT REVOKE 1 2 1 2 3 4 5 6 1 SQL Server 2000 SQL Server SQL / Microsoft SQL

More information

幻灯片 1

幻灯片 1 第三章 关系数据库标准语言 SQL 第三章 关系数据库标准语言 SQL 3.1 SQL 概述 3.2 学生 - 课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 空值的处理 3.7 视图 3.5 数 3.5.1 插入数据 据 更 3.5.2 修改数据 新 3.5.3 删除数据 3.5.1 插入数据 插入 元组 插入 子查询结果 ( 多个元组 ) 1. 插入元组 语句格式 INSERT

More information

单元四数据的查询 数据库原理与应用 课内例题 任务 5 多表查询 课内例题 例创建数据表 orders, 并向表中添加记录 首先创建表 orders,sql 语句如下 : CREATE TABLE orders( o_num int NOT NULL AUTO_INCREMENT, o_date d

单元四数据的查询 数据库原理与应用 课内例题 任务 5 多表查询 课内例题 例创建数据表 orders, 并向表中添加记录 首先创建表 orders,sql 语句如下 : CREATE TABLE orders( o_num int NOT NULL AUTO_INCREMENT, o_date d 任务 5 多表查询 课内例题 例创建数据表 orders, 并向表中添加记录 首先创建表 orders,sql 语句如下 : CREATE TABLE orders( o_num int NOT NULL AUTO_INCREMENT, o_date datetime NOT NULL, c_id int NOT NULL, PRIMARY KEY (o_num) ) ; 插入需要演示的数据,SQL

More information

幻灯片 1

幻灯片 1 数据库系统概论 第三章关系数据库标准语言 SQL ( 续 2) 南京航空航天大学计算机学院 第三章关系数据库标准语言 SQL 3.1 SQL 概述 3.2 学生 - 课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 空值的处理 3.7 视图 3.8 小结 3.5 数据更新 3.5.1 插入数据 3.5.2 修改数据 3.5.3 删除数据 3.5.1 插入数据 两种插入数据方式

More information

数据库系统概论

数据库系统概论 信息学院 2015 级,2017-2~6, 教 2221 数据库系统概论 孟小峰中国人民大学 xfmeng@ruc.edu.cn http://idke.ruc.edu.cn 数据库系统概论 An Introduction to Database Systems 第三章 SQL 语言 ( 之 DDL 部分 ) 2017, 3, 14 关系代数 上节课 基本运算 : 选择 投影 并 差 卡氏积 导出运算

More information

数据库系统概论

数据库系统概论 第 3 章关系数据库 SQL 语言 孟小峰 xfmeng@ruc.edu.cn 信息学院 2014/3/24 关系代数 上节课 基本运算 : 选择 投影 并 差 卡氏积 导出运算 : 连接 并 除 其他 : 外连接 元组关系演算 : 以元组为变量构造谓词 域关系演算 以域为变量构造谓词 关系代数与关系演算的等价 第三章关系数据库标准语言 SQL 3.1 SQL 概述 3.2 数据定义 3.3 数据查询

More information

作业参考答案

作业参考答案 本章的知识点了解 SQL 语言发展史掌握关系数据库体系结构 三层结构在关系数据库体现 ) 掌握基本表定义 包括修改 删除定义 ) 掌握视图的概念与定义 删除定义理解索引的概念与定义 删除定义总结 SQL 数据定义的特点总结用户数据查询的基本结构掌握 SELECT 子句重复元组的处理掌握 FROM 子句掌握 WHERE 子句理解更名 属性 列 ) 运算理解字符串操作理解元组显示顺序理解分组掌握聚集函数掌握空值处理理解嵌套子查询的概念

More information

幻灯片 1

幻灯片 1 第三章 关系数据库标准语言 SQL 第三章 关系数据库标准语言 SQL 3.1 SQL 概述 3.2 学生 - 课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 空值的处理 3.7 视图 3.1 SQL 概述 SQL(Structured Query Language) 是关系数据库的标准语言 SQL 是一个通用的 功能极强的关系数据库语言 1.1 数据库系统概述 3.1 SQL

More information

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM CHAPTER 6 SQL SQL SQL 6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM 3. 1986 10 ANSI SQL ANSI X3. 135-1986

More information

幻灯片 1

幻灯片 1 数据库系统概论 第三章关系数据库标准语言 SQL ( 续 1) 南京航空航天大学计算机学院 第三章关系数据库标准语言 SQL 3.1 SQL 概述 3.2 学生 - 课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 空值的处理 3.7 视图 3.8 小结 3.4 数据查询 3.4.1 单表查询 3.4.2 连接查询 3.4.3 嵌套查询 3.4.4 集合查询 3.4.5 基于派生表的查询

More information

2006年暑期工作安排

2006年暑期工作安排 应用数学学院信息与计算科学专业 2 班 学号 3116006715 姓名林泽坚教师评定 实验题目 SQL 综合查询实验 一 实验目的 使学生掌握 SQL Server 查询分析器的使用方法, 加深对 SQL 和 Transact-SQL 语言的查询语句的理解 熟练掌握简单表的数据查询 数据排序和数据联结查询的操作方法 ; 嵌套查询语句 ; 熟练掌握数据查询中的分组 统计 计算和组合的操作方法 并完成下面实验内容和要求

More information

1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2

1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2 CHAPTER 1 Understanding Core Database Concepts 1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2 1 Understanding Core Database Concepts

More information

第二章 关系数据库

第二章 关系数据库 第三章关系数据库标准语言 SQL 本章内容 数据定义 数据查询 数据更新 数据库语言的编程 3.1 SQL 概述 SQL 的发展 1974 年, 由 Boyce 和 Chamberlin 提出 1975~1979,IBM San Jose Research Lab 的关系数据库管理系统原型 System R 实施了这种语言 SQL-86 是第一个 SQL 标准 SQL-89 SQL-92(SQL2)

More information

目錄 C ontents Chapter MTA Chapter Chapter

目錄 C ontents Chapter MTA Chapter Chapter 目錄 C ontents Chapter 01 1-1 MTA...1-2 1-2...1-3 1-3...1-5 1-4...1-10 Chapter 02 2-1...2-2 2-2...2-3 2-3...2-7 2-4...2-11...2-16 Chapter 03 3-1...3-2 3-2...3-8 3-3 views...3-16 3-4...3-24...3-33 Chapter

More information

第四章 关系数据库标准语言SQL.doc

第四章 关系数据库标准语言SQL.doc 第 4 章结构化查询语言 SQL 学习目标 在本章中将学习 : SQL 语言的特点及功能 SQL 的数据查询功能 SQL 的数据操作功能 SQL 的数据定义功能 4.1 SQL 语言概述 SQL 全称是 结构化查询语言 (Structured Query Language), 最早是 IBM 的圣约瑟研究实验室为其关系数据库管理系统 SYSTEM R 开发的一种查询语言, 它的前身是 SQUARE

More information

ebook46-23

ebook46-23 23 Access 2000 S Q L A c c e s s S Q L S Q L S Q L S E L E C T S Q L S Q L A c c e s s S Q L S Q L I N A N S I Jet SQL S Q L S Q L 23.1 Access 2000 SQL S Q L A c c e s s Jet SQL S Q L U N I O N V B A S

More information

项目 3 创建和管理表 任务实现 Office Visio PK 3 FK FK1 3.1 相关知识 SQL Server 一 制订表规划 1. 表要存储什么对象 2. 表中每一列的数据类型和长度 059

项目 3 创建和管理表 任务实现 Office Visio PK 3 FK FK1 3.1 相关知识 SQL Server 一 制订表规划 1. 表要存储什么对象 2. 表中每一列的数据类型和长度 059 项目 3 创建和管理表 表是数据库中最重要的基础对象 它包含数据库中的所有数据 其他数据库对象 例如索引和视图等 都是依赖于表而存在的 若要使用数据库来存储和组织数据 首先就需要创建表 在本项目中将通过 15 个任务来创建和管理表 主要内容包括表的设计 理解 SQL Server 2008 中的数据类型 以及创建和修改表等 任务 1 表的设计 任务描述 Office Visio 3.1 3.1 项目

More information

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘 ITE 資 訊 專 業 人 員 鑑 定 資 料 庫 系 統 開 發 與 設 計 實 務 試 卷 編 號 :IDS101 注 意 事 項 一 本 測 驗 為 單 面 印 刷 試 題, 共 計 十 三 頁 第 二 至 十 三 頁 為 四 十 道 學 科 試 題, 測 驗 時 間 90 分 鐘 : 每 題 2.5 分, 總 測 驗 時 間 為 90 分 鐘 二 執 行 CSF 測 驗 系 統 -Client

More information

幻灯片 1

幻灯片 1 数据库系统概论 第三章关系数据库标准语言 SQL 中国人民大学信息学院 第三章关系数据库标准语言 SQL 3.1 SQL 概述 3.2 学生 - 课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 空值的处理 3.7 视图 3.8 小结 3.1 SQL 概述 SQL(Structured Query Language) 结构化查询语言, 是关系数据库的标准语言 SQL 是一个通用的

More information

课程名称:数据库系统概论

课程名称:数据库系统概论 数据库系统概论 第三章关系数据库标准语言 SQL 第三章关系数据库标准语言 SQL 3.1 SQL 概述 3.2 学生 - 课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 视图 3.7 小结 3.1 SQL 概述 SQL(Structured Query Language) 结构化查询语言, 是关系数据库的标准语言 SQL 是一个通用的 功能极强的关系数据库语言 美国标准协会认为官方发音

More information

习题1

习题1 习 题 1 数 据 库 系 统 基 本 概 念 1.1 名 词 解 释 DB DB 是 长 期 存 储 在 计 算 机 内 有 组 织 的 统 一 管 理 的 相 关 数 据 的 集 合 DB 能 为 各 种 用 户 共 享, 具 有 较 小 冗 余 度 数 据 间 联 系 紧 密 而 又 有 较 高 的 数 据 独 立 性 等 特 点 DBMS 是 位 于 用 户 与 操 作 系 统 之 间 的

More information

PowerPoint Presentation

PowerPoint Presentation 5 数据查询 5.1 简单 SELECT 语句 5.2 SELECT 语句的统计功能 5.3 SELECT 语句中的多表连接 5.4 子查询 5.5 使用 SQL Server Management Studio 进行数据查询与维护 学习目标 通过本部分的学习, 应该掌握以下内容 数据查询的各种语句 运用 S QL S e rve r M a n a g e m e n t S t u d io 和基本的

More information

目錄

目錄 資 訊 素 養 線 上 教 材 單 元 五 資 料 庫 概 論 及 Access 5.1 資 料 庫 概 論 5.1.1 為 什 麼 需 要 資 料 庫? 日 常 生 活 裡 我 們 常 常 需 要 記 錄 一 些 事 物, 以 便 有 朝 一 日 所 記 錄 的 事 物 能 夠 派 得 上 用 場 我 們 能 藉 由 記 錄 每 天 的 生 活 開 銷, 就 可 以 在 每 個 月 的 月 底 知

More information

CHAPTER 3: RELATIONAL DATABASE LANGUAGE: SQL

CHAPTER 3: RELATIONAL DATABASE LANGUAGE:  SQL 第三章关系数据库标准语言 SQL 2012/3/13 关系代数 上节课 基本运算 : 选择 投影 并 差 卡氏积 导出运算 : 连接 并 除 其他 : 外连接 元组关系演算 : 以元组为变量构造谓词 域关系演算 以域为变量构造谓词 关系代数与关系演算的等价 关系完备的语言 关系数据库由来 (1) 系统而严格地提出关系模型的是美国 IBM 公司的 E.F.Codd 1923 年 8 月 19 日生于英格兰中部,

More information

幻灯片 1

幻灯片 1 数据库系统原理 Database System Principles 四川大学计算机学院 段磊 leiduan@scu.edu.cn 2014.9 第五章数据库完整性 完整性的概念 指数据的正确性和相容性 与安全性的比较 安全性防止人为恶意破坏数据库和非法存取 完整性防止不合语义的 不正确的数据进入数据库 DBMS 维护完整性的机制 定义机制 允许用户定义实体完整性 参照完整性和用户定义的完整性 检查机制

More information

第三章 SQL语言

第三章 SQL语言 第三章 SQL 语言 1 SQL 语言概貌及特点 1. SQL 语言概述 1) SQL:Structured Query Language,2) 结构化查询语言 3) SEQUEL:Structured English Query language4) 一种介于关系代数与关系演算之间的语言 5) 成为关系数据库的标准语言 7) 支持 :System R SQL/DS Oracle Informix

More information

PowerPoint Presentation

PowerPoint Presentation Skill-building Courses Intro to SQL Lesson 2 More Functions in SQL 通配符 :LIKE SELECT * FROM Products WHERE PName LIKE %gizmo% PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Powergizmo

More information

单元四数据的查询 数据库原理与应用 教学设计 数据库原理与应用 教学设计 课题名称 综合案例 数据的查询一 授课班级 移动通信 课时 2 学时 授课地点 实训室 知识目标能力目标素质目标 1. 掌握查询所有数据的方 1. 能够熟练地查询表中的 1. 培养学生的吃苦耐劳 法 ; 所有数据 ; 克服困难

单元四数据的查询 数据库原理与应用 教学设计 数据库原理与应用 教学设计 课题名称 综合案例 数据的查询一 授课班级 移动通信 课时 2 学时 授课地点 实训室 知识目标能力目标素质目标 1. 掌握查询所有数据的方 1. 能够熟练地查询表中的 1. 培养学生的吃苦耐劳 法 ; 所有数据 ; 克服困难 课题名称 综合案例 数据的查询一 授课班级 移动通信 课时 2 学时 授课地点 实训室 知识目标能力目标素质目标 1. 掌握查询所有数据的方 1. 能够熟练地查询表中的 1. 培养学生的吃苦耐劳 法 ; 所有数据 ; 克服困难的精神 ; 2. 掌握按条件查询的方法 ; 2. 能够灵活使用各种关系 2. 培养学生的团队分工与 3. 掌握对查询结果排序的方法 ; 运算符 AND 和 OR 对表中的数据进行条件查询

More information

教 学 目 标 描 述 主 要 数 据 库 对 象 创 建 表 描 述 列 定 义 时 可 用 的 数 据 类 型 改 变 表 的 定 义 删 除 改 名 和 截 断 表 描 述 每 个 DML 语 句 插 入 行 到 表 中 更 新 表 中 的 行 从 表 中 删 除 行 描 述 约 束 创 建

教 学 目 标 描 述 主 要 数 据 库 对 象 创 建 表 描 述 列 定 义 时 可 用 的 数 据 类 型 改 变 表 的 定 义 删 除 改 名 和 截 断 表 描 述 每 个 DML 语 句 插 入 行 到 表 中 更 新 表 中 的 行 从 表 中 删 除 行 描 述 约 束 创 建 2 第 二 讲 创 建 和 管 理 表 与 简 单 记 录 操 作 Copyright SWFC-CISC, 2013. All rights reserved. 教 学 目 标 描 述 主 要 数 据 库 对 象 创 建 表 描 述 列 定 义 时 可 用 的 数 据 类 型 改 变 表 的 定 义 删 除 改 名 和 截 断 表 描 述 每 个 DML 语 句 插 入 行 到 表 中 更 新 表

More information

untitled

untitled http://idc.hust.edu.cn/~rxli/ 1.1 1.2 1.3 1.4 1.5 1.6 2 1.1 1.1.1 1.1.2 1.1.3 3 1.1.1 Data (0005794, 601,, 1, 1948.03.26, 01) (,,,,,) 4 1.1.1 Database DB 5 1.1.1 (DBMS) DDL ( Create, Drop, Alter) DML(

More information

Microsoft Word - 第4章 单表查询—教学设计.doc

Microsoft Word - 第4章 单表查询—教学设计.doc 传智播客 MySQL 数据库入门 教学设计 课程名称 : MySQL 数据库入门 授课年级 : 2015 年级 授课学期 : 2015 学年第一学期 教师姓名 : 某某老师 2014 年 04 月 09 日 课题名称第 4 章单表查询 计划 学时 7 课时 内容分析教学目标及基本要求重点及措施 通过前面章节的学习, 我们知道如何对数据进行添加 修改 删除等操作 数据库还有一项重要的操作就是查询数据,

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 第 4 章结构化查询语言 SQL 知识结构图 SQL 概述 SQL 查询功能 ( 重点 ) SQL 操作功能 SQL 定义功能 SQL: 结构化查询语言 SQL 语言的主要特点 SQL 功能基本查询排序查询计算与分组查询带特殊运算符的条件查询嵌套查询超连接查询查询中的几个特殊选项别名与自连接查询插入操作更新操作删除操作表的定义表的删除表结构的修改视图的定义 SQL(Structured Query

More information

Microsoft Word - MySQL-排版文件.doc

Microsoft Word - MySQL-排版文件.doc 第 2 篇 核心应用 在了解 MySQL 的基本概念 基本应用之后 本篇将详细介绍 MySQL 的核心应用 包括数据表 视图 数据类型 数据运算符 函数 数据库查询 数据库索引 数据存储以及触发器等 通过本篇的学习 读 者将对使用 MySQL 数据库有更高的水平 第5章 第6章 第7章 第8章 第9章 第 10 章 第 11 章 第 12 章 数据表的基本操作 MySQL 视图 MySQL 的数据类型和运算符

More information

课程名称:数据库系统概论

课程名称:数据库系统概论 数据库原理 第五章数据库完整性 张坤龙 zhangkl@tju.edu.cn 数据库完整性 数据库的完整性 数据的正确性和相容性 数据的完整性和安全性是两个不同概念 数据的完整性 防止数据库中存在不符合语义的数据, 也就是防止数据库中存在不正确的数据 防范对象 : 不合语义的 不正确的数据 数据的安全性 保护数据库防止恶意的破坏和非法的存取 防范对象 : 非法用户和非法操作 数据库完整性 ( 续 )

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

长 安 大 学 硕 士 学 位 论 文 基 于 数 据 仓 库 和 数 据 挖 掘 的 行 为 分 析 研 究 姓 名 : 杨 雅 薇 申 请 学 位 级 别 : 硕 士 专 业 : 计 算 机 软 件 与 理 论 指 导 教 师 : 张 卫 钢 20100530 长安大学硕士学位论文 3 1 3系统架构设计 行为分析数据仓库的应用模型由四部分组成 如图3 3所示

More information

123

123 資 訊 管 理 系 資 料 庫 教 學 帄 台 MTA 資 料 庫 國 際 證 照 題 庫 分 析 指 導 教 授 : 馮 曼 琳 教 授 組 員 名 單 : 陳 雅 紋 學 號 998C030 蔡 宥 為 學 號 998C114 陳 韋 婷 學 號 998C168 中 華 民 國 一 零 三 年 五 月 I 誌 謝 本 專 題 報 告 得 以 順 利 完 成, 首 先 要 感 謝 恩 師 馮 曼

More information

学习情境 4 关系数据库标准语言 SQL 159 子学习情境一 认识 SQL 语言 任务一 SQL 语言的产生与发展 SQL(Structured Query Language) 语言是 1974 年由 Boyce 和 Chamberlin 提出的 1975 年至 1979 年 IBM 公司 San

学习情境 4 关系数据库标准语言 SQL 159 子学习情境一 认识 SQL 语言 任务一 SQL 语言的产生与发展 SQL(Structured Query Language) 语言是 1974 年由 Boyce 和 Chamberlin 提出的 1975 年至 1979 年 IBM 公司 San 学习情境 4 关系数据库标准语言 SQL 学习情境 4 关系数据库标准语言 SQL 情境描述 SQL 是高级的非过程化编程语言, 是沟通数据库服务器和客户端的重要工具, 允许用户在高层数据结构上工作 它不要求用户指定对数据的存放方法, 也不需要用户了解具体的数据存放方式, 所以, 具有完全不同底层结构的不同数据库系统可以使用相同的 SQL 语言作为数据输入与管理的 SQL 接口 它以记录集合作为操作对象,

More information

DB2 (join) SQL DB2 11 SQL DB2 SQL 9.1 DB2 DB2 ( ) SQL ( ) DB2 SQL DB2 DB2 SQL DB2 DB2 SQL DB2 ( DB2 ) DB2 DB2 DB2 SQL DB2 (1) SQL (2) S

DB2 (join) SQL DB2 11 SQL DB2 SQL 9.1 DB2 DB2 ( ) SQL ( ) DB2 SQL DB2 DB2 SQL DB2 DB2 SQL DB2 ( DB2 ) DB2 DB2 DB2 SQL DB2 (1) SQL (2) S 9 DB2 优化器 DB2 SQL select c1 c2 from ( DB2 )??? DB2?!?, no no DB2 I/O ( transrate overhead ) SQL DML (INSERT UPDATE DELETE) DB2 (access plan) DB2 (join) SQL DB2 11 SQL DB2 SQL 9.1 DB2 DB2 ( 728 747 ) SQL

More information

数据完整性问题 数据完整性的四大保障措施 : 主键约束 ; 外键约束 ; 域约束 ; 业务规则约束 ;

数据完整性问题 数据完整性的四大保障措施 : 主键约束 ; 外键约束 ; 域约束 ; 业务规则约束 ; Database Systems 主题三 : 数据完整性实现技术 DDL 信息科学与工程学院 Jin-Min Yang 2018.09 数据完整性问题 数据完整性的四大保障措施 : 主键约束 ; 外键约束 ; 域约束 ; 业务规则约束 ; DDL layout Definition of Schema of Table Trigger( 触发器 ): 业务规则约束 ; SQL Identifiers

More information

课程名称:数据库系统概论

课程名称:数据库系统概论 数据库原理 第三章关系数据库标准语言 SQL 张坤龙 zhangkl@tju.edu.cn 第三章关系数据库标准语言 SQL 3.1 SQL 概述 3.2 学生 - 课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 视图 3.7 小结 3.1 SQL 概述 SQL(Structured Query Language) 结构化查询语言, 是关系数据库的标准语言 SQL 是一个通用的

More information

赵松涛写作

赵松涛写作 第 4 章数据利器 SQL 本章通过实例的方法引导读者快速掌握 SQL 的使用, 从而能够利用 SQL Plus Worksheet 等工具, 使用标准 SQL 语言完成对数据库数据的日常管理工作 4.1 节介绍 SQL 的概念 主要特点 使用 SQL 的工具 SQL 如何访问数据表以及本书实例所使用的两个数据表 4.2 节介绍对单个数据表进行的查询操作 4.3 节介绍如何对多个数据表同时进行查询操作

More information

PowerPoint Presentation

PowerPoint Presentation 数 据 库 培 训 项 目 研 究 Oracle 索 引 探 究 B*tree 索 引 与 位 图 索 引 的 特 点 作 者 : 赵 超 2008 年 12 月 18 日 实 验 环 境 Windows-server2003 内 存 :2G Oracle 10.2.0 ORACLE_SID=orcl 索 引 类 型 B*tree 索 引 ( 默 认 方 式 ) 位 图 索 引 (bitmap) 反

More information

第二章 关系数据库

第二章 关系数据库 第二章关系数据库 本章内容 针对关系数据模型的三要素进行论述 1. 数据结构 2. 数据操作 3. 数据的完整性约束条件 2.1 关系数据模型概述 关系数据库, 是建立在关系数据模型基础上的数据库系统 关系系统基于关系模型, 关系模型又是基于数学方面的数据抽象理论 关系数据库, 用数学的方法来处理数据库中的数据 关系数据模型 E.F.Codd,1970 年提出关系模型理论 大型共享数据库数据的关系模型

More information

第三章关系数据库标准语言 SQL 3.1 SQL 概述 3.2 学生 - 课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 视图 3.7 小结

第三章关系数据库标准语言 SQL 3.1 SQL 概述 3.2 学生 - 课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 视图 3.7 小结 数据库系统概论 第三章关系数据库标准语言 SQL 第三章关系数据库标准语言 SQL 3.1 SQL 概述 3.2 学生 - 课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 视图 3.7 小结 3.1 SQL 概述 SQL(Structured Query Language) 结构化查询语言, 是关系数据库的标准语言 SQL 是一个通用的 功能极强的关系数据库语言 SQL 概述

More information

课程名称:数据库系统概论

课程名称:数据库系统概论 数 据 库 系 统 概 论 第 三 章 关 系 数 据 库 标 准 语 言 SQL (II) 兴 义 民 族 师 范 学 院 数 据 查 询 语 句 格 式 SELECT [ALL DISTINCT] < 目 标 列 表 达 式 > [,< 目 标 列 表 达 式 >] FROM < 表 名 或 视 图 名 >[, < 表 名 或 视 图 名 > ] [ WHERE < 条 件 表 达 式 > ]

More information

数据库系统概论

数据库系统概论 第五章数据库完整性 孟小峰 xfmeng@ruc.edu.cn 信息学院 2014/4/8 Replay Time 身份认证 自主访问控制 GRANT & REVOKE 强制访问控制 敏感度标记 主体和客体 视图机制, 审计 数据安全与隐私 数据库完整性 什么是数据库的完整性 数据库的完整性是指数据的正确性和相容性, 防止不合语义的数据进入数据库 例如, 学生的年龄必须是整数, 取值范围为 14--29;

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

目录 1 IPv6 PIM Snooping 配置命令 IPv6 PIM Snooping 配置命令 display pim-snooping ipv6 neighbor display pim-snooping ipv6 routing-ta

目录 1 IPv6 PIM Snooping 配置命令 IPv6 PIM Snooping 配置命令 display pim-snooping ipv6 neighbor display pim-snooping ipv6 routing-ta 目录 1 IPv6 PIM Snooping 配置命令 1-1 1.1 IPv6 PIM Snooping 配置命令 1-1 1.1.1 display pim-snooping ipv6 neighbor 1-1 1.1.2 display pim-snooping ipv6 routing-table 1-2 1.1.3 display pim-snooping ipv6 statistics

More information

创建数据表语法格式

创建数据表语法格式 创建数据库语法格式 数据库名 CREATE DATABASE database_name [ ON 指定数据库的数据文件和文件组 指定主文件 [ PRIMARY ] [ [,...n ] [, [,...n ] ] [ LOG ON { [,...n ] } ] 指定数据库文件的属性 定义文件组的属性 ] 指定事务日志文件的属性 [

More information

幻灯片 1

幻灯片 1 沈 阳 工 业 大 学 2014 年 6 月 第 7 章 数 据 库 技 术 基 础 主 要 内 容 : 7.1 数 据 库 概 述 数 据 库 基 本 概 念 数 据 模 型 逻 辑 数 据 模 型 数 据 库 系 统 的 产 生 和 发 展 常 用 的 数 据 库 管 理 系 统 7.2 Access 2010 数 据 库 创 建 及 维 护 创 建 Access 2010 数 据 库 创 建

More information

<4D F736F F D204D CCAFDBEDDBFE2B4D3C8EBC3C5B5BDBEABCDA820B5DA35D5C22E646F63>

<4D F736F F D204D CCAFDBEDDBFE2B4D3C8EBC3C5B5BDBEABCDA820B5DA35D5C22E646F63> 第 5 章 chapter 5... 数据的完整性 本章学习目标 熟练掌握实体完整性 熟练掌握索引 熟练掌握域完整性 熟练掌握引用完整性前面章节学习了数据库与数据表的基本操作, 在实际开发中, 数据表中的数据是非常多的, 保证数据的准确是至关重要的 MySQL 提供了数据的完整性约束, 主要包括实体完整性 域完整性和引用完整性, 本章将重点讲解数据的完整性 5.1 实体完整性 实体完整性是对关系中的记录进行约束,

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 友乾营 报表的 SQL 植入风险 规避风险 : 让你的报表变的安全起来 SQL 植入的概念 恶意的 SQL 归根结底 : 执行了不该允许执行的 SQL 命令, 达到非法的目的 常见案例 骗过登录验证非法获取账号信息篡改 删除数据 为什么存在 SQL 植入 植入原理 如何攻击 特殊的输入参数 未处理特殊字符 -- # 数据库配置不合理 植入原理 : 案例 1, 特殊输入参数 union or 猜表名

More information

课程名称:数据库系统概论

课程名称:数据库系统概论 数据库系统概论 第二章关系数据库 (III) 兴义民族师范学院 第二章关系数据库 2.1 关系模型概述 2.2 关系数据结构 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结 2.5 关系演算 关系演算以数理逻辑中的谓词演算为基础 按谓词变元不同进行分类 1. 元组关系演算 : 以元组变量作为谓词变元的基本对象元组关系演算语言 ALPHA 2. 域关系演算 : 以域变量作为谓词变元的基本对象域关系演算语言

More information

创建数据表语法格式

创建数据表语法格式 第三章 : 关系数据库标准语言 SQL 创建和管理数据库 数据表 1 创建数据库语法格式 数据库名 CREATE DATABASE database_name [ ON 指定数据库的数据文件和文件组 指定主文件 [ PRIMARY ] [ [,...n ] [, [,...n ] ] [ LOG ON { [,...n ] } ]

More information

幻灯片 1

幻灯片 1 数据库系统概论 第五章 数据库完整性 南京航空航天大学计算机学院 数据库的完整性 数据的正确性 数据库完整性 是指数据是符合现实世界语义, 反映了当前实际状况的 数据的相容性 是指数据库同一对象在不同关系表中的数据是符合逻辑的例如, 学生的学号必须唯一 性别只能是男或女 本科学生年龄的取值范围为 14~50 的整数 学生所选的课程必须是学校开设的课程, 学生所在的院系必须是学校已成立的院系 等 数据库完整性

More information

5. 下列条件子句中, 能够筛选出价格不在 ( 不包括边界值 ) 的是 ( ) A. Where 价格 NOT BETWEEN 100 AND 200 B. Where 价格 BETWEEN NOT 100 AND 200 C. Where 价格 NOT BETWEEN 101 AND

5. 下列条件子句中, 能够筛选出价格不在 ( 不包括边界值 ) 的是 ( ) A. Where 价格 NOT BETWEEN 100 AND 200 B. Where 价格 BETWEEN NOT 100 AND 200 C. Where 价格 NOT BETWEEN 101 AND 试卷代号 :1256 座位号 rn 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 数据库应用技术试题 2015 年 1 月 国 四厅万 1 1 一 单项选择题 ( 每个题只有一个答案是正确的, 请将正确的答案填 写到括号内 本题共 15 个小题, 每小题 2 分, 共 30 分 ) 1. 下列属于数据模型三要素的是 ( ) A. 数据库 数据库管理系统和操作系统

More information

幻灯片 1

幻灯片 1 数据库系统原理 Database System Principles 四川大学计算机学院 段磊 leiduan@scu.edu.cn 2014.9 第三章关系数据库标准语言 SQL SQL 是 Structured Query Language 的缩写 最新的标准是 SQL2003 使用最广的标准是 SQL99 包含了很多核心 SQL 以外的包 增加对递归查询 临时视图的支持 增加对触发器的支持 现在商品化

More information

精 品 库 我 们 的 都 是 精 品 _www.jingpinwenku.com (8) 数 据 库 数 据 库 系 统 和 数 据 库 管 理 系 统 之 问 的 关 系 是 ( ) A) 数 据 库 包 括 数 据 库 系 统 和 数 据 库 管 理 系 统 B) 数 据 库 系 统 包 括

精 品 库 我 们 的 都 是 精 品 _www.jingpinwenku.com (8) 数 据 库 数 据 库 系 统 和 数 据 库 管 理 系 统 之 问 的 关 系 是 ( ) A) 数 据 库 包 括 数 据 库 系 统 和 数 据 库 管 理 系 统 B) 数 据 库 系 统 包 括 更 多 内 容 请 查 看 精 品 文 库 网 www.jingpinwenku.com 全 国 计 算 机 等 级 考 试 全 真 模 拟 试 卷 (4) 二 级 Visual FoxPro ( 考 试 时 间 120 分 钟, 满 分 100 分 ) 一 选 择 题 ( 每 小 题 1 分, 共 40 分 )(1) 算 法 是 指 ( ) A) 计 算 机 程 序 B) 解 决 问 题 的 计

More information

ebook10-5

ebook10-5 Oracle 7.x RDBMS 5 Oracle S Y S S Y S T E M O r a c l e 5.1 O r a c l e R D B M S O r a c l e O r a c l e 5.2 SYS SYSTEM S Y S S Y S T E M O r a c l e S Y S V $ D B A C O N N E C T R E S O U R C E S Y

More information

数据库系统概论

数据库系统概论 信息学院 2015 级,2017-2~6, 教 2221 数据库系统概论 孟小峰中国人民大学 xfmeng@ruc.edu.cn http://idke.ruc.edu.cn 数据库系统概论 An Introduction to Database Systems 第三章 SQL 语言 ( 之高级查询部分 ) 2017, 3, 21 Replay Time SELECT 语句结构 SELECT FROM

More information

设计模式 Design Patterns

设计模式 Design Patterns 丁勇 Email:18442056@QQ.com 学习目标 掌握 HQL 查询 掌握 Criteria 查询 为什么使用 HQL 如何使用 Hibernate 查询所有房屋信息? SQL 语句 : select * from tbl_fwxx Hibernate 中如何实现查询 HQL Hibernate Query Lanuage Hibernate 查询语言 如何使用 HQL 使用 HQL 的四步

More information

Microsoft Word - CH04.doc

Microsoft Word - CH04.doc 第 4 章 关系数据库标准语言 SQL 教学目标 : 通过本章学习, 了解 SQL 语言的主要功能及特点 ; 掌握 SQL 的数据定义 数据查询 数据更新及数据控制功能, 能够灵活运用数据查询语句 SELECT 教学要求 : 知识要点 能力要求 相关知识 SQL 语言概述 (1) 能够理解 SQL 的主要功能及特点 (1) SQL 的主要功能及特点 (2) 能够对 SQL 支持的三级模式结构达到认知的

More information

Microsoft Word - 第4章 单表查询—样章.doc

Microsoft Word - 第4章 单表查询—样章.doc 第 4 章单表查询 学习目标 u 掌握简单查询, 会使用 SELECT 语句查询所有字段和指定的字段 u 掌握按条件查询, 会使用运算符以及不同的关键字进行查询 u 掌握高级查询, 会使用聚合函数查询 分组查询等 u 学会为表和字段起别名 通过前面章节的学习, 我们知道如何对数据进行添加 修改 删除等操作, 在数据库中还有一个更重要的操作就是查询数据, 查询数据是指从数据库中获取所需要的数据, 用户可以根据自己对数据的需求来查询不同的数据

More information

PowerPoint Presentation

PowerPoint Presentation Lesson 1 Intro to SQL Simple SQL Query Instructor Cici Graduated from Cornell University majored in Operations Research and Information Technology, with a minor in business. She is currently working as

More information

ebook 165-5

ebook 165-5 3 5 6 7 8 9 [ 3. 3 ] 3. 3 S Q L S Q 4. 21 S Q L S Q L 4 S Q 5 5.1 3 ( ) 78 5-1 3-8 - r e l a t i o n t u p l e c a r d i n a l i t y a t t r i b u t e d e g r e e d o m a i n primary key 5-1 3 5-1 S #

More information

4. 设有学生表 ( 学号, 姓名, 所在系, 身份证号 ) 和系表 ( 系名, 系办公地点儿下列关于两个 表的引用关系的描述, 正确的是 ( ) A. 设置学生表中的 " 所在系 " 为外键 B. 设置系表中的 " 系名 " 为外键 C. 设置学生表的学号为主键 D. 元法表达这两个表的引用关系

4. 设有学生表 ( 学号, 姓名, 所在系, 身份证号 ) 和系表 ( 系名, 系办公地点儿下列关于两个 表的引用关系的描述, 正确的是 ( ) A. 设置学生表中的  所在系  为外键 B. 设置系表中的  系名  为外键 C. 设置学生表的学号为主键 D. 元法表达这两个表的引用关系 试卷代号 :1256, 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期 " 开放本科 " 期末气 数据库应用技术试题 得分 评卷人 li I 2016 年 1 月一分一一-治一一一E 一J 山一 一一一一 单项选择题 { 每个题只有一个答案是正确的, 请将正确的答案填 写到括号内 本题共 20 个小题, 每小题 2 分, 共 40 分 ) 1. 下列属于数据模型三要素的是 ( ) A.

More information

目 录(目录名)

目  录(目录名) 目录 目录...1-1 1.1 域名解析配置命令... 1-1 1.1.1 display dns domain... 1-1 1.1.2 display dns dynamic-host... 1-1 1.1.3 display dns server... 1-2 1.1.4 display ip host... 1-3 1.1.5 dns domain... 1-4 1.1.6 dns resolve...

More information

第四章 102 图 4唱16 基于图像渲染的理论基础 三张拍摄图像以及它们投影到球面上生成的球面图像 拼图的圆心是相同的 而拼图是由球面图像上的弧线图像组成的 因此我 们称之为同心球拼图 如图 4唱18 所示 这些拼图中半径最大的是圆 Ck 最小的是圆 C0 设圆 Ck 的半径为 r 虚拟相机水平视域为 θ 有 r R sin θ 2 4畅11 由此可见 构造同心球拼图的过程实际上就是对投影图像中的弧线图像

More information

Microsoft PowerPoint - 05-SQL3-advanced.ppt

Microsoft PowerPoint - 05-SQL3-advanced.ppt SQL: Interactive Queries (2) Prof. Weining Zhang Cs.utsa.edu Aggregate Functions Functions that take a set of tuples and compute an aggregated value. Five standard functions: count, min, max, avg, sum

More information

SQL: Interactive Queries (2)

SQL: Interactive Queries (2) SQL: Interactive Queries (2) Prof. Weining Zhang Cs.utsa.edu Aggregate Functions Functions that take a set of tuples and compute an aggregated value. Five standard functions: count, min, max, avg, sum

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

Microsoft PowerPoint - Ch6

Microsoft PowerPoint - Ch6 第 六 章 基 本 的 SQL 目 的 SQL 的 關 聯 模 式 SQL 的 資 料 定 義 語 言 CREATE TABLE DROP TABLE ALTER TABLE 基 本 的 SQL 查 詢 SELECT FROM WHERE SQL 的 更 新 INSERT UPDATE DELETE 6-1 目 的 關 聯 模 式 定 義 嚴 謹 簡 潔, 但 好 用 性 和 執 行 效 率 必 須

More information

Microsoft Word - 第五讲 SQL.DOC

Microsoft Word - 第五讲 SQL.DOC 第五章关系数据库标准语言 SQL 大纲要求 关系数据库标准语言 SQL 1 SQL 的数据定义功能 : (1) CREATE TABLE SQL (2) ALTER TABLE SQL 2 SQL 的数据修改功能 : (1) DELETE SQL (2) INSERT SQL (3) UPDATE SQL 3 SQL 的数据查询功能 : (1) 简单查询 (2) 嵌套查询 (3) 连接查询 内连接外连接

More information

未命名

未命名 附录三 ADS- MySQL 基础语法偏表 类别语法偏类 MySQL 语法 ADS 语法备注 型 Utility DESCRIBE {DESCRIBE DESC} tbl_name [col_name wild] {DESCRIBE DESC} dbname.tbl_name EXPLAIN 负偏 {EXPLAIN} [explain_type] explainable_stmt {EXPLAIN}

More information

Microsoft Word - SQL全文.doc

Microsoft Word - SQL全文.doc 项目三创建和维护表 通过项目二的学习, 相信大家都已经创建好 student 数据库了, 相关的数据 ( 学生 课程 教师等 ) 放在哪儿呢? 比较方便的方法是通过 SQL Server 2000 进行数据的存储 在 SQL Server 2000 中, 数据的存储是通过二维表来实现的 掌握数据库表的创建方法 学会用 T-SQL 语句创建表 修改表和删除表 熟悉几种常用的约束的创建方法 学会对表数据进行插入

More information

Microsoft Word - sql_1__周燕红_ doc

Microsoft Word - sql_1__周燕红_ doc 实验 3 _ SQL 语言 (1) 实验报告 03CS 31311060 周燕红 一 实验目的 1. 熟悉标准 SQL 中的简单的 Select 语句和 DDL 语言 2. DML 语言和关系表的约束规范 3. 了解查询执行计划 加深理解关系代数理论 4. 了解数据库系统的数据字典 5. 熟悉 SQL Server 的相关工具的使用 二 实验素材 考虑一个简单的数据库, 在这个数据库中, 只有供应商

More information

Oracle数据库应用技术16 [兼容模式]

Oracle数据库应用技术16 [兼容模式] 第十六章 Oracle 闪回技术 主讲内容 : 闪回技术 闪回表 闪回数据库的使用 ; 复习上节课内容 备份和恢复概述 RMAN 工具 RMAN 备份 恢复 第 2 页 本节课内容 1. 闪回技术概述 2. 闪回删除 3. 闪回版本查询 4. 闪回数据库 第 3 页 一. 闪回技术概述 目的 : 为了让用户及时获取误操作之前的数据 ; 多种形式 : 闪回表 (Flashback Table) 闪回删除

More information

Microsoft Word - 数据库实验2007.doc

Microsoft Word - 数据库实验2007.doc 实 验 ( 一 ): 熟 练 掌 握 SQL 语 言 实 验 目 的 : 熟 悉 上 机 环 境, 创 建 数 据 库, 在 数 据 库 上 建 立 关 系 模 式, 插 入 数 据, 进 行 相 应 的 查 询 操 作 实 验 内 容 : 具 体 包 括 如 下 三 部 分 一 熟 悉 上 机 环 境 客 户 / 服 务 器 结 构, 数 据 库 服 务 器 在 一 台 NT 服 务 器 上, 同

More information

68 数据库系统原理与应用 ( 第三版 )(SQL Server 2012) 本节只介绍如何定义基本表和索引, 视图的概念和定义在 3.5 节讨论 1. 基本表定义 CREATE TABLE 表名 ( 列名 1 数据类型 [ 列级完整性约束条件 ], 列名 2 数据类型 [ 列级完整性约束条件 ],

68 数据库系统原理与应用 ( 第三版 )(SQL Server 2012) 本节只介绍如何定义基本表和索引, 视图的概念和定义在 3.5 节讨论 1. 基本表定义 CREATE TABLE 表名 ( 列名 1 数据类型 [ 列级完整性约束条件 ], 列名 2 数据类型 [ 列级完整性约束条件 ], 第 3 章关系数据库标准语言 SQL SQL 语言也叫结构化查询语言 (Structured Query Language), 是一种介于关系代数与关系演算之间的语言 其功能包括 : 数据定义 数据查询 数据操作和数据控制四个方面, 是一个通用的 功能很强的关系数据库语言 目前已成为关系数据库的标准语言 3.1 SQL 概述 1.SQL 语言 SQL 语言是 1974 年由 Boyce 和 Chamberlin

More information

R D B M S O R D B M S R D B M S / O R D B M S R D B M S O R D B M S 4 O R D B M S R D B M 3. ORACLE Server O R A C L E U N I X Windows NT w w

R D B M S O R D B M S R D B M S / O R D B M S R D B M S O R D B M S 4 O R D B M S R D B M 3. ORACLE Server O R A C L E U N I X Windows NT w w 1 1.1 D B M S To w e r C D 1. 1 968 I B M I M S 2 0 70 Cullinet Software I D M S I M S C O D A S Y L 1971 I D M S containing hierarchy I M S I D M S I M S I B M I M S I D M S 2 2. 18 R D B M S O R D B

More information

设计一个学生管理关系数据库,包括学生关系、课程关系和选课关系

设计一个学生管理关系数据库,包括学生关系、课程关系和选课关系 数 据 库 系 统 实 验 大 纲 要 求 独 立 完 成, 严 禁 大 量 复 制, 查 实 得 分 减 半 总 体 介 绍 ( 请 全 面 阅 读 本 介 绍, 可 以 避 免 走 弯 路 ) 一 实 验 学 时 数 :8*2 二 实 验 环 境 数 据 库 系 统 :oracle 11 Oracle 控 制 台 地 址 :https://211.87.224.23:1158/em oracle

More information

untitled

untitled 1 Access 料 (1) 立 料 [] [] [ 料 ] 立 料 Access 料 (2) 料 [ 立 料 ] Access 料 (3) 料 料 料 料 料 料 欄 ADO.NET ADO.NET.NET Framework 類 來 料 料 料 料 料 Ex MSSQL Access Excel XML ADO.NET 連 .NET 料.NET 料 料來 類.NET Data Provider

More information

SQL Server 数据库 SQL 结构化查询语言 是本课程的重点, 要在熟悉语句的语法框架的前提下, 灵活地写出实现实际需求的 SQL 语句 本章的每个例子, 都要在附录 Student 数据库上加以上机练习与变换

SQL Server 数据库 SQL 结构化查询语言 是本课程的重点, 要在熟悉语句的语法框架的前提下, 灵活地写出实现实际需求的 SQL 语句 本章的每个例子, 都要在附录 Student 数据库上加以上机练习与变换 SQL Server 数据库 SQL 结构化查询语言 是本课程的重点, 要在熟悉语句的语法框架的前提下, 灵活地写出实现实际需求的 SQL 语句 本章的每个例子, 都要在附录 Student 数据库上加以上机练习与变换 1~2 Select 语句 SQL 语句不区分大小写 本章的 SQL 语句可在查询分析器 ( 推荐 ) 企业管理器 SQL 窗口里编辑 执行 从数据库中检索行, 并允许从一个或多个表中选择一个或多个行或列

More information

试卷代号 : 座位号 E 口 中央广播电视大学 学年度第一学期 " 开放本科 " 期末考试 数据库应用技术试题 题号 一 二 三 l 四 五 总分 分数 I I I I I I I 2013 年 1 月 得分 评卷人 I I I 一 单项选择题 { 每

试卷代号 : 座位号 E 口 中央广播电视大学 学年度第一学期  开放本科  期末考试 数据库应用技术试题 题号 一 二 三 l 四 五 总分 分数 I I I I I I I 2013 年 1 月 得分 评卷人 I I I 一 单项选择题 { 每 试卷代号 : 1 2 5 6 座位号 E 口 中央广播电视大学 2 0 1 2-2 0 1 3 学年度第一学期 " 开放本科 " 期末考试 数据库应用技术试题 题号 一 二 三 l 四 五 总分 分数 I I I I I I I 2013 年 1 月 得分 评卷人 I I I 一 单项选择题 { 每个题只有 - 个答案是正确的 每题 2 分, 共 1 5 题, 3 0 分 } 1. 下列属于数据库模式的范畴是

More information

Oracle数据库应用技术13 [兼容模式]

Oracle数据库应用技术13 [兼容模式] 第十三章 SQL 语句优化 主讲内容 :SELECT 子句 WHERE 子句的优化等 ; 复习上节课内容 1. 用户帐号管理 ( 创建 编辑 删除 ) 2. 权限管理 ( 授予及回收系统权限 对象权限 ) 3. 角色管理 ( 创建 编辑 删除 ) 4. 角色权限管理 ( 授予 回收 ) 5. 授权角色给用户 第 2 页 本节课内容 一.SQL 语句优化概述二.SQL 语句优化技巧三. 其他优化方法

More information

MySQL資料庫教學

MySQL資料庫教學 SQL: 結 構 化 查 詢 語 言 國 立 聯 合 大 學 資 訊 管 理 學 系 陳 士 杰 老 師 Outlines Database Languages SQL 資 料 型 態 Data Query Language, DQL ( 資 料 查 詢 語 言 ) Data Definition Language, DDL ( 資 料 定 義 語 言 ) Data Manipulation Language,

More information

10

10 10 08 10 Periodical Report 1 4 8 1 1 4 8 Batch Job Index DBA Index SQL WHERE Execution Plan SQL 4 8 SQL 10.3 10.4 SQL 318 08 5 SQL SQL Server Oracle 20--03 16:30:52 2003163052 Orders_Big SQL T-SQL 20-01-01

More information

试卷代号 : 1256 座位号巨口 国家开放大学 ( 中央广播电视大学 ) 2016 年春季学期 开放本科 期末考试 数据库应用技术试题 2016 年 7 月 题号 分数 总分 l ee 得分评卷人 一 单项选择题 ( 每个题只有一个答案是正确的. 请将正确的答案坡 写到括号内 本题共 2 个小题,

试卷代号 : 1256 座位号巨口 国家开放大学 ( 中央广播电视大学 ) 2016 年春季学期 开放本科 期末考试 数据库应用技术试题 2016 年 7 月 题号 分数 总分 l ee 得分评卷人 一 单项选择题 ( 每个题只有一个答案是正确的. 请将正确的答案坡 写到括号内 本题共 2 个小题, 试卷代号 : 1256 座位号巨口 国家开放大学 ( 中央广播电视大学 ) 2016 年春季学期 开放本科 期末考试 数据库应用技术试题 2016 年 7 月 题号 分数 总分 l ee 得分评卷人 一 单项选择题 ( 每个题只有一个答案是正确的. 请将正确的答案坡 写到括号内 本题共 2 个小题, 每小题 2 分. 共 40 分 1. 下列功能中, 不属于数据库管理系统功能的是 () A. 数据库对象定义

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

第 3 章数据表的管理与维护 了解 :SQL Server 的基本数据类型和数据库完整性的类型 理解 : 数据表和表数据的概念 ; 表对象的管理和维护 ; 数据库完整性的概念 掌握 : 对象资源管理器和使用 T-SQL 语句创建表 管理和维护表的基本操作 ; 数据库完整性设置的基本操作 3.1 数据

第 3 章数据表的管理与维护 了解 :SQL Server 的基本数据类型和数据库完整性的类型 理解 : 数据表和表数据的概念 ; 表对象的管理和维护 ; 数据库完整性的概念 掌握 : 对象资源管理器和使用 T-SQL 语句创建表 管理和维护表的基本操作 ; 数据库完整性设置的基本操作 3.1 数据 第 3 章数据表的管理与维护 了解 :SQL Server 的基本数据类型和数据库完整性的类型 理解 : 数据表和表数据的概念 ; 表对象的管理和维护 ; 数据库完整性的概念 掌握 : 对象资源管理器和使用 T-SQL 语句创建表 管理和维护表的基本操作 ; 数据库完整性设置的基本操作 3.1 数据表的创建和管理 一个数据库可以拥有许多表, 每个表都代表一个特定的实体, 如学生数据库可能包含学生个人信息

More information

1、系统功能结构图

1、系统功能结构图 目录 1. 题目要求 :... 4 2. 需求分析 :... 4 3. 数据库概念结构设计... 5 1 系统功能结构图... 5 2 局部 E-R 图... 6 3 全局 E-R 图... 7 4 关系模式... 7 4. 数据库逻辑结构设计... 8 1 数据字典... 8 2 关系图... 10 5. 数据库实现... 11 1 创建表... 11 2 创建存储过程和触发器... 14 6.

More information

三. 发现表被删除, 开始着手解决 1. 该表所在表空间离线 ( 确保删除表所在位置不会被重写 ) SQL> alter tablespace raw_odu offline; Tablespace altered. 2. 通过 logmnr, 找出被删除的数据 data _object _id 1

三. 发现表被删除, 开始着手解决 1. 该表所在表空间离线 ( 确保删除表所在位置不会被重写 ) SQL> alter tablespace raw_odu offline; Tablespace altered. 2. 通过 logmnr, 找出被删除的数据 data _object _id 1 使用 odu 恢复被 drop 表过程 一. 数据库版本 SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production PL/SQL Release

More information