数据库原理与应用chp3SQL语言.ppt
《数据库原理与应用chp3SQL语言.ppt》由会员分享,可在线阅读,更多相关《数据库原理与应用chp3SQL语言.ppt(145页珍藏版)》请在三一办公上搜索。
1、数据库原理与应用,刘伟法()常熟理工学院计算机学院,第3章 SQL语言关系数据库标准语言,SQL概述SQL的基本数据类型SQL的数据定义(create,alter,drop)SQL的数据操纵(insert,update,delete)SQL的数据查询(select)SQL的数据控制(grant,revoke),2.1 SQL概述,1、SQL语言标准的发展历程 SQL-86SQL-89SQL-92(SQL1)SQL-99(SQL2)SQL-2003(SQL3),2、SQL的特点 一体化(功能强大)数据查询、数据操纵、数据定义、数据控制于一体,风格统一 高度非过程化 只需提出做什么,无需指明怎么做
2、 面向集合的操作方式 能以多种方式使用 既可以独立使用,也可以嵌入到其他高级语言简洁(语法简单):9个动词,类似英语语句,2.1 SQL概述(续),2.1 SQL概述(续),3、SQL语言基本概念 基本表 独立存在的表,一个关系对应一个基本表。视图 虚表。是从一个或几个基本表导出的表。视图中存放的仅仅是定义,而不是数据,数据仍在基本表中。索引 加速查询的速度而提供的数据结构,2.2 SQL Server的数据类型,1、数值型int4个字节smallint2个字节tinyint1个字节numeric小数decimal小数float浮点数,2.2 SQL Server的数据类型(续),2、字符串型
3、char固定长度(1-8000)varchar可变长度(1-8000)text可存储231-1个字符的文本image可存储多种格式的文件,2.2 SQL Server的数据类型(续),3、日期时间型datetime8个字节(毫秒)smalldatetime4个字节(分钟)4、货币型money8个字节smallmoney4个字节,学生课程数据库,学生表:Student(Sno,Sname,Ssex,Sage,Sdept),学生课程数据库,课程表:Course(Cno,Cname,Cpno,Credit),学生课程数据库,选课表:SC(Sno,Cno,Grade),2.3 数据定义,2.3 数据定
4、义(续),1、数据库的定义与删除 数据库定义 CREATE DATABASE database_name 创建一个数据库及存储该数据库的文件。每个数据库至少包括两个文件:主数据文件和事务日志文件。,2.3 数据定义(续),1、数据库的定义与修改与删除 数据库修改 ALTER DATABASE database_name。修改数据库。数据库删除 DROP DATABASE database_name 删除数据库所有文件及磁盘文件。,2、模式的定义与删除 模式定义 CREATE SCHEMA schema_name AUTHORIZATION owner 创建一个模式,并指明模式的所有者。可以在模
5、式中建立其他数据对象,如基本表,视图,索引等。,2.3 数据定义(续),2、模式的定义与删除 模式删除 DROP SCHEMA schema_name 删除模式。CASCADE表示级联删除,删除模式的同时删除模式下的数据库对象。RESTRICT拒绝删除已定义了数据库对象的模式。,2.3 数据定义(续),2.3 数据定义(续),3、基本表的定义、删除及修改 基本表定义 CREATE TABLE(列级约束,列级约束,表级完整性约束定义),CREATE TABLE Student(Sno char(7)PRIMARY KEY,Sname char(10)UNIQUE,Ssexchar(2)CHECK
6、(Ssex=男 or Ssex=女),Sagetinyint CHECK(Sage=15 and Sage=45),Sdept char(20)DEFAULT 计算机系),2.3 数据定义(续),CREATE TABLE Course(Cno char(4)PRIMARY KEY,Cname varchar(40)NOT NULL,Cpnochar(4),Ccredittinyint,FOREIGN KEY(Cpno)REFERENCES Course(Cno),2.3 数据定义(续),表级完整性约束条件,列Cpno中数据必须参照列Cno中的数据。,CREATE TABLE SC(Sno ch
7、ar(7),Cno char(4),Grade numeric(5,2),PRIMARY KEY(Sno,Cno),FOREIGN KEY(Cno)REFERENCES Course(Cno),FOREIGN KEY(Sno)REFERENCES Student(Sno),),2.3 数据定义(续),表级完整性约束条件,参照完整性规则,2.3 数据定义(续),表结构的修改修改列的定义ALTER TABLE 表名 ALTER COLUMN 如:修改Student的Sdept为40个字符宽度ALTER TABLE Student ALTER COLUMN Sdept char(40),增加新列AL
8、TER TABLE 表名 ADD 约束如:在Student中增加Address(家庭住址)列ALTER TABLE Student Add Address varchar(30),2.3 数据定义(续),2.3 数据定义(续),删除列ALTER TABLE 表名 DROP COLUMN 如:删除Student的Sage列ALTER TABLE Student DROP COLUMN Sage,添加约束ALTER TABLE 表名 ADD CONSTRAINT constraint_name 约束类型()如:在Student中增加Sno为主关键字ALTER TABLE Student Add P
9、RIMARY KEY(Sno)如:添加SC的Sno列的外码约束为Student的SnoALTER TABLE SC ADD FOREIGN KEY(Sno)REFRENCES Student(Sno),2.3 数据定义(续),约束名也可以省略,2.3 数据定义(续),例如:增加课程名必须惟一的约束条件ALTER TABLE CourseADD CONSTRAINT UnqCnameUNIQUE(Cname)例如:增加成绩约束,成绩在0100之间ALTER TABLE SCADD CONSTRAINT ChkGRADECHECK(Grade=0 AND Grade=100),2.3 数据定义(续
10、),删除约束ALTER TABLE 表名 DROP 约束名如:ALTER TABLE COURSE DROP UnqCname如:ALTER TABLE SC DROP ChkGRADE,2.3 数据定义(续),表的删除 DROP TABLE RESTRICT|CASCADE RESTRICT表示删除表时有限制,若表建立了与其他表的约束、触发器、视图等关系或对象,则不允许删除。CASCADE表示删除时将与该表相关的约束、视图等一起删除 如:删除表Student DROP TABLE Student,2.3 数据定义(续),4、索引的建立与删除 索引是加快查询效率的一种手段。索引是按照基本表中某
11、个(某些)属性列上的值进行排序,以提供多种查找途径。一个基本表可以建立一个或多个索引。,2.3 数据定义(续),4、索引的建立与删除 建立索引 CREATE UNIQUE CLUSTERED|NONCLUSTERED INDEX index_nameON table|view(column ASC|DESC,.n),2.3 数据定义(续),例如:(1)在Student表上建立按学号升序排列的索引 CREATE INDEX Sno_A ON Student(Sno)(2)在Course表的课程名建立惟一索引 CREATE UNIQUE Cname_U ON Course(Cname),2.3 数
12、据定义(续),例如:(3)在SC表上建立按学号升序,课程号降序排列的索引 CREATE INDEX SC_A ON SC(Sno,Cno DESC),2.3 数据定义(续),删除索引 DROP INDEX 表名.索引名例如:删除SC表上的SC_A索引 DROP INDEX SC.SC_A注意:索引由系统进行维护,当基本表中数据发生变化时,系统需要对根据数据重新维护索引,因此过多建立索引也会降低数据库的使用效率。,练习:用SQL语句定义下列基本表,CREATE TABLE class(CLASSNAME CHAR(20)PRIMARY KEY,MAXCREDIT SMALLINT,MINCRED
13、IT SMALLINT)CREATE TABLE student(STUDENTID CHAR(6)PRIMARY KEY,NAME CHAR(8),SEX CHAR(2),BIRTHDAY DATETIME,CLASSNAME,FOREIGN KEY(CLASSNAME)REFERENCES CLASS(CLASSNAME),练习:用SQL语句修改基本表的结构,1、在班级信息表(class)增加约束:最大学分限制大于最小学分限制,ALTER TABLE classADD CONSTRAINT check_cCHECK(MAXCREDITMINCREDIT),2、在学生信息表(student)
14、增加一个属性列:列名:SAGE 数据类型:整型,ALTER TABLE student ADD SAGE INT,3、在学生信息表(student)增加一个约束:SAGE必须介于1545之间,ALTER TABLE student ADD CONSTRAINT CHECK_SCHECK(SAGE=15 AND SAGE=45),2.4 数据查询功能,1、SELECT的基本结构SELECT FROMWHEREGROUP BYHAVINGORDER BY,2.4 数据查询功能(续),2、简单查询例1 查询全体学生的学号、姓名SELECT SNO,SNAME FROM STUDENT注意:输出列的顺
15、序可以与表中定义的列顺序不同。,2.4 数据查询功能(续),2、简单查询例2 查询全部列SELECT*FROM STUDENTSELECT*FROM COURSESELECT*FROM SC,2.4 数据查询功能(续),2、简单查询例3 查询全体学生的姓名和出生年份(需要进行计算的输出列)SELECT SNAME,2009-SAGE FROM STUDENT为输出列起个列名:SELECT SNAME,2009-SAGE AS BIRTH FROM STUDENT,计算出的出生年份,2.4 数据查询功能(续),2、简单查询例4 查询计算机系全体学生的姓名例5 查询年龄小于20岁的学生的姓名和年龄
16、,SELECT SNAME FROM STUDENT WHERE SDEPT=计算机系,SELECT SNAME,SAGE FROM STUDENTWHERE SAGE20,2.4 数据查询功能(续),2、简单查询例6 查询计算机系年龄小于20岁学生的姓名例7 查询年龄介于22岁到24岁的学生姓名和年龄,SELECT SNAME FROM STUDENT WHERE SDEPT=计算机系 AND SAGE20,SELECT SNAME,SAGE FROM STUDENTWHERE SAGE=22或:Between and 一般用于数值型的比较SELECT SNAME,SAGE FROM STU
17、DENTWHERE SAGE BETWEEN 22 AND 24,2.4 数据查询功能(续),2、简单查询例8 查询SC表中有哪些学生选修了课程。只需给出学号(消除重复值)例9 查询信息系、数学系和计算机系学生的姓名和性别。,SELECT DISTINCT SNO FROM SC,SELECT SNAME,SSEX FROM STUDENTWHERE SDEPT IN(信息系,数学系,计算机系),2.4 数据查询功能(续),2、简单查询例10 查询姓李的同学的基本信息。例11 查询姓李、张、刘的同学的信息。例12 查询不姓李、张、刘的同学的信息。,SELECT*FROM STUDENTWHER
18、E SNAME LIKE 李%,SELECT*FROM STUDENTWHERE SNAME LIKE 张李刘%,SELECT*FROM STUDENTWHERE SNAME LIKE 张李刘%,2.4 数据查询功能(续),2、简单查询例13 查询无考试成绩的学生的学号。例14 查询有考试成绩的学生的学号和成绩。,SELECT SNO FROM SCWHERE GRADE IS NULL,SELECT SNO FROM SCWHERE GRADE IS NOT NULL,2.4 数据查询功能(续),3、查询结果排序例15 将学生按年龄由小到大排序。例16 输出选修c02课程学生的成绩,按降序排
19、序。,SELECT*FROM STUDENTORDER BY SAGE,SELECT*FROM SCWHERE CNO=C02ORDER BY GRADE DESC,2.4 数据查询功能(续),4、使用集合函数统计查询例17 统计学生的总人数。例18 统计选修了课程的学生的人数。,SELECT COUNT(*)FROM STUDENT,SELECT COUNT(DISTINCT SNO)FROM SC,2.4 数据查询功能(续),4、使用集合函数统计查询例19 计算学号为200215121学生的考试成绩总和。例20 计算c01课程的考试平均成绩。,SELECT SUM(GRADE)FROM S
20、CWHERE SNO=200215121,SELECT AVG(GRADE)FROM SCWHERE CNO=C01,2.4 数据查询功能(续),4、使用集合函数统计查询例21 查询最大的学生年龄。例22,SELECT MAX(SAGE)FROM STUDENT,2.4 数据查询功能(续),5、分组查询 分组查询是根据某个列或某些列的值将记录分组,分组后,聚集函数对每组数据都进行计算,从而获得各组的统计结果。,2.4 数据查询功能(续),5、分组查询例23 统计每门课程的选课人数。例24 查询每名学生的选课门数和平均成绩。,SELECT CNO,COUNT(*)FROM SCGROUP BY
21、CNO,SELECT SNO,COUNT(*),AVG(GRADE)FROM SC GROUP BY SNO,2.4 数据查询功能(续),5、分组查询(对分组结果进行筛选)例25 查询选修了3门以上课程的学生的学号。例26 查询选课门数大于或等于4门的学生的平均成绩和选课门数。,SELECT SNO FROM SCGROUP BY SNOHAVING COUNT(*)3,SELECT SNO,COUNT(*),AVG(GRADE)FROM SC GROUP BY SNOHAVING COUNT(*)=4,Colledge数据库介绍:关系图及字段描述,学号 课程代号 成绩 任课教师工号,练习:1
22、、查询工号为E0002的教师所承担课程的课程号。2、查询课程代号为1301的成绩不及格的学生学号和成绩。,cj$,SELECT XH,CJ FROM cj$WHERE KCDH=1301 AND CJ60,SELECT DISTINCT KCDH FROM cj$WHERE GH=E0002,学号 课程代号 成绩 任课教师工号,练习:3、查询学号为99050101的学生的各门课成绩。4、查询99级学生的成绩情况。,cj$,SELECT KCDH,CJ FROM cj$WHERE XH=99050101,SELECT*FROM cj$WHERE XH LIKE 99%,学号 课程代号 成绩 任课
23、教师工号,练习:5、查询成绩为空值的记录。6、查询选课的学生总数。,cj$,SELECT*FROM cj$WHERE CJ IS NULL,SELECT COUNT(DISTINCT XH)FROM cj$,学号 课程代号 成绩 任课教师工号,练习:7、查询每个学生的选课及格门数和及格课程的平均分(按成绩从高到低排序)。,cj$,SELECT XH,COUNT(*),AVG(CJ)FROM cj$WHERE CJ=60GROUP BY XH ORDER BY 3 DESC,学号 课程代号 成绩 任课教师工号,练习:8、查询选修通过门数超过3门,且平均分在70以上的学生的学号,选修门数,平均成绩
24、。(按成绩从高到低排序)。,SELECT XH,COUNT(*),AVG(CJ)FROM cj$WHERE CJ=60GROUP BY XH HAVING COUNT(*)3 AND AVG(CJ)=70ORDER BY 3 DESC,若查询的字符串中本来就含有统配符%或_,可以使用ESCAPE对统配符进行转义。例如:查询课程名DB_DESIGN开头的课程号与学分,2.4 数据查询功能(续),SELECT CNO,cCREDITFROM COURSEWHERE CNAME LIKE DB_DESIGN%ESCAPE,2.4 数据查询功能(续),6、连接查询若在一个查询请求中,涉及到多个表中的数
25、据,则需要进行连接查询。按连接方式分:内连接 INNER JOIN 左外连接 LEFT JOIN 右外连接 RIGHT JOIN 全连接FULL JOIN,2.4 数据查询功能(续),6、连接查询 内连接 INNER JOIN 例27 查询每个学生的基本信息及其选课情况。,SELECT STUDENT.SNO,SNAME,SSEX,SAGE,SDEPT,CNO,GRADEFROM STUDENT INNER JOIN SC ON STUDENT.SNO=SC.SNO,2.4 数据查询功能(续),6、连接查询例27 查询每个学生的基本信息及其选课情况。或写成:SELECT STUDENT.SNO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 原理 应用 chp3SQL 语言
链接地址:https://www.31ppt.com/p-6296371.html