1 / 127

数据库系统概论

数据库系统概论. SQL 语言. SQL 概述. SQL—Structured Query Language SQL 的功能:数据定义、操纵和控制。 SQL 的特点 综合统一 高度非过程化 面向集合的操作方式 两种使用方式 语言简捷,易学易用 SQL 语言支持关系数据库三级模式结构. 3.1 SQL 语言基本知识 3.1.1 SQL 的发展史

jimbo
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. 数据库系统概论 SQL语言 数据库系统概论

  2. SQL概述 • SQL—Structured Query Language • SQL的功能:数据定义、操纵和控制。 • SQL的特点 • 综合统一 • 高度非过程化 • 面向集合的操作方式 • 两种使用方式 • 语言简捷,易学易用 • SQL语言支持关系数据库三级模式结构 数据库系统概论

  3. 3.1 SQL语言基本知识 • 3.1.1 SQL的发展史 • 1974年IBM圣约瑟实验室的Boyce和Chamberlin为关系数据库管理系统System-R设计的一种查询语言,当时称为SEQUEL语言(Structured English Query Language),后简称为SQL。 • 1981年IBM推出关系数据库系统SQL/DS后,SQL得到了广泛应用。 • 1986年美国国家标准协会(ANSI)公布了第一个SQL标准-SQL86。 • 1987年,ISO通过SQL86标准。 数据库系统概论

  4. 1989年,ISO制定SQL89标准,SQL89标准在SQL86基础上增补了完整性描述。1989年,ISO制定SQL89标准,SQL89标准在SQL86基础上增补了完整性描述。 • 1990年,我国制定等同SQL89的国家标准。 • 1992年,ISO制定SQL92标准,即SQL2。 • 1999年,ANSI制定SQL3标准。 • 在许多软件产品中,软件厂商都对SQL的基本命令集进行了扩充,将其扩展成嵌入式SQL语言。SQL Server 2000中使用Transact-SQL语言与数据库服务器打交道。 数据库系统概论

  5. 3.1.2 SQL的特点 • SQL具有如下特点: • 1.SQL(Structured Query Language)全称是结构化查询语言,是一种关系数据库语言,提供数据的定义、查询、更新和控制等功能。功能强大、能够完成各种数据库操作。 • 2.SQL语言不是一个应用程序开发语言,它只提供对数据库的操作能力,不能完成屏幕控制、菜单管理、报表生成等功能。 • 3.有利于各种数据库之间交换数据、有利于程序的移植、有利于实现程序和数据间的独立性;有利于实施标准化; • 4.书写简单、易学易用。 数据库系统概论

  6. 3.1.3 SQL的分类 • 1、数据定义语言(DDL:Data Definition Language) • 创建、修改或删除数据库中各种对象,包括表、视图、索引等。 • 2、查询语言(QL:Query Language) • 按照指定的组合、条件表达式或排序检索已存在的数据库中的数据,但并不改变数据库中数据。 • 3、数据操纵语言(DML:Data Manipulation Language ) • 对已经存在的数据库进行记录的插入、删除、修改等操作 数据库系统概论

  7. 4、数据控制语言(DCL:Data Control Language) • 用来授予或收回访问数据库的某种特权、控制数据操纵事务的发生时间及效果、对数据库进行监视 • 注意:在书写各种SQL 命令时,命令中所涉及的标点符号,如括号、逗号、分号、圆点(英文句号)等都应是英文半角,如果写成中文全角符号,则会在执行命令时出错。 数据库系统概论

  8. SQL Server 2000中常用的数据类型: • Bigint,Int,smallint,tinyint:整数,int范围-2147483648-2147483647。Smallint范围-32768-32767(2字节) Tinyint范围0-255 • Decimal或numeric:数字数据类型,格式Decimal(数据长度,小数位数) • datetime:代表日期和一天内的时间的日期和时间数据类型。(8个字节)从1753年1月1日到9999年12月31日的日期和时间数据,如:1998-01-01 23:59:59.993 数据库系统概论

  9. Char,vchar,text: • 固定长度字符数据类型:格式:char[(n)] • n 必须是一个介于1 和8,000 之间的数值,当使用字符型数据时需要用’或”括起来。 • 当指定列中各项的字符长度数时可用varchar,不能超过8kb. • Text数据类型的列可用于存储大于8kb的字符。 数据库系统概论

  10. 数据定义—定义基本表(1) • CREATE TABLE<表名> (<列名><数据类型> [列级完整性约束条件] [,<列名><数据类型> [列级完整性约束条件)]]… [,<表级完整性约束条件>]); FOREIGN KEY[<外键名>] (<列名表>); REFERENCES <表名2> [ON DELETE {RESTRICT|CASCADE|SET NULL}] 数据库系统概论

  11. 注:列级约束条件有两个任选项: • NOT NULL,表示此列不得置NULL,在其后还可加UNIQUE任选项,表示列值不得重复。 • DEFAULT,当此列的值空缺时,填以缺省值。 数据库系统概论

  12. 数据定义—定义基本表(2) • 表级约束: • 定义基表时可以定义一个主键和多个外键,关键字REFERENCES定义外键来自的表名,即主表名。 • 可以加参照完整性任选项 ON DELETE,即当主表中被引用的主键删除时,提供三种处理办法: • RESTRICT:凡被基表引用的主键,不得删除 • CASCADE:如主表中删除某一主键,则加此选项的基表中引用此主键的列也随之被删除。 • SET NULL • 还可加CHECK子句,说明各列的值应满足的限制条件,如年龄不得为负等。 数据库系统概论

  13. 定义基本表(3) • CREATE TABLE student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20) UNIQUE, Ssex CHAR(1), Sage INT, Sdept CHAR(15), Height DEC(5,2) DEFAULT(000.00); 数据库系统概论

  14. 定义基本表(4) • CREATE TABLE SC (Sno CHAR(5) NOT NULL UNIQUE, Cno CHAR(6) NOT NULL UNIQUE, GRADE DEC(4,1) DEFAULT NULL, PRIMARY KEY (Sno,Cno ), FOREIGN KEY (Sno) REFERENCES student ON DELETE CASCADE, FOREIGN KEY (Cno) REFERENCES course ON DELETE RESTRICT); 数据库系统概论

  15. 修改基本表(1) • ALTER TABLE <表名> [ADD<新列名><数据类型>[完整性约束]] [DROP<完整性约束名>] [MODIFY<列名><数据类型>]; • ADD用于增加新列和新的完整性约束条件,新增加的列一律为空值。 • DROP用于删除指定的完整性约束条件 • MODIFY用于修改原有的列定义 数据库系统概论

  16. 修改基本表(2) • 向student表增加“入学时间”列,类型日期型。 ALTER TABLE student ADD Scome DATE; • 将年龄的数据类型改为半字长整数 ALTER TABLE student MODIFY Sage SMALLINT; • 删除学生姓名必须取唯一值的约束 ALTER TABLE student DROP UNIQUE(Sname) 数据库系统概论

  17. 修改基本表(3) • 修改基本表时,新增加的字段不能指定为 NOT NULL。 • SQL未提供删除列的命令,若要删除列,只有另定义一个新表,并将原表中保留列的内容复制到新表中,然后删除原表,再将新表改名为原表名。 • 系统约定:新增加的列自动排在基表内字段序列的尾部,不允许改变原表中的字段顺序。 数据库系统概论

  18. 删除基本表 • DROP TABLE <表名> • 删除student表 DROP TABLE student • 过程: • 从数据字典中抹去该基本表 • 从数据字典中抹去建立在该表上的全部视图和索引的描述 • 删除全部元组,释放相应的基本表的存储空间。 数据库系统概论

  19. 补充和撤销主键定义 • 补充定义主键 ALTER TABLE <表名> ADD PRIMARY KEY (<列名表>); • 撤销主键定义 ALTER TABLE <表名> DROP PRIMARY KEY; 数据库系统概论

  20. 补充和撤销外键定义 • 补充外键定义 ALTER TABLE <表名1> ADD FOREIGN KEY[<外键名>] (<列名表>); REFERENCES <表名2> [ON DELETE {RESTRICT|CASCADE|SET NULL}]; • 撤销外键定义 ALTER TABLE <表名> DROP <外键名>; 数据库系统概论

  21. 定义和撤销别名 • 别名(alias)的作用: • 书写和输入比较方便 • 可使各用户保留自己习惯的命名 • 别名的定义和撤销语句格式如下: CREATE SYNONYM <标识符> FOR <表创建者>.{<表名>|<视图名>}; DROP SYNONYM<标识符>; 数据库系统概论

  22. 建立索引(1) • CREATE [UNIQUE][CLUSTER] INDEX<索引名> ON<表名>(<列名>[<次序>] [,<列名>[<次序>]]…); • UNIQUE用于建立唯一索引,即每一个索引值只对应唯一的数据记录。 create unique index sname on student (sname) • 排列次序可选ASC或DESC,缺省为ASC。 create unique index sname on student (sname desc) 数据库系统概论

  23. 建立索引(2) • CLUSTER表示要建立的索引是聚簇索引。聚簇索引指索引项的顺序与记录的物理顺序一致的索引。 create cluster index sname on student (sname) • 同一个基本表可以建立多个唯一索引,但只能建立一个聚簇索引。 数据库系统概论

  24. 删除索引 • DROP INDEX <索引名> • 删除 student表中的stusname索引。 DROP INDEX stusname • 作用:从数据字典中删去对该索引的描述。 数据库系统概论

  25. 查询(1) • SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>]… FROM<表名或视图名>,[<表名或视图名>]… [WHERE<条件表达式>] [GROUP BY <列名1>[HAVING<条件表达式>]] [ORDER BY<列名2>[ASC|DESC]]; 数据库系统概论

  26. 查询(2) • SELECT指明需要查询的项目,一般是列名,也可以是表达式,查询表中未存储但可导出的结果。 • WHERE用来说明查询的条件 • DISTINCT任选项用来消除查询结果的重复项 • GROUP用来将结果按列名1的值进行分组,该属性列值相等的元组为一组 • ORDER将结果表按列名2的值升序或降序排序 数据库系统概论

  27. 单表查询—投影(1) • 查询指定列 • 查询全体学生的学号与姓名 SELECT Sno,Sname FROM student; • 查询全部列 • 查询全体学生的详细记录 SELECT * FROM student; • 给列起标题(别名) SELECT Sname 姓名, 2003-Sage 出生年份 FROM student; 数据库系统概论

  28. 单表查询—投影(2) • 查询经过计算的值 • 查询全体学生的姓名及出生年份 SELECT Sname,2003-Sage FROM student; • 加入常数列 SELECT Sname, “出生年份”, 2003-Sage FROM student; • 求学生姓名中出现的姓氏 SELECT LEFT(Sname , 2) FROM student; 数据库系统概论

  29. 单表查询—投影(3) • 注: • 目标列表达式中各列的顺序可与原表中列的顺序不一致。 • 目标表达式可以是表中的字段,或由字段组成的表达式或常量。 数据库系统概论

  30. 单表查询—选择(1) • 消除重复行 • 查询选修了课程的学生学号,要求消除重复行 SELECT DISTINCT Sno FROM SC; • 如未使用DISTINCT,缺省为ALL,即保留结果中的重复行。 数据库系统概论

  31. 单表查询—选择(2) • 查询满足条件的元组(where 子句) (1)比较大小 • 查询计算机系全体学生的名单 SELECT Sname FROM student where Sdept=“IS”; • 查询年龄不大于20岁的学生姓名和年龄 SELECT Sname ,Sage FROM student where Sage<=20; 数据库系统概论

  32. 单表查询—选择(3) (2) 确定范围(BETWEEN…AND) • 求年龄在20-23岁(包括20和23 )之间的学生姓名 SELECT Sname FROM student where Sage BETWEEN 20 AND 23; • 求年龄不在20-23岁(包括20和23 )之间的学生姓名 SELECT Sname FROM student where Sage NOT BETWEEN 20 AND 23; 数据库系统概论

  33. 单表查询—选择(4) (3)确定集合(IN, NOT IN) • 求信息系、数学系和计算机系的学生的姓名 SELECT Sname FROM student where Sdept IN (‘IS’ , ‘MA’ , ‘CS’); • 求不是信息系、数学系和计算机系的学生姓名 SELECT Sname FROM student where Sdept NOT IN (‘IS’ , ‘MA’ , ‘CS’); 数据库系统概论

  34. 单表查询—选择(5) (4)字符匹配(LIKE , NOT LIKE) • [NOT] LIKE ‘<匹配串>’[ESCAPE‘<换码字符>’] • 可适用通配符 %和 -。 • %:代表任意长度(长度可以为0)的字符串。a% • _:代表任意单个字符. a_ 数据库系统概论

  35. 单表查询—选择(6) • 求学号为95001的学生的详细情况 SELECT * FROM student where Sno LIKE ‘95001’; • 求所有姓王的学生的姓名、性别 SELECT Sname,Ssex FROM student where Sname LIKE ‘王%’; • 查询名字中第二个字为“阳”的学生的姓名和学号 SELECT Sname,Sno FROM student where Sname LIKE ‘_ _阳%’; 数据库系统概论

  36. 单表查询—选择(7) • 查询DB_Design 课程的课程号和学分 SELECT Cno , Credit FROM course where Cname LIKE ‘DB\ _Design’ ESCAPE ‘\’; • 查询DB_开头且倒数第三个字符为i的课程号 SELECT Cno FROM course where Cname LIKE ‘DB\ _%i_ _’ ESCAPE ‘\’; • 查询前四个字符为DB%%的课程号和学分 SELECT Cno , Credit FROM course where Cname LIKE ‘DB\%\% %’ ESCAPE ‘\’; 数据库系统概论

  37. 单表查询—选择(8) (5)涉及空值的查询 • 查询缺少成绩的学生的学号和相应的课程号 SELECT Sno,Cno FROM SC where Grade IS NULL; • 查询所有有成绩的学生的学号和相应的课程号 SELECT Sno,Cno FROM SC where Grade IS NOT NULL; 数据库系统概论

  38. 单表查询—选择(9) (6)多重条件查询 • 查询计算机系年龄在20岁以下的学生的姓名。 SELECT Sname FROM student where Sdept=‘CS’ AND Sage<20; 数据库系统概论

  39. 单表查询—对查询结果排序 • 查询选修3号课程的学生学号和成绩,按分数降序 SELECT Sname,Grade FROM SC where Cno=‘3’ ORDER BY Grade DESC; • 查询全体学生情况,按性别升序,同性别再按年龄降序 • 注:对于空值,若按升序排,含空值的元组最后显示;若按降序排,含空值的元组将最先显示。 数据库系统概论

  40. 单表查询—使用集函数(1) (1) COUNT([DISTINCT|ALL]*) (2) COUNT([DISTINCT|ALL]<列名>) (3) SUM([DISTINCT|ALL]<列名>) (4) AVG([DISTINCT|ALL]<列名>) (5) MAX([DISTINCT|ALL]<列名>) (6) MIN([DISTINCT|ALL]<列名>) • 注:DISTINCT用来计算时取消指定列中的重复值。 数据库系统概论

  41. 单表查询—使用集函数(2) • 查询学生的总人数 SELECT COUNT(*) FROM student; • 查询选修了课程的学生人数 SELECT COUNT(DISTINCT Sno) FROM SC ; • 查询95001同学的平均成绩 SELECT AVG(Grade) FROM SC WHERE Sno=‘95001’; 数据库系统概论

  42. 单表查询—查询结果分组 • 目的:细化集函数的作用对象 • 求各个课程号及相应的选课人数 SELECT Cno,COUNT( Sno) FROM SC GROUP BY Cno; • 查询选修了3门以上课程的学生学号 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)>3; • WHERE作用于基表或视图,HAVING作用于组。 数据库系统概论

  43. 连接查询 • 当查询涉及两个以上的表,称为连接查询。 • 连接查询包括:等值连接、自然连接、非等值连接、自身连接、外连接和复合条件连接查询 • 一般格式: [<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2> • 比较运算符:=、!=、>=、<=、 >、< • 连接谓词:BETWEEN 、AND 数据库系统概论

  44. 连接查询—等值连接 • 查询每个学生及其选修课程的情况 SELECT student.* , SC.* FROM student , SC WHERE student.Sno= SC.Sno; • 自然连接 SELECTstudent.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM student , SC WHERE student.Sno= SC.Sno; 数据库系统概论

  45. 连接查询—自身连接 • 一个表及其自己进行连接,称为自身连接 • 查询每一门课的间接先修课 SELECT FIRST.Cno, SECOND.Cpno FROM course FIRST, course SECOND WHERE FIRST. Cpno = SECOND. Cno; 数据库系统概论

  46. 连接查询—外连接 • 外连接与连接的区别是:保留非匹配元组。 • 查询每个学生的基本情况及其选课情况,如无选课,只输出基本情况。 SELECTstudent.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM student , SC WHERE student.Sno= SC.Sno(*); • *出现在左边,保留右关系的元组,即左外连接;*出现在右边,保留左关系的元组,即右外连接。 数据库系统概论

  47. 连接查询—复合条件连接 • 当有多个连接条件,称为复合连接查询。 • 查询选修2号课程且成绩高于90的所有学生姓名。 SELECT student.Sno , Sname FROM student , SC WHERE student.Sno= SC.Sno AND SC.Cno=‘2’ AND SC.Grade>=90; 数据库系统概论

  48. 连接查询—多表连接 • 多表连接:一个表和两个以上的表进行连接 • 查询每个学生的学号、姓名、选修课程名和成绩。 SELECT student.Sno , Sname , Cname , Grade FROM student , SC , course WHERE student.Sno= SC.Sno AND SC.Cno=course.Cno; 数据库系统概论

  49. 嵌套查询 • 查询与‘刘晨’在同一个系学习的学生姓名。 • 注: • 子查询中的SELECT语句中不能使用ORDER BY。 • 子查询还可以嵌套子查询 • 求解方法:由里向外处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。 • 子查询的查询条件不依赖于父查询,称为不相关子查询。 数据库系统概论

  50. 嵌套查询—使用谓词IN • 查询与‘刘晨’在同一个系学习的学生姓名。 SELECT Sname FROM student WHERE Sdept IN (SELECT Sdept FROM student WHERE Sname=‘刘晨’ ); • 查询选修“信息系统”的学生学号和姓名 SELECT Sno , Sname FROM student WHERE Sno IN(SELECT Sno FROM SC WHERE Cno IN(SELECT Cno FROM course WHERE Cname=‘信息系统’)); 数据库系统概论

More Related