第3章 关系数据库标准语言SQL
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:
CREATE UNIQUE INDEX Stusno ON Student(Sno); CREATE UNIQUE INDEX Coucno ON Course(Cno); CREATE UNIQUE INDEX SCno ON SC(Sno asc,Cno desc);
3.2.3 索引的建立和删除
模 式
内模式
学生学生-课程数据库 学生表: 学生表:
Student(Sno,Sname,Ssex,Sage,Sdept)
课程表: 课程表:
Course(Cno,Cname,Cpno,Ccredit) 学习表: 学习表: SC(Sno,Cno,Grade)
学生学生-课程数据库
3.2 SQL的定义功能 SQL的定义功能 3.2.1 基本表的定义
确定集合 字符匹配 空值
多重条件
【例】查找有不及格门次的学生学号。
SELECT DISTINCT Sno FROM SC WHERE Grade< 60
查询年龄在20 22岁 包括20岁和22 2020岁和22岁 【例】查询年龄在20-22岁(包括20岁和22岁) 之间的学生的姓名、年龄和院系。 之间的学生的姓名、年龄和院系。 SELECT Sname,Sage,Sdept FROM Student 22; WHERE Sage BETWEEN 20 AND 22; 查询年龄不在20 22岁之间的学生的姓 20【例】查询年龄不在20-22岁之间的学生的姓 年龄和院系。 名、年龄和院系。 SELECT Sname,Sage,Sdept FROM Student 22; WHERE Sage NOT BETWEEN 20 AND 22;
【例】给计算字段定义别名。
Sname,2009SELECT Sname,2009-Sage as 出生年份 Student; FROM Student;
查询条件
比较 确定范围
谓
词
=,>,<,>=,<=,!=,<>,!>,!<, BETWEEN AND, , NOT BETWEEN AND IN , NOT IN LIKE,NOT LIKE , IS NULL, , IS NOT NULL AND,OR ,
1、数据类型
1)定长和变长字符串CHAR(n) VARCHAR(n) 定长和变长字符串 ( 2)定长和变长 位串 BIT(n) BITVARING(n) 定长和变长 ( ) ( ) 3)整型数 INT(32位字长) SMALLINT (16位字长) 位字长) 位字长) 整型数 位字长 位字长 4)定点数 NUMERIC(p,d) 定点数 4)浮点数 REAL DOUBLE PRECISION 浮点数 5)日期型 DATE “ YYYY-MM-DD ” 日期型 6)时间型 TIME “HH:MM:SS” 时间型
4、外部关键字的定义
如果外部关键字只有一个属性, 1)如果外部关键字只有一个属性,可以在它 的属性名和类型后面直接用“REFERENCES” 的属性名和类型后面直接用“REFERENCES 说明它参照了某个表的某些属性,其格式为: 说明它参照了某个表的某些属性,其格式为: <表名 表名> 属性>) REFERENCES <表名>(<属性 ) 属性 TABLE语句的属性列表后面增加 2)在CREATE TABLE语句的属性列表后面增加 一个或几个外部关键字说明,其格式为: 一个或几个外部关键字说明,其格式为: 属性>) 表名> FOREIGN KEY (<属性 ) REFERENCES <表名> 属性>) (<属性 ) 属性
第三章
关系数据库标准语言SQL 关系数据库标准语言SQL
Structured Query language
3.1
SQL概述 SQL概述
一、SQL的发展 的发展
1974年提出,在SYSTEM R上实现 1986年10月,ANSI定为关系数据库语言 的美国标准 ,并公布了标准SQL 92年通过的修改标准SQL---92(Байду номын сангаас称 简称SQL2) ) 新标准SQL3
三、几个基 本概念
用 户
SQL
外模式
视图 从一 个或 视 图 是 从一个 或 几个 基 视图1 表 导 出 的表 , 它 本身 不 视图1 表导 视图2 视图2 实际 储在 数据 实 际 存 储在数 据 库中 , 只存 对视 图的 只 存 放 对视图 的 定义 信 息 ( 没有对应的数据 ) 。 基本表( 因 此 Table)是一 基本表(Base , 视图是 一 个虚 表 ) 简称基表, 因此 视图 。简称基表, 基本表1 是数据库中实际存在的关系。 一 基本表2 或虚 基本表3 基本表4 基本表1 是数据库中实际存在的关系。 4 基本表2 或 虚 关 系3 而基本表 基本表 , 而基 表是 基 种实关系 存储文件。每个基表对应一个存储文件,一个基表还 存储文件。每个基表对应一个存储文件, 存储文件1 存储文件 存储文件2 存储文件2 可以带一个或几个索引, 1 可以带一个或几个索引,存储文件和索引一起构成了 关系数据库的内模式。 关系数据库的内模式。
【例】查询所有姓李的学生的所有情况。
层次和网状 层次 网状数据库的语言一般都是过程 都是过程 性 的,而关系 关系数据模型的抽象级别较高, 比较简单,且有明确的数学定义。用户只 须了解逻辑模式,不必关心物理存储的细 非过程关系数据库语言提 节,这就为设计非过程 供了良好的基础。 SQL语言是非过程关系数据库语言。 SQL语言是非过程关系数据库语言。 它将描述操作过程的麻烦由用户转嫁给 了系统! 了系统!
3、主关键字的定义
1)在列出关系模式的属性时,在属性及其 类型后加上保留字PRIMARY KEY, 2)在列出关系模式的所有属性后,再附 加一个声明: PRIMARY KEY ( < 属 性 1>[ , < 属 性 2>,…]) 说明:如果关键字由多个属性构成,则必 须使用第二种方法。
CREATE TABLE Student ( Sno CHAR(8) NOT NULL UNIQUE, Sname CHAR(20) UNIQUE, Ssex CHAR(2) NOT NULL , Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno) );
删除表的约束格式为:
ALTER TABLE 表名 DROP CONSTRAINT 约束名
删除表的操作语句格式为:
DROP TABLE <表名 [RESTRICT|CASCADE]; 表名> 表名
3.2.3 索引的建立和删除 1、建立索引
CREATE [UNIQUE] INDEX <索引名 ON < 索引名> 索引名 表名> 列名> 次序 次序>] [, <列名 [<次序 列名> 次序 次序>]…]) 表名 (<列名 [<次序 列名 列名
CREATE TABLE Course ( Cno CHAR(4) PRIMARY KEY, Cname CHAR(20), Cpno CHAR(4) REFERENCES Course (Cno), Ccredit SMALLINT);
CREATE TABLE SC ( Sno CHAR(8), Cno CHAR(4), Grade SMALLINT, PRIMARY KEY(Sno,Cno), FOREIGN KEY Sno REFERENCES Student(Sno), FOREIGN KEY Cno REFERENCES Course(Cno) );
【 例 】 在表学生中找出计算机学院或机电学 院的学生信息。 院的学生信息。 SELECT Sname,Sage,Sdept FROM Student 计算机’ 机电 机电’ WHERE Sdept IN (‘计算机’,‘机电’) 计算机
SELECT Sname,Sage,Sdept FROM Student Sdept=‘计算机 计算机‘ Sdept='机电 机电' WHERE Sdept= 计算机‘ OR Sdept='机电';
CREATE TABLE SC ( Sno CHAR(8) REFERENCES Student(Sno) , Cno CHAR(4) REFERENCES Course(Cno) , Grade SMALLINT, PRIMARY KEY(Sno,Cno) );
3.2.2 基本表的修改和删除
ALTER TABLE <表名 表名> 表名 [ADD <列名 类型 完整性约束 列名><类型 完整性约束]] 列名 类型>[完整性约束 [DROP <完整性约束名 完整性约束名>] 完整性约束名 [ALTER COLUMN <列名 <类型 ; 列名> 类型>] 列名 类型
例:在表学生中增加属性“入学时间”,类型 为日期型
ALTER TABLE Student ADD S_entrance date ;
例:将年龄的数据类型由字符型改为整数型:
ALTER TABLE Student ALTER COLUMN Sage INT;
例:增加课程名称必须取唯一值的约束条 件 ALTER TABLE Student ADD UNIQUE(Cname) ;
数据定义
数据操纵
数据控制
过程性语言——以关系代数为基础设计出 过程性语言——以关系代数为基础设计出 的数据库语言。 的数据库语言。 即用户不但要说明需要什么 数据,而且还要说明获得这些数据的过程。 数据,而且还要说明获得这些数据的过程。 非过程性语言——用户只要说明需要的数 非过程性语言——用户只要说明需要的数 而如何获得这些数据则不必由用户说明, 据, 而如何获得这些数据则不必由用户说明, 而由系统来实现。 而由系统来实现。
【例】在学生表中找出全体学生的学号 和姓名。 SELECT Sno,Sname FROM Student;
【例】在学生表中找出全体学生的所有 信息。 SELECT * FROM Student;
【例】在学生表中找出全体学生的姓名 和出生年份。
SELECT FROM Sname,2009Sname,2009-Sage 2009 Student; Student;
2、基本表的定义
语句格式: 语句格式
CREATE TABLE <表名 表名> 表名 列名1> <类型1> [列级完整性约束条件 类型1 列级完整性约束条件 列级完整性约束条件] (<列名 列名 类型 [, <列名 列名2> <类型 类型2> [列级完整性约束条件 ] 列级完整性约束条件] 列名 类型 列级完整性约束条件 … [,<表级完整性约束条件 表级完整性约束条件>]); 表级完整性约束条件
二、SQL的特点
1、数据定义、操纵、 控制等功能一体化 2、两种使用方式, 统一的语法结构 3、高度非过程化 4、语言简洁,易学 易用
功 能
数据库查询
动 词 SELECT CREATE, , DROP ALTER INSERT, INSERT, UPDATE, , DELETE GRANT, , REVOKE
2、删除索引
DROP INDEX <索引名 索引名> 索引名
例: DROP INDEX stusno;
3.3 数据查询
基本语句格式:
SELECT <属性列表> FROM <基本表>(或视图) [WHERE <条件表达式>];
3.3.1 单表查询
单表查询:涉及一个表的查询。 单表查询:涉及一个表的查询。 (1) 选择表中的若干列(投影) (2) 选择表中的若干元组(选择) (3) 对查询分组 (4) 使用集函数 (5) 对查询结果排序
列级完整性约束: 列级完整性约束: 1)“NOT NULL”的属性的值不允许为空值 ) 的属性的值不允许为空值 2)“UNIQUE”表示该属性上的值不得重复; 表示该属性上的值不得重复; ) 表示该属性上的值不得重复
CREATE TABLE S ( Sno CHAR(8) NOT NULL UNIQUE, Sname CHAR(20) NOT NULL, Ssex CHAR(2) NOT NULL , Sage SMALLINT, Sdept CHAR(20) );