您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第五讲关系数据库标准语言SQL.
•SQL概述•SQL数据定义功能•SQL数据查询功能•SQL数据修改功能•SQL数据控制功能•嵌入式SQLSQL概述(Ⅰ)•历史–1974年,由Boyce和Chamber提出。–1975-1979年,在SystemR上实现,由IBM的SanJose研究室研制,称为Sequel,现在称为SQL(StruceuredQueryLanguang)。•标准化–有关组织•ANSI(AmericanNaturalStandardInstitute)•ISO(InternationalOrganizationforStandardization)–有关标准•SQL86:“数据库语言SQL”SQL概述(Ⅱ)–SQL89:“具有完整性增强的数据库语言SQL”,增加了对完整性约束的支持。–SQL2(SQL92):“数据库语言SQL”,是SQL-89的超集,增加了许多新特性,如新的数据类型,更丰富的数据操作,更强的完整性、安全性支持等。–SQL-3(SQL99):新标准增加了对象数据、递归、触发器的支持能力。SQL语言的功能SQL是一个综合的、通用的、功能极强的关系数据库语言,它具有四个方面的功能:定义(Definition),查询(Query),操纵(Manipulation)和控制(contro1)。P85SQL概述(Ⅲ)•特点–综合统一:模式定义和数据操作的一体化。集DDL,DML,DCL于一体。单一的结构----关系,带来了数据操作符的统一。–面向集合的操作方式操作的对象可以是元组的集合,非单个记录。一次一集合。–高度非过程化:用户只需提出“做什么”,无须告诉“怎么做”,不必了解存取路径。例:从S表中找出计算机系学生的学号和姓名。SELECT学号,姓名FROMstudentWHERE系名=“计算机”;–两种使用方式,统一的语法结构SQL既是自含式语言(用户使用),又是嵌入式语言(程序员使用)。SQL概述(IV)–语言简洁,易学易用SQL语言共有9个命令动词,语法接近英语口语。SQL功能操作符数据查询SELECT数据定义CREATE,DROP,ALTER数据操纵INSERT,UPDATE,DELETE数据控制GRANT,REVOKE支持关系数据库的三级模式结构:P87图3.1外模式—用户对视图(View)的操作。模式—用户对基本表(BaseTable)的操作。内模式—关系数据库中存储文件及索引的组织结构。示例关系P59学生(学号,姓名,性别,年龄,系号)student(sno,sname,ssex,sage,sdept)课程(课程号,课程名,先行课,学分)course(cno,cname,cpno,ccredit)选课(学号,课程号,成绩)sc(sno,cno,grade)SQL数据定义功能•常用数据类型•数据库的建立与撤消•基本表的定义•索引的定义•SQL数据定义特点常用数据类型(Ⅰ)Bigint:大整型(8字节)Int:整型(4字节)。Smallint:小整型(2字节)。Tinyint:无符号整型(单字节)Bit:二进制位类型Decimal(p,q):数值型.p为数据宽度,q为小数位.Numeric(p,q):同decimal.Float:双精度浮点型(8字节)。Real:单精度浮点型(4字节)。Money:货币型(8字节,精确到货币单位的千分之十)Smallmoney:货币型(4字节,精确到货币单位的千分之十)Datetime:日期时间型(8字节:monddyyyyhh:mmAM(PM))Smalldatetime:短日期时间型(4字节)char(n):固定长度为n的字符(串)型(8k)。varchar(m):最大长度为m的可变长字符(串)型。Text:文本型(2GB)Ntext:文本型(1GB),数据能直接输出到显示设备上的字符.Binary:二进制型(8kb)Varbinary:可变长二进制型(8kb)Image:图象类型(2GB)常用数据类型(II)数据库的建立与撤消•建立一个新数据库createdatabase数据库名•撤消一个数据库dropdatabase数据库名•打开指定数据库opendatabase数据库名•关闭当前数据库closedatabase数据库名基本表的定义(Ⅰ)•基本表的定义(CREATE)•格式createtable表名(列名数据类型[default缺省值][notnull][,列名数据类型[default缺省值][notnull]]……[,primarykey(列名[,列名]…)][,foreignkey(列名[,列名]…)references表名(列名[,列名]…)][,check(条件)]);基本表的定义(Ⅱ)•示例createtablestudent(snochar(5)notnullunique,snamechar(10)unique,ssexchar(2),sagesmallint,sdeptchar(15),primarykey(sno),check(sage0));基本表的定义(Ⅱ)•示例createtablecourse(cnochar(1)notnullunique,cnamechar(10)notnull,cpnochar(1),ccreditsmallint,primarykey(cno));基本表的定义(Ⅲ)•示例createtablesc(snochar(5)notnull,cnochar(1)notnull,gradeint,primarykey(sno,cno),foreignkey(sno)referencesstudent(sno),foreignkey(cno)referencescourse(sno),check(grade=0));基本表的定义(IV)•修改基本表定义(ALTER)格式:altertable表名[add子句]//增加新列[dropcolumn子句]//删除列[altercolumn子句];//修改列定义示例1.添加属性addr到studentaltertablestudentaddaddrchar(30);示例2.从student中删除列addraltertablestudentdropcolumnaddr;示例3.将student中sdept属性宽度改为50altertablestudentaltercolumnsdeptchar(50);基本表的定义(V)示例4.将teach表中的tno属性加上非空约束示例5.将teach表中的tno属性设为主码示例6.在TC表中指定外码:cno及tno示例7.将student表中的sname属性加上唯一性约束基本表的定义(V)示例4.将teach表中的tno属性加上非空约束altertableteachaltercolumtnochar(10)notnull;示例5.将teach表中的tno属性设为主码altertableteachaddprimarykey(tno);示例6.在TC表中指定外码:cno及tnoaltertabletcaddforeignkey(cno)referencescourse(cno);altertabletcaddforeignkey(tno)referencesteach(tno);示例7.将student表中的sname属性加上唯一性约束altertablestudentaddunique(sno);基本表的定义(IV)•撤消基本表定义(drop)–格式droptable表名;–示例droptableTEACH;–DANGER撤消基本表后,基本表的定义、表中数据、索引、以及由此表导出的视图的定义都被删除。索引的定义(Ⅰ)•索引的定义–格式:create[unique/distinct][cluster]index索引名on表名(列名[asc/desc][,列名[asc/desc]]…);unique(distinct):唯一性索引,不允许表中不同的行在索引列上取相同值。若已有相同值存在,则系统给出相关信息,不建此索引。系统并拒绝违背唯一性的插入、更新。cluster:聚集索引,表中元组按索引项的值排序并物理地聚集在一起。一个基本表上只能建一个聚集索引。asc/desc:索引表中索引值的排序次序,缺省为asc。–示例:createclusterindexs_indexonStudent(Sno);索引的定义(Ⅱ)•索引的删除格式:dropindex索引名;•索引的有关说明可以动态地定义索引,即可以随时建立和删除索引。不允许用户在数据操作中引用索引。索引如何使用完全由系统决定,这支持了数据的物理独立性。应该在使用频率高的、经常用于连接的列上建索引。一个表上可建多个索引。索引可以提高查询效率,但索引过多耗费空间,且降低了插入、删除、更新的效率。SQL数据定义特点SQL中,任何时候都可以执行一个数据定义语句,随时修改数据库结构。而在非关系型的数据库系统中,必须在数据库的装入和使用前全部完成数据库的定义。若要修改已投入运行的数据库,则需停下一切数据库活动,把数据库卸出,修改数据库定义并重新编译,再按修改过的数据库结构重新装入数据。•数据库定义不断增长(不必一开始就定义完整)。•数据库定义随时修改(不必一开始就完全合理)。•可进行增加索引、撤消索引的实验,检验其对效率的影响。SQL数据查询功能•SQL数据查询基本结构•select子句•重复元组的处理•from子句•where子句•更名运算•字符串操作•元组显示顺序•集合操作SQL数据查询功能•分组和聚集函数•空值•简单查询•连接查询•嵌套子查询•派生关系•视图•关系的连接SQL数据查询基本结构•基本结构selectA1,A2,…,Anfromr1,r2,…,rmwhereP;∏A1,A2,…,An(p(r1r2…rm))•示例:给出所有学生的姓名。selectsnamefromstudent;select子句•目标列形式可以为列名,*,算术表达式,聚集函数。–“*”:表示“所有的属性”。给出所有学生的信息。select*fromstudent;–带,,,的算术表达式给出所有学生的姓名及出生年份。selectsname,2003-sagefromstudent;重复元组的处理•语法约束缺省为保留重复元组,也可用关键字all显式指明。若要去掉重复元组,可用关键字distinct或unique指明。•示例:找出所有选修课程的学生。selectdistinctSnofromSC;from子句(Ⅰ)•说明from子句列出查询的对象表。当目标列取自多个表时,在不混淆的情况下可以不用显式指明来自哪个关系。•示例找出成绩低于80分的学生的姓名、性别、系别。selectSname,Ssex,Sdeptfromstudent,scwheregrade80andstudent.sno=sc.sno;from子句(Ⅱ)•例.列出选修了“数据库”课程的学生的学号及姓名。from子句(Ⅱ)•例.列出选修了“数据库”课程的学生的学号及姓名。selectstudent.sno,snamefromstudent,sc,coursewherestudent.sno=sc.snoandsc.cno=course.cnoandcourse.cname=‘数据库’;where子句•语法成分比较运算符:、、、、=、。逻辑运算符:and,or,not。[not]between…and:判断表达式的值是否在某范围内。•示例1:列出成绩在80~90之间的学生学号。selectsnofromscwheregradebetween80and90;//含80或90分•示例2:列出成绩不在80~90之间的学生学号。selectsnofromscwheregradenotbetween80and90;//不含80或90分更名运算(Ⅰ)•格式old_name[as]new_name为关系和属性重新命名,可出现在select和
本文标题:第五讲关系数据库标准语言SQL.
链接地址:https://www.777doc.com/doc-3855078 .html