1、 2 关系演算语言(元组关系演算和域关系演算) 3具有关系代数和关系演算双重特点的语言(SQL语言)三 关系完整性约束关系数据库的数据必须遵循的约束实体完整性(Entity Integrity ) 参照完整性(Referential Integrity ) 用户自定义完整性(User-Defined Integrity )实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称为关系的两个不变性。(一)实体完整性实体完整性规则:关系模式R的主属性值不可为空 指所有主属性均不可取空值,不仅仅是主键不可为空 (二)参照完整性 1外键(Foreign Key) 定义:设F是基本关系R的一个或一
2、组属性,但不是关系的码,是基本关系的主码。如果与相对应,则称是的外码(Foreign Key)R称为参照关系(Referential Relation),S称为被参照关系(Referenced Relation )2参照完整性规则若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码KS相对应(基本关系到R和S不一定是不同关系),则对于R中每个元组在F上的值必须为:(1)等于被参照关系S 中所参照的候选键的某个值 (2)空值(三)用户自定义完整性针对某一具体数据的约束条件,反映某一具体应用所涉及的数据必须满足的特殊语义由应用环境决定四 关系代数关系代数按运算符的不同可分为传统关系运算和专
3、门关系运算(一)传统关系运算(交,并,差,笛卡尔乘积)1 (并)R1R2=b 2 d b 3 b c 2 d d 3 b a 3 c e 5 f g 6 62 (交 AND) R1R2= b 2 d c 2 d3 (差) R1R2= b 3 b4 (笛卡尔乘积) R1 S = b 2 d 2 d b 2 d 3 b b 3 b 2 d b 3 b 3 b c 2 d 2 d c 2 d 3 b d 3 b 2 d d 3 b 3 b(二)专门关系运算1 选择(SELECT) (选择符合条件的元组) () 如: 性别=男(STUDENT) 表的水平划分2 投影(Project)(选择符合条件的属
4、性) ( 学号,姓名 (STUDENT) 表的垂直划分3 连接操作(Join) 笛卡尔乘积 R S = |tR AND gS (1)连接分为等值连接和自然连接AB 连接操作: R|S 其中A和B分别为R和S上度数相等且具有可比性的属性组1)等值连接(为=) R1.A1 R1.A2 R1.A3 S.A2 S.A3 如上例 R1 | S = b 2 d 2 d R1.A2=S.A2 b 3 b 3 b c 2 d 2 d d 3 b 3 b 2)自然连接(只有|)一般连接是从行的角度出发的,但自然连接还要取消重复的列,是从行和列的角度进行运算 S.A2 S.A3 R1.A1 R1.A2 R1.A3
5、 如 R1 | S = b 2 d B 3 b4 除运算() R1.A1 如R1S = b 在R1上b印象集合是(2,d),(3,d) S在(A1,A2)上的投影为(2,d),(3,d) 第二章 关系数据库的标准语言SQL一 SQL动词表SQL功能动词数据查询SELECT数据定义CREATE,DROP,ALTER数据操纵INSERT,UPDATE,DELETE数据控制GRANT,REVOKE二 数据定义操作对象操作方式创建删除修改模式CREATE SCHEMADROP SCHEMA表CREATE TABLEDROP TABLEALTER TABLE视图CREATE VIEWDROP VIEW索
6、引CREATE INDEXDROP INDEX注意SQL通常不提供修改模式定义,修改视图定义,修改索引定义的操作(一)模式的定义和删除1模式的定义 CREATE SCHEMA AUTORIZATION 例如:CREATE SCHEMA “s-t” AUTORIZATION wang;(1) 要创建模式,调用该命令的用户必须具有DBA权限,或者获得了DBA授予的CREATE SCHEMA权限 (2)如果没指定那么隐含为(3)定义模式,实际上是定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,例如基本表,视图,索引。2模式的删除 DROP SCHEMA (两者必选其一)DROP
7、 SCHEMA “s-t” CASCADE;(1)CASCADE(级联)表示在删除模式的同时把该模式中所有的数据库对象全部一起删除。(2)RESTRICT(限制)表示在删除该模式中已经定义了下属数据库对象(表,视图索引),则拒绝该删除语句。(二)表的定义,删除和修改1表的定义CREATE TEBLA列名 列级完整性约束 , 列级完整性约束 ,)列定义的完整格式:列类型 DEFAULT NOT NULL AS 若要定义模式式下的表:CREATE TABLE .0) Sdept CHAR(20) ) CREATE TABLE Course ( Cno CHAR(4) PRIMARY KEY, Cn
8、ame CHAR(40), Cpno CHAR(4) REFERENCES Course(Cno), Ccredit SMALLINT, CHECK (Ccredit CREATE TABLE sc ( Sno CHAR(9), Cno CHAR(4) , Grade SMALLINT, PRIMARY KEY (Sno,Cno),/注意一定要有括号 FOREIGN KEY(Sno) REFERENCES Course(Cno),/sno一定要有括号 ) (4)说明 1)列约束:在每个列后定义,可以有多个约束子句,不能定义多个列上的约束2)表约束:在全部列定义完成后定义,可以有多个约束子句,多
9、个列上的约束必须使用表约束,单列上的约束可以用列约束,也可用表约束2表的删除 DROP TABLE CASCADE | RESTRICT(1)CASCADE(级联)删除该表没有任何限制,删除表的同时,相关的依赖对象(如视图)也一起删除。(2)RESTRICT(限制)删除该表是有限制条件的。欲删除的表不能被其他表的约束所引用 (如CHECK,FOREIGN KEY等约束),不能有视图,不能有触发器(trigger),不能存储过程或函数。(3)缺省情况下是RESTRICT3 表的修改 ALTER TABLE ADD 完整性约束 | MODIFY 完整性约束 | DROP COLUMN | ADD
10、DROP CONSTRAINT 例如 (1)ALTER TABLE StudentADD Dept Varchar2(10)UNIQUE (2)Alter Table StudentDROP COLUMN age (3)AlLTER TABLE StudentMODIFYage number(3) NOT NULL(4)ALTER TABLE StudentADD CONSTRAINT PK_Student PRIMARY KEY(S#) (5)ALTER TABLE SC DROP CONSTRAINT FK_SC(三)视图的定义和删除1视图的定义 CREATE VIEW (列名1,列名2,
11、)/列名一定要放在括号里查询 WITH CHECK OPTION |WITH READ ONLY例如:CREATE VIEW cs_view (sno, name, age)AS SELECT s#, sname, ageFROM student WHERE Dept = 计算机系 WITH READ ONLY;(1)WITH CHECK OPTION表示对视图进行UPTATE,INSERT,DELETE操作时要保证更新,插入,删除的行满足视图定义中的谓词条件(即子查询中的条件表达式) WITH READ ONLY表示视图是只读的(2)视图的属性列名只能是全部缺省或全部指定,没有别的选择。但在
12、下列两种情况下必须明确指定组成视图的列名。 1)某个目标列不是单纯的属性名,而是聚集函数或列表达式。 2)多表连接时选出几个同名列作为视图的字段。(3)子查询可以是任意的SELECT子句,但通常不允许含有OREER BY 子句各DISDINCT短语。(4)不是所有视图都是可更新的1)基于联接查询的视图不可更新2)使用了函数的视图不可更新3)使用了分组操作的视图不可更新4)只有建立在单个表上而且没有使用函数的视图才是可更新的2 视图的删除 DROP VIEW CASCADE(四)索引的定义和删除1索引的定义CREATE UNIQUE | CLUSTER INDEX ON , )CREATE UN
13、IQUE INDEX SCno on SC(Sno ASC,Cno DESC);(1)UNIQUE表明此索引的每一个索引值只对应唯一的数据记录(2)CLUSTER表示要建立的索引是聚簇索引。聚簇索引是指索引项的顺序与表中的物理顺序一致的索引组织,在一个表上只能建立一个聚簇索引。 (3)次序可选ASC(升序)或DESC(降序)缺省值为ASC2索引的删除DROP INDEX DROP INDEX SCno;三 数据更新 (一)插入数据 INSERT插入数据通常有两种形式,一种是插入一个元组,另一种是插入子查询结果。后者可以一次插入多个元组。 1 插入一个元组 INSERT INTO ( ,) VA
14、LUES( , 例如 INSERT INTO Student (Sno, Sname, Ssex, Sdept, Sage) VALUES (20081512, 陈冬 , 男 , IS , 18);INTO 语句中没有出现的属性列,新元组在这些列上将取空值或默认值。在INTO子句中只指出了表名,没有指出属性名,新元组要在所有属性列上都指定值,属性列的次序与CREATE TABLE 中的次序相同。2 插入子查询结果 子查询; 例如 INSERT INTO Dept_age( Sdept ,Avg_age) SELECT Sdept ,AVG(Sage) FROM Student GROUP BY
15、 Sdept;(二)修改数据 UPDATE SET = WHERE ;UPDATE Student SET Sage=22 WHERE Sno=200215021; (三)删除数据 DELETE FROM WHERE 例如:DELETE FROM Student WHERE Sno=20021528; DELETE语句删除的是表中的数据,而不是关于表的定义。四 数据查询基本数据查询的格式:SELECT ALL | DISTINCT AS标列表达式别名FROM 表名或视图名WHEREGROUP BY HAVINGORDER BY ASC|DESC;(一)单表查询 在一个表中查询数据1* 查询查询
16、全部记录:查询全部的学生信息SELECT * FROM Student;*表示所有列等同于SELECT s#, sname, age, sex FROM Student2使用别名(AS或空格) 使用别名:查询所有学生的学号和姓名SELECT s# AS 学号, sname AS 姓名 FROM Student如果别名包含空格,须使用双引号SELECT s# AS “Student Number” FROM Student3表达式查询(三种表达式,字符串表达式,算术表达式,函数表达式)(1)字符串表达式查询所有学生的学号、姓名和出生年份,返回两列信息,其中一列是“学号:姓名”,另一列是出生年份S
17、ELECT s# | “:”| sname AS 学生,2003age AS 出生年份 FROM Student说明连接字符串 | 表示则多个查询列连接为一个列输出。(2)算术表达式 查询学生的出生年份SELECT 2003age AS 出生年份 FROM Student;(3)函数表达式SELECT sno, to_char(birth, mm-dd-yyyy) AS birthday FROM StudentSELECT Count(sno) As 学生人数 FROM Student4条件查询(1)WHERE条件注:1)在where子句中使用列名和表达式,但不能使用别名。2)在where子
18、句中使用数值时,既可以用单引号也可以不用单引号,使用日期值字符值时,都必须使用单引号,并且日期值的格式必须要符合数据库中支持的日期格式,否则必须事先使用to_date函数将其转换成为数据库中支持的日期格式。oracle 中日期的默认格式为: 01-1月-82在输入查询条件时,可以用to_date(1998-01-01,yyyy-mm-dd) 3)在SQL语句中,命令不区分大小写,但字符串区分大小写WHERE子句中的关系运算符:比较操作符:, =, =, =, 逻辑操作符:AND OR NO其他操作符:INBETWEEN ANDIS NULL和IS NOT NULLLIKEEXISTS 例如:
19、1)IN:查询s001,s003,s006和s008四学生的信息SELECT * FROM StudentWHERE s# IN (s001,s003,s006,s008)2)IS NOT NULL:查询缺少年龄数据的学生SELECT * FROM Student WHERE age IS NULLLIKE:查询姓名的第一个字母为R的学生SELECT * FROM Student WHERE sname LIKE R%:任意长度的字符串_:单个字符(一个汉字占两个字节)注意:LIKE只能用于字符串的匹配,不能用于其他类型。查询姓名的第一个字母为R并且倒数第二个字母为S的学生SELECT * F
20、ROM Student WHERE sname LIKE R%S_多个比较式可用NOT、AND和OR连接SELECT * FROM Student WHERE age IS NULL and sname LIKE R%3)若要查询通配符可以用转义字符 escape character 通常 character 用 (2)去除重复记录(DISTINCT)查询学生的姓名SELECT Distinct sname FROM StudentDISTINCTt只对记录有效,不针对某个特定列SELECT Distinct sname, age FROM Student(3)排序查询(ORDER BY) 注
21、:1)order by只能对最终查询结果进行排序,也就是说其只能放在查询语句的最后一条。2)可以使用列的别名,列的位置进行排序。3)在大多数情况下,指定的排序列(order by 列名)都是选择列(select 列名),但排序 列也可以不是选择列。但如果在select 语句中使用了distinct关键字,则排序列必须 是选择列了。查询所有学生信息并将结果按年龄升序排列SELECT * FROM Student ORDER By age将结果按年龄升序排列,按姓名降序排列ORDER By age ASC,sname DESCASC表示升序,DESC表示降序 (4)聚集函数 注: 1)聚集函数和g
22、roup by 子句联合使用,表示对每个组进行统计,否则将所有数据行当 成一个组进行统计。 2)聚集函数只能出现在选择列表、order by子句、having子句中,而不能出现在where 和group by 子句中。 3)除了count(*)外,其他聚集函数都会忽略null行。 4)聚集函数中可以指定all和distinct选项。其中all是默认选项,表示统计所有的行(包 括重复行),而distinct只统计不同的行。count(distinct sal) (DISTINCT | ALL COUNT(列名):对一列中的值计数COUNT(*):计算记录个数SUM(列名):求一列值的总和(数值)AVG (列名):求一列值的平均值MIN (列名):求一列值的最小值MAX (列名):求一列值的最大值 例子:求学生的总人数SELECT count(*) FROM student求选修了课程的学生人数SELECT COUNT(DISTINCT s#) FROM SC求学生的平均年龄SELECT avg(age) as average_age FROM student (5)分组查询(GROUP BY) 1)基本格式 grou
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1