1 / 23

计算机软件技术基础

计算机软件技术基础. 数据库系统( 3 ). 4.3 关系数据库语言 SQL. 关系数据库 SQL ( Structured Query Language )语言是关系数据库的 标准语言 ,对关系模型的发展和商用 DBMS 的研制起着重要的作用。. SQL 发展历史 1986 年 10 月, ANSI 批准 SQL 作为关系数据库语言的美国标准,并公布了 SQL 的标准文本 ——“ 数据库语言 SQL” (简称 SQL86 ), 1987 国际标准化组织 ISO 通过了这一标准; 1989 年公布了 SQL89 标准,增加了对完整性约束的支持;

nellis
Download Presentation

计算机软件技术基础

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 计算机软件技术基础 数据库系统(3)

  2. 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标准文本的修改和完善还在继续进行……

  3. SQL语言的特点 • 一体化语言:集成 DDL、DML、DCL于一体,共有8个语句:SELECT、CREATE、ALTER、DROP、INSERT、DELETE、UPDATE、GRANT、REVOKE。 • 两种使用方法,统一语法结构:自含式,嵌入式。 • 高度非过程化:Do what? Not how to do? • 接近自然语言:语法简洁,易学、易用。 • 面向集合的操作方式:一次一集合。

  4. 数据定义语句 • 数据定义语句定义数据库的模式,包括对基本表(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

  5. CREATE TABLE语句 语法: • CREATE TABLE表名( • 列名 数据类型 [DEFAULT缺省值] [NOT NULL] • [, 列名 数据类型 [DEFAULT 缺省值] [NOT NULL] … ] • [, PRIMARY KEY(列名 [, 列名] …)] • [, FOREIGN KEY (列名 [, 列名] …) • REFERENCES 表名(列名 [, 列名] …)] • [,CHECK (条件表达式)] ) • 注:句法中[ ]表示该成分是可选项。

  6. 举例 • 设教学数据库有三个关系: • 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)) ; 主键约束

  7. 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) ) ; 外键约束 自定义约束

  8. DROP TABLE语句 语法: • DROP TABLE表名 [CASCADE | RESTRICT] • 注: • 撤消基本表后,基本表的定义、表中的数据、表上的索引、以及由此表导出的视图的定义都被删除。 • 例: • DROP TABLESC ; • DROP TABLECOURSE; • DROP TABLESTUDENT;

  9. 数据查询语句 数据查询语句是SQL语言中最复杂的部分,允许用户以灵活的方式表达查询意图,并返回数据库中符合条件的数据。 语法: • SELECT目标表的列名或列表达式序列 • FROM基本表和(或)视图序列 • [WHERE行条件表达式] • [GROUP BY列名序列 • [HAVING组条件表达式] ] • [ORDER BY列名[ASC|DESC]…] • 注:SELECT语句中,WHERE子句称为行条件子句,GROUP子句称为分组子句,HAVING子句称为组条件子句,ORDER子句称为排序子句。

  10. 举例(简单查询) • 例1:查询全部学生的所有信息。 • SELECT * FROM STUDENT; • 例2:查询全部被选课程的课程号。 • SELECT DISTINCT cno FROM SC; • 例3:列出选修了课程号为‘C6’的所有学生的学号和成绩,并按分数的降序排列。 • SELECT sno, grade • FROM SC • WHERE cno='C6' • ORDER BY grade DESC;

  11. 表达查询条件的谓词 • 比较谓词:=,<,<=,>,>=,<> ;  • 例:cno='C6' • IN谓词:适合于离散有穷集合的查询; • 例:性别 IN (’男’,’女’) • LIKE谓词:适合于字符串的模糊查询(匹配符%_) • 例:书名 LIKE ‘数据库%’ • NULL谓词:判断空值 • 例:成绩 IS NULL • BETWEEN谓词:适合数值型字段,可以定义一个闭区间; • 例:成绩 BETWEEN 80 AND 90 • ……

  12. 举例(使用谓词查询) • 例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 ’王%’;

  13. 举例(使用谓词查询) • 例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;

  14. 集函数和分组 • 集函数是面向一个集合的求值函数。 • SUM:求总和 • AVG:求平均值 • COUNT:求集合中元素的个数 • MAX:最大值 • MIN:最小值 • 分组就是对查询的结果进行分类。 • GROUP子句可以按某些属性的值对查询结果进行分组。 • HAVING子句可以对分组后的结果作进一步的筛选。 • 当查询语句中有GROUP子句时,集函数作用的对象是一个分组的结果,而不是整个查询的结果。

  15. 举例(分组查询) • 例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短语作用于组,从中选择满足条件的组。

  16. 连接查询 • 当查询的信息涉及到多个表中的数据时,要将这些表按某种条件连接起来。 • 例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; • 注:当不同的表中有同名属性时,属性名前要用表名限定。

  17. 数据操纵语句 • 数据操纵包括数据插入、数据删除和数据修改三种操作。 • 数据插入 • 元组值的插入 • 语法:INSERT INTO 基本表[(列表)] VALUES(元组值) • 作用:将一条元组值插入到表中。 • 例1:往基本表SC中插入一个元组值 • INSERT INTO SC VALUES(‘S004’,‘数据库’,90); • 例2:往基本表SC中插入部分元组值 • INSERT INTO SC(sno, cno) VALUES(‘S004’,‘物理’); • 查询结果的插入 • 句法: INSERT INTO 基本表名[(列名表)]子查询 • 作用:将子查询返回的结果数据集插入到表中。 • 要求:查询语句的目标列必须与INTO子句匹配。

  18. 例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’;

  19. 数据修改 • 语法: • UPDATE基本表名 • SET列名=值表达式 [,列名=值表达式…]   • [WHERE条件表达式] • 作用:修改指定表中满足WHERE子句条件的元组,若WHERE子句缺省,则表示对所有元组进行修改。 • 例5:把所有学生的年龄加1。 • UPDATE STUDENT SET Sage = Sage+1; • 例6:把课程号为‘C5’的课程名改为“电子商务”。 • UPDATE COURSE   • SET Cname='电子商务'   • WHERE Cno = 'C5';

  20. 视 图 • 视图是从一个或几个基本表(或视图)导出的一个虚表。 • 数据库中只存放视图的定义而不存放视图的数据,这些数据仍放在原来的基表中。当基表中的数据发生变化时从视图中查出的数据也随之改变了。 • 视图一经定义就可以对其进行查询,但对视图的更新操作有一定的限制。 • 视图的定义 • 语法: • CREATE VIEW视图名 [(列名[,列名]…)] • AS子查询 • [WITH CHECK OPTION]

  21. 例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’;

  22. 视图的查询 • 对视图的查询与对表的查询完全一样。 • 例如:在计算机学院学生的视图CS_S1中找学习了5号课程且成绩为95分的学号、姓名。 • SELECT sno, sname • FROM CS_S2 • WHERE grade=95; • 视图的撤消 • 语法: • DROP VIEW视图名 • 作用:从数据库中删除一个视图的定义信息。 • 例如:撤消视图CS_S1。 • DROP VIEW CS_S1;

  23. 小 结 数据库技术是一门用于数据处理的综合性软件技术。 数据库方法的特点:数据统一管理,数据共享,可控冗余,数据独立性,数据完整性,数据一致性,数据安全性 数据库系统的组成:数据库,软件,硬件,用户 DBMS的主要功能:DDL,DML,数据库运行管理,数据库建立和维护 数据库系统的体系结构:三级模式(模式,内模式,外模式)+二级映像(如何保证数据独立性) 数据模型:E-R模型(实体和三类联系),三种经典数据模型(层次模型,网状模型,关系模型) SQL语言:数据定义、数据查询及数据操纵语句的使用 本章结束

More Related