230 likes | 412 Views
计算机软件技术基础. 数据库系统( 3 ). 4.3 关系数据库语言 SQL. 关系数据库 SQL ( Structured Query Language )语言是关系数据库的 标准语言 ,对关系模型的发展和商用 DBMS 的研制起着重要的作用。. SQL 发展历史 1986 年 10 月, ANSI 批准 SQL 作为关系数据库语言的美国标准,并公布了 SQL 的标准文本 ——“ 数据库语言 SQL” (简称 SQL86 ), 1987 国际标准化组织 ISO 通过了这一标准; 1989 年公布了 SQL89 标准,增加了对完整性约束的支持;
E N D
计算机软件技术基础 数据库系统(3)
4.3 关系数据库语言SQL 关系数据库SQL(Structured Query Language)语言是关系数据库的标准语言,对关系模型的发展和商用DBMS的研制起着重要的作用。 • SQL发展历史 • 1986年10月,ANSI批准SQL作为关系数据库语言的美国标准,并公布了SQL的标准文本——“数据库语言SQL”(简称SQL86),1987国际标准化组织ISO通过了这一标准; • 1989年公布了SQL89标准,增加了对完整性约束的支持; • 1992年公布了SQL92标准; • 1996年公布了SQL96标准; • 1999年公布了SQL99标准; • 2003年公布了SQL2003标准; • SQL标准文本的修改和完善还在继续进行……
SQL语言的特点 • 一体化语言:集成 DDL、DML、DCL于一体,共有8个语句:SELECT、CREATE、ALTER、DROP、INSERT、DELETE、UPDATE、GRANT、REVOKE。 • 两种使用方法,统一语法结构:自含式,嵌入式。 • 高度非过程化:Do what? Not how to do? • 接近自然语言:语法简洁,易学、易用。 • 面向集合的操作方式:一次一集合。
数据定义语句 • 数据定义语句定义数据库的模式,包括对基本表(table)、视图(view)和索引(index)等数据库对象的创建和撤销操作。 • 数据类型: • INTEGER • SMALLINT • DECIMAL(p[, q]) • FLOAT • CHAR(n) • VARCHAR(n) • 常用语句: • CREATE TABLE DROP TABLE • CREATE VIEW DROP VIEW • CREATE INDEX DROP INDEX
CREATE TABLE语句 语法: • CREATE TABLE表名( • 列名 数据类型 [DEFAULT缺省值] [NOT NULL] • [, 列名 数据类型 [DEFAULT 缺省值] [NOT NULL] … ] • [, PRIMARY KEY(列名 [, 列名] …)] • [, FOREIGN KEY (列名 [, 列名] …) • REFERENCES 表名(列名 [, 列名] …)] • [,CHECK (条件表达式)] ) • 注:句法中[ ]表示该成分是可选项。
举例 • 设教学数据库有三个关系: • STUDENT (sno, sname, ssex, sage, sdept) • COURSE (cno, cname, credit) • SC (sno, cno, grade) • 基本表STUDENT可用下列语句创建: • CREATE TABLE STUDENT ( • sno CHAR(4) NOT NULL, • sname CHAR (8) NOT NULL, • sage SMALLINT, • ssex CHAR(1), • sdept CHAR(30), • PRIMARY KEY(Sno)) ; 主键约束
CREATE TABLE COURSE ( • cno CHAR(4) PRIMARY KEY, • cname CHAR(50) NOT NULL, • credit SMALLINT • ) ; • CREATE TABLE SC ( • sno CHAR(4) NOT NULL, • cno CHAR(4) NOT NULL, • grade SMALLINT, • PRIMARY KEY(sno, cno), • FOREIGN KEY(sno) REFERENCES STUDENT(sno), • FOREIGN KEY(cno) REFERENCES COURSE(cno), • CHECK (grade>= 0) ) ; 外键约束 自定义约束
DROP TABLE语句 语法: • DROP TABLE表名 [CASCADE | RESTRICT] • 注: • 撤消基本表后,基本表的定义、表中的数据、表上的索引、以及由此表导出的视图的定义都被删除。 • 例: • DROP TABLESC ; • DROP TABLECOURSE; • DROP TABLESTUDENT;
数据查询语句 数据查询语句是SQL语言中最复杂的部分,允许用户以灵活的方式表达查询意图,并返回数据库中符合条件的数据。 语法: • SELECT目标表的列名或列表达式序列 • FROM基本表和(或)视图序列 • [WHERE行条件表达式] • [GROUP BY列名序列 • [HAVING组条件表达式] ] • [ORDER BY列名[ASC|DESC]…] • 注:SELECT语句中,WHERE子句称为行条件子句,GROUP子句称为分组子句,HAVING子句称为组条件子句,ORDER子句称为排序子句。
举例(简单查询) • 例1:查询全部学生的所有信息。 • SELECT * FROM STUDENT; • 例2:查询全部被选课程的课程号。 • SELECT DISTINCT cno FROM SC; • 例3:列出选修了课程号为‘C6’的所有学生的学号和成绩,并按分数的降序排列。 • SELECT sno, grade • FROM SC • WHERE cno='C6' • ORDER BY grade DESC;
表达查询条件的谓词 • 比较谓词:=,<,<=,>,>=,<> ; • 例:cno='C6' • IN谓词:适合于离散有穷集合的查询; • 例:性别 IN (’男’,’女’) • LIKE谓词:适合于字符串的模糊查询(匹配符%_) • 例:书名 LIKE ‘数据库%’ • NULL谓词:判断空值 • 例:成绩 IS NULL • BETWEEN谓词:适合数值型字段,可以定义一个闭区间; • 例:成绩 BETWEEN 80 AND 90 • ……
举例(使用谓词查询) • 例4:查询信息系(IS)、数学系(MA)以及计算机系(CS)学生的姓名和性别。 • SELECT sname, ssex • FROM STUDENT • WHERE sdept IN(‘IS’,’MA’,’CS’); • 例5:查询还没有分系的学生的学号和姓名。 • SELECT sno, sname • FROM STUDENT • WHERE sdept IS NULL; • 例6:查询所有姓王的学生的姓名、学号和性别。 • SELECT sname, sno, ssex • FROM STUDENT • WHERE sname LIKE ’王%’;
举例(使用谓词查询) • 例7:查询课程名以DB开头且倒数第3个字符为I的课程的所有信息。 • SELECT * • FROM COURSE • WHERE cname LIKE ’DB%I_ _’; • 例8:查询年龄在20到23岁之间的学生姓名、系别和年龄。 • SELECT sname,sdept,sage • FROM STUDENT • WHERE sage BETWEEN 20 AND 23;
集函数和分组 • 集函数是面向一个集合的求值函数。 • SUM:求总和 • AVG:求平均值 • COUNT:求集合中元素的个数 • MAX:最大值 • MIN:最小值 • 分组就是对查询的结果进行分类。 • GROUP子句可以按某些属性的值对查询结果进行分组。 • HAVING子句可以对分组后的结果作进一步的筛选。 • 当查询语句中有GROUP子句时,集函数作用的对象是一个分组的结果,而不是整个查询的结果。
举例(分组查询) • 例9:查询每门课程的课程号和平均成绩。 • SELECT cno, AVG(grade) • FROM SC • GROUP BY cno; • 例10:查询选修了三门以上课程的学生学号。 • SELECT sno • FROM SC • GROUP BY sno • HAVING COUNT(*)>3; • 注:WHERE子句与HAVING子句的区别在于WHERE子句作用于基本表或视图,从中选择满足条件的元组;HAVING短语作用于组,从中选择满足条件的组。
连接查询 • 当查询的信息涉及到多个表中的数据时,要将这些表按某种条件连接起来。 • 例10:求“数据结构”课程成绩大于85分的学生姓名和成绩,结果按成绩降序排列。 • SELECT STUDENT.sname,grade • FROM STUDENT,SC,COURSE • WHERE STUDENT.sno = SC.sno AND • SC.cno = COURSE.cno AND • COURSE.cname = '数据结构' AND • SC.grade > 85 • ORDER BY grade DESC; • 注:当不同的表中有同名属性时,属性名前要用表名限定。
数据操纵语句 • 数据操纵包括数据插入、数据删除和数据修改三种操作。 • 数据插入 • 元组值的插入 • 语法:INSERT INTO 基本表[(列表)] VALUES(元组值) • 作用:将一条元组值插入到表中。 • 例1:往基本表SC中插入一个元组值 • INSERT INTO SC VALUES(‘S004’,‘数据库’,90); • 例2:往基本表SC中插入部分元组值 • INSERT INTO SC(sno, cno) VALUES(‘S004’,‘物理’); • 查询结果的插入 • 句法: INSERT INTO 基本表名[(列名表)]子查询 • 作用:将子查询返回的结果数据集插入到表中。 • 要求:查询语句的目标列必须与INTO子句匹配。
例3:将平均成绩大于80分的学生学号和平均成绩存入另一个基本表S_GRADE(Sno, Avg_grade)。 • INSERT INTO S_GRADE (Sno, Avg_grade) • SELECT Sno, AVG(grade) • FROM SC • GROUP BY sno • HAVING AVG(grade)>80; • 数据删除 • 语法:DELETE FROM 基本表 [WHERE 条件表达式] • 作用:从表中删除符合WHERE子句中删除条件的元组;若WHERE子句缺省,则表示要删除表中的所有元组。 • 例4:删除学号为‘S001’的学生信息。 • DELETE FROM STUDENT WHERE sno=‘S001’;
数据修改 • 语法: • UPDATE基本表名 • SET列名=值表达式 [,列名=值表达式…] • [WHERE条件表达式] • 作用:修改指定表中满足WHERE子句条件的元组,若WHERE子句缺省,则表示对所有元组进行修改。 • 例5:把所有学生的年龄加1。 • UPDATE STUDENT SET Sage = Sage+1; • 例6:把课程号为‘C5’的课程名改为“电子商务”。 • UPDATE COURSE • SET Cname='电子商务' • WHERE Cno = 'C5';
视 图 • 视图是从一个或几个基本表(或视图)导出的一个虚表。 • 数据库中只存放视图的定义而不存放视图的数据,这些数据仍放在原来的基表中。当基表中的数据发生变化时从视图中查出的数据也随之改变了。 • 视图一经定义就可以对其进行查询,但对视图的更新操作有一定的限制。 • 视图的定义 • 语法: • CREATE VIEW视图名 [(列名[,列名]…)] • AS子查询 • [WITH CHECK OPTION]
例1:建立计算机学院98级学生视图。 • CREATE VIEW CS_STUDENT(sno, sname) AS • SELECT sno, sname • FROM STUDENT • WHERE sdept = ‘CS’ • WITH CHECK OPTION; • 例2:建立计算机学院选修了5号课程的学生视图。 • CREATE VIEW CS_S1(sno,sname,grade) AS • SELECT STUDENT.sno,sname,grade • FROM STUDENT, SC • WHERE sdept=’CS’ AND • STUDENT.sno=SC.sno AND cno=’5’;
视图的查询 • 对视图的查询与对表的查询完全一样。 • 例如:在计算机学院学生的视图CS_S1中找学习了5号课程且成绩为95分的学号、姓名。 • SELECT sno, sname • FROM CS_S2 • WHERE grade=95; • 视图的撤消 • 语法: • DROP VIEW视图名 • 作用:从数据库中删除一个视图的定义信息。 • 例如:撤消视图CS_S1。 • DROP VIEW CS_S1;
小 结 数据库技术是一门用于数据处理的综合性软件技术。 数据库方法的特点:数据统一管理,数据共享,可控冗余,数据独立性,数据完整性,数据一致性,数据安全性 数据库系统的组成:数据库,软件,硬件,用户 DBMS的主要功能:DDL,DML,数据库运行管理,数据库建立和维护 数据库系统的体系结构:三级模式(模式,内模式,外模式)+二级映像(如何保证数据独立性) 数据模型:E-R模型(实体和三类联系),三种经典数据模型(层次模型,网状模型,关系模型) SQL语言:数据定义、数据查询及数据操纵语句的使用 本章结束