数据库语言SQL课件.ppt
《数据库语言SQL课件.ppt》由会员分享,可在线阅读,更多相关《数据库语言SQL课件.ppt(95页珍藏版)》请在三一办公上搜索。
1、3 数据库语言SQL,Elelen Enmi胶原蛋白口服液买四赠一 品牌正品情侣装 亲子装全场包邮 淘宝:http:/或者拍拍:http:/,本章目标,本章主要介绍SQL语言的基本语法和使用方式,要求熟练掌握SQL语言的使用规则,能够根据实际需求写出能够准确完成操作的SQL语句。,3.1 概述,SQL的发展1974年,由Boyce和Chamberlin提出19751979,IBM San Jose Research Lab的关系数据库管理系统原型System R实施了这种语言SQL-86是第一个SQL标准SQL-89、SQL-92(SQL2)、SQL-99(SQL3)现状大部分DBMS产品都支
2、持SQL,成为操作数据库的标准语言有特殊性,支持程度不同,数据定义(DDL)定义、删除、修改关系模式(基本表)定义、删除视图(View)定义、删除索引(Index)数据操纵(DML)数据查询数据增、删、改 数据控制(DCL)用户访问权限的授予、收回,3.1.1 SQL的功能,交互式SQL一般DBMS都提供联机交互工具用户可直接键入SQL命令对数据库进行操作由DBMS来进行解释 嵌入式SQL能将SQL语句嵌入到高级语言(宿主语言)使应用程序充分利用SQL访问数据库的能力、宿主语言的过程处理能力一般需要预编译,将嵌入的SQL语句转化为宿主语言编译器能处理的语句,3.1.2 SQL的形式,数据定义C
3、reate、Drop、Alter数据操纵数据查询:Select数据修改:Insert、Update、Delete数据控制Grant、Revoke,3.1.3 SQL的动词,数据查询是数据库应用的核心功能。基本结构:Select A1,A2,.,AnFrom r1,r2,.,rmWhere P,3.2 数据查询,A1,A2,.,An(p(r1r1.rm),3.2.1 Select语句的含义,对 From 子句中的各关系,作笛卡儿积()对 Where 子句中的逻辑表达式进行选择()运算,找出符合条件的元组。根据 Select 子句中的属性列表,对上述结果作投影()操作。查询操作的对象是关系,结果还
4、是一个关系,是一个结果集,是一个动态数据集。,3.2.2 Select子句 对应于关系代数的投影()运算,用以列出查询结果集中的期望属性。,重复元组SQL 具有包的特性Select子句的缺省情况是保留重复元组(ALL),可用 Distinct去除重复元组Select Distinct sdept From StudentSelect All sdept From Student去除重复元组:费时需要临时表的支持,*与属性列表 星号*表示所有属性星号*:按关系模式中属性的顺序排列,并具有一定的逻辑数据独立性显式列出属性名:按用户顺序排列Select*From StudentSelect Stud
5、ent.*,cno,grade From Student,SC Where Student.sno=SC.sno,更名为结果集中的某个属性改名使结果集更具可读性Select sno as stu_no,cno as course_no,grade From SCSelect sno,sname,2001-sage as birthday From Student,3.2.3 where子句,where子句对应与关系代数中的选择()。查询满足指定条件的元组可以通过Where子句来实现。使where子句中的逻辑表达式返回True值的元组,是符合要求的元组,将被选择出来。,运算符比较:、=、=、no
6、t+确定范围:Between A and B、Not Between A and B 确定集合:IN、NOT IN字符匹配:LIKE,NOT LIKE空值:IS NULL、IS NOT NULL多重条件:AND、OR、NOT,like字符匹配:Like、Not Like通配符:%匹配任意字符串_ 匹配任意一个字符大小写敏感,列出姓张的学生的学号、姓名。Select sno,sname From Student Where sname LIKE 张%列出张姓且单名的学生的学号、姓名。Select sno,sname From Student Where sname LIKE 张_ _,转义符 e
7、scape 例:列出课程名称中带有_的课号及课名。Select cno,cnameFrom CourseWhere cname LIKE%_%escape,3.2.4 from子句,From子句对应与关系代数中的笛卡儿积()列出将被扫描的关系(表)例:列出所有学生的学号、姓名、课号、成绩。Select Sudent.sno,sname,SC.cno,grade From Student,SC Where Student.sno=SC.sno,元组变量为 From 子句中的关系定义元组变量方便关系名的引用在同一关系的笛卡儿积中进行辨别例:列出与95001同岁的同学的学号,姓名,年龄。Select
8、T.sno,T.sname,T.sage FromStudent as T,Student as S WhereS.sno=95001 ANDT.sage=S.sage,3.2.5 Order By子句,指定结果集中元组的排列次序耗时ASC(缺省)、DESC、未选中的属性例:列出CS系中的男生的学号、姓名、年龄,并按年龄进行排列(升序)。Select sno,sname,sage From Student Where sdept=CS Order By sage ASC,3.3 数据定义语言,数据定义语言(Data Definition Language)Create、Drop、Alter定义
9、一组关系(基本表)、说明各关系的信息各关系的模式各属性的值域完整性约束索引安全性和权限,3.3.1 SQL中的域类型,字符型char(n)、varchar(n)数值型integer、smallintnumeric(p,d)real、double、float(n)日期/时间型datetime,3.3.2 SQL中的域定义,域定义语句(SQL-92支持)需重复使用的Create Domain stu_name varchar(20)Create Domain zip_code char(6)域的删除Drop Domain datelog各DBMS的方法是不同的Restrict/Cascade使用该
10、域的属性的处理,3.3.3 SQL中的模式定义,Create Table r(A1D1,A2D2,AnDn,)其中:r 关系名(表名)、Ai 关系 r 的一个属性名Dn 属性Ai域值的域类型主键声明:primary key(Aj1,Aj2,Ajvm),Create Domain stu_name varchar(20)Create Table Student(sno char(10)primary key(sno),sname stu_name,sage smallint,ssex char(1),sdept char(2),Create Table Course(cno char(10)pr
11、imary key(cno),cname varchar(20),credit smallint)Create Table SC(sno char(10)not null,cno char(10)not null,grade smallint,primary key(sno,cno),Elelen Enmi胶原蛋白口服液买四赠一 品牌正品情侣装 亲子装全场包邮 淘宝:http:/或者拍拍:http:/,3.3.4 删除表结构,用SQL删除关系(表)将整个关系模式(表结构)彻底删除表中的数据也将被删除Drop Table rDrop Table student,3.3.5 修改表结构,删除表中的
12、某属性去除属性及相应的数据Alter Table r Drop A 增加表中的属性向已经存在的表中添加属性allow null已有的元组中该属性的值被置为NullAlter Table r Add A DAlter Table student phone char(16),3.3.6 Default Value,属性的默认值用户不提供某属性的值时,默认值被使用初始值DDL中:ModifyDate char(30)Default TimeStampAlter Table student Add ID integer Default 1001,3.3.7 索引Index,索引是一种数据结构,是对照
13、表、指针表索引是为了加速对表中元组的检索而创建的一种分散存储结构(B树)索引是对表而建立的,由除存放表的数据页面以外的索引页面组成索引是把双刃剑,减慢更新的速度索引不是SQL标准的要求 索引的种类聚簇索引(Clustered Index)非聚簇索引(Non-Clustered Index),聚簇索引(Clustered Index)表中的元组按聚簇索引的顺序物理地存放根级页面-中间层页面-叶级页面(数据页面)一个表中只能有一个聚簇索引更新的复杂性,需要大量的临时空间 非聚簇索引(Non-Clustered Index)表中的元组按聚簇索引的顺序物理地存放根级页面-中间层页面-叶级页面(数据页面
14、)一个表中只能有一个聚簇索引更新的复杂性,需要大量的临时空间,CREATE UNIQUE CLUSTERED|NONCLUSTEREDINDEX index-name On TableName(Column,Column,)Create Index YearIndex On Movie(year)Create Clustered Index SnoIndex On student(sno)Drop Index YearIndex,3.4 数据添加,用SQL的插入语句,向数据库表中添加数据按关系模式的属性顺序Insert Into Student Values(0095001,张三,27,M,C
15、S)按指定的属性顺序,也可以只添加部分属性(非Null属性为必需)Insert Into Student(sno,sname,sage)Values(0095002,李四,26),3.5 聚合函数,把一列中的值进行聚合运算,返回单值的函数。五个预定义的聚合函数:平均值:Avg总和:Sum最小值:Min最大值:Max计数:CountCount(*)、Count(Distinct),3.5.1 Group By,将查询结果集按某一列或多列的值分组,值相等的为一组,一个分组以一个元组的形式出现。只有出现在Group By子句中的属性,才可出现在Select子句中。例:统计各系学生的人数。Select
16、 sdept,count(*)as stu_count From Student Group By sdept,3.5.2 Having,针对聚合函数的结果值进行筛选(选择),它作用于分组计算结果集。跟在Group By子句的后面,没有Group By则针对全表。例:列出具有两门(含)以上不及格的学生的学号、不及格的课目数。Select sno,count(sno)From SC Where grade=2,3.5.3 Having与Where的区别,Where 决定哪些元组被选择参加运算,作用于关系中的元组。Having 决定哪些分组符合要求,作用于分组。聚合函数的条件关系必须用Having
17、,Where中不应出现聚合函数。,3.5.4 聚合函数忽略Null,Count:不计Sum:不将其计入Avg:具有 Null 的元组不参与Max/Min:不参与例:Select count(sdept)From Student Select Avg(sage)From Student,3.6 子查询,子查询是嵌套在另一查询中的 Select-From-Where 表达式(Where/Having)。SQL允许多层嵌套,由内而外地进行分析,子查询的结果作为父查询的查找条件。可以用多个简单查询来构成复杂查询,以增强SQL的查询能力。子查询中不使用 Order By 子句,Order By子句只能对
18、最终查询结果进行排序。,3.6.1 单值比较,返回单值的子查询,只返回一行一列父查询与单值子查询之间用比较运算符进行连接运算符:、=、=、例:找出与95001同龄的学生 Select*From Student Where sage=(Select sage From Student Where sno=95001),3.6.2 多值,子查询返回多行一列 运算符:In、All、Some(Any)、Exists,in标量值与子查询返回集中的某一个相等,true in 被用来测试多值中的成员。例:查询选修C01课程的学生的学号、姓名。Select sno,sname From Student Whe
19、re sno IN(Select sno From SC Where cno=C01),例:查询选修了 数据库的学生的学号和姓名 Select sno,sname From Student Where sno IN(Select sno From SC Where cno IN(Select cno From Course Where cname=数据库),all多值比较:多行一列父查询与多值子查询之间的比较需用All来连接标量值s比子查询返回集R中的每个都大时,sAll R 为 True All 表示所有 all、=all、all all 等价于 not in 例:找出年龄最小的学生 Sel
20、ect*From Student Where sage all(Select sage From Student),some、any多值比较:多行一列父查询与多值子查询之间的比较需用Some/Any来连接标量值s比子查询返回集R中的某一个都大时,s Some R为True 或 s Any R为True Some(早期用Any)表示某一个,只要有一个即返回真 some、=some、some=some 等价于 in、some 不等价于 not in,例:找出不是最小年龄的学生 Select*From student Where sage some(Select sage From Student)
21、例:找出具有最高平均成绩的学号及平均成绩 Select sno,avg(grade)From SC Group By sno Having avg(grade)=all(Select avg(grade)From SC Group By sno),existsExists+子查询用来判断该子查询是否返回元组当子查询的结果集非空时,Exists为True当子查询的结果集为空时,Exists为False不关心子查询的具体内容,因此用 Select*,例:列出选修了C01课程的学生的学号、姓名 Select sno,sname From Student Where Exists(Select*Fro
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 语言 SQL 课件
链接地址:https://www.31ppt.com/p-2081572.html