第三章 关系数据库标准语言SQL SQL(Structured Query Language)语言是1974年由Boyce和Chamberlin提出的。 1975年~1979年IBM公司San Jose Research Laboratory研制了著名的关系数据库管理系统原型System R并实现了这种语言。 1986年10月美国国家标准局(American National Standard lnstitute,简称ANSl)的数据库委员会X3H2批准了SQL作为关系数据库语言的美国标准。同年公布了SQL标准文本(简称SQL-86)。
1987年国际标准化组织(International Organization for Standardization,简称ISO)也通过了这一标准。 于1989年公布了SQL-89标准, 1992年又公布了SQL-92标准。 目前ANSI新的标准SQL-99,亦称SQL3。 SQL是一种介于关系代数与关系演算之间的结构化查询语言,其功能并不仅仅是查询。SQL是一个通用的、功能极强的关系数据库语言。
3.1 SQL 概 述 3.1.1 SQL的特点 SQL语言集数据查询(Data Query)、 数据操纵(Data Manipulation)、 数据定义(Data Definition) 数据控制(DataControl)
一、综合统一 •SQL语言则集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体,语言风格统一. •在关系模型中实体和实体间的联系均用关系表示,这种数据结构的单一性带来了数据操作符的统一,查找、插入、删除、修改等每一种操作都只需一种操作符,从而克服了非关系系统由于信息表示方式的多样性带来的操作复杂性。
二、高度非过程化 三、面向集合的操作方式 四、以同一种语法结构提供两种使用方式 SQL语言既是自含式语言,又是嵌入式语言 五、语言简捷,易学易用
3。1。2 SQL语言的基本概念 SQL语言支持关系数据库三级模式结构
3.2 数据定义
3.2.1 定义、删除与修改基本表 CREATE TABLE语句 : 3.2.1 定义、删除与修改基本表 CREATE TABLE语句 : •其中:<表名>是所要定义的基本表的名字,它可以由一个或多个属性(列) 组成。 •建表的同时通常还可以定义与该表有关的完整性约束条件
二、修改基本表 ALTER TABLE语句修改基本表,其一般格式为: ADD子句用于增加新列和新的完整性约束条件, DROP子句用于删除指定的完整性约束条件, MODIPY子句用于修改原有的列定义,包括修改列名和数据类型。
三、删除基本表
3.2.2 建立与删除索引 一、建立索引 •索引可以在一列或多列上建立,各列名之间用逗号分隔。 3.2.2 建立与删除索引 一、建立索引 •索引可以在一列或多列上建立,各列名之间用逗号分隔。 •每个<列名>后面还可以用<次序>指定索引值的排列次序,可选ASC(升序)或DESC(降序),缺省值为ASC。 • UNIQUE表明此索引的每一个索引值只对应唯一的数据记录。
CLUSTER表示要建立的索引是聚簇索引。 所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。 CREATE CLUSTER INDEX Stusname ON Student(Sname):
二、删除索引 在SQL语言中,删除索引使用DROP INDEX语句: DROP INDEX <索引名>; 例7 删除Student表的 Stusname索引。 DROP INDEX Stusname;
3.3 查询 SQL语言提供了SELECT语句其一般格式为:
3.3.1 单表查询 一、选择表中的若干列 1.查询指定列
2.查询全部列 两种方法: (1)一种方法就是在SELECT关键字后面列出所有列名。(2)如果列的显示顺序与其在基表中的顺序相同,也可以简单地将<目标列表达式>指定为*。
3.查询经过计算的值
对于上例,可以定义如下列别名:
二、选择表中的若干元组 1.消除取值重复的行
2.查询满足条件的元组
(2)确定范围 BETWEEN….AND…..和NOT BETWEEN…..AND…可以用来查找属性值在(或不在)指定范围内的元组,
(3)确定集合
(4)字符匹配 谓词LIKE可以用来进行字符串的匹配。其一般语法格式如下: [NOT] LIKE,<匹配串>,[ESCAPE,<换码字符>,] (1) 其含义是查找指定的属性列值与<匹配串>相匹配的元组。(2)<匹配串>可以是一个完整的字符串,也可以含有通配符%和 _。其中: •%(百分号) 代表任意长度(长度可以为0)的字符串。 • _ (下横线) 代表任意单个字符。
(5)涉及空值的查询
(6)多重条件查询 •逻辑运算符AND和OR可用来联结多个查询条件。 • AND的优先级高于OR •可以用括号改变优先级。
三、对查询结果排序 用户可以用ORDER BY子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,缺省值为升序。
对于空值,若按升序排,含空值的元组将最后显示。 若按降序排,空值的元组将最先显示。