您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据结构与算法 > 数据库系统基础教程(第6章)
1第6章数据库语言SQL第6章数据库语言SQL2SQL(StructuredQueryLanguage)SQL与关系代数之间有何关系?SQL的多数特性可对应关系代数的特性,如投影、选择、自然连接等;SQL可超越关系代数,如聚合运算和数据更新。关系代数可实现的计算,标准SQL都可实现。SQL有哪些标准?早期标准ANSI(AmericanNationalStandardInstitute)SQL-92或SQL2较新的SQL3第6章数据库语言SQL3SQL(StructuredQueryLanguage)商业数据库系统是否符合标准?都支持ANSI;很大程度支持SQL2标准;支持SQL3的部分标准;都有自己的方言。SQL有哪些主要内容?DQL数据查询(select)DML数据操纵(insert,delete,update)DDL数据定义(create,drop,alter,…)DCL数据控制(grant,revoke,…)第6章数据库语言SQL4数据库服务器、数据库和表之间有何关系一个数据库服务器DatabaseServer是一个驱动引擎程序,当驱动起来之后,可提供SQL服务。一个数据库database是一组语义相关的关系模式。通常可对应某一个或几个文件。一个数据库服务器可支持1个或多个数据库运行。一个表table是一个关系。一个数据库可包含多个表,相互间可建立参照完整性。要访问某个表,必须由数据库服务器先启动该表所在的数据库。第6章数据库语言SQL5在一个表中主要有哪些性质和内容一个表名一组列columns:列名,数据类型,缺省值,约束(主键、允许空值、唯一值)等。一组外键Foreignkeys:本表中某些属性需要参照其它表的主键。(ReferencedBy)一组约束constraints一组权限permissions一组索引indexes一组触发器triggers等等第6章数据库语言SQL6使用什么工具来建立数据库,建立表,并操作表中记录每一种商业数据库都提供两方面功能的工具:使用GUI(图形用户界面)建立数据库和表的工具。如MicrosoftSQLServer的EnterpriseManager或SybaseASA的SybaseCentral。可直接输入SQL语句并执行的工具。如MicrosoftSQLServer的QueryAnalyzer或SybaseASA的InteractiveSQL(ISQL)。第6章数据库语言SQL7有哪些常用数据类型字符型:Char,Varchar,需确定字符串长度,以字节为单位。单引号标注。数值型:整数:•Tinyint1字节•Smallint2字节•Int|Integer4字节•BigInt8字节第6章数据库语言SQL8有哪些常用数据类型浮点数:•精确浮点数:Decimal|Dec(precision,scale)(数字总位数,小数点后位数)•Numeric(precision,scale)•近似浮点数:Real,Double,Float日期型Date'yyyy-mm-dd'时间型Time'hh:mm:ss.sssss‘每一个属性(列)必须确定一种数据类型。还可能有缺省值。第6章数据库语言SQL9约束之间有哪些主要关系主键(PrimaryKey)属性不允许为空值NULL。说明unique唯一值的属性隐含不允许为空值NULL。若表的主键是一个属性,则该属性隐含unique唯一值。说明unique唯一值的属性未必是主键。若表的主键是两个以上属性,则每个属性都不能说明为unique唯一值。第6章数据库语言SQL10约束之间有哪些主要关系外键(ForeignKey)所关联的双方必须具有相同的数据类型和长度。外键所关联的双方不一定具有相同的名字。外键是一种参照关系:从“参照方”到“被参照方”。参照方是本表中的属性,被参照方是其它表的主键属性。说明主键和外键都将自动建立索引(index)。已建立索引的属性的性质(properties,如属性名、类型、长度)不能修改。若被参照的主键修改,所有参照它的外键会自动取消。第6章数据库语言SQL11如何验证SQL语句计算正确性分析计算要求构造SQL语句准备试验数据运行SQL得到结果手工计算结果结果是否一致?第6章数据库语言SQL126.1SQL的简单查询第6章数据库语言SQL13单个关系的查询SELECT[ALL|DISTINCT]select-listFROMR[WHEREcond][ORDERBY{expression|integer}[ASC|DESC],…]其中:select-list:*|{column-name|expression}[ASalias-name],...所有SQL语句的关键词、表名、列名大小写无关。SQL语句可多行书写。SQL语句用分号(英文)结尾。第6章数据库语言SQL14SQL中的投影SELECT子句如何构成?*表示所有属性,按缺省次序排列。SELECT*FROMMovie;可投影到若干属性:SELECTtitle,lengthFROMMovie;AS别名(改名运算,改变列名,AS可省略)SELECTtitleASname,lengthASdurationFROMMovie;第6章数据库语言SQL15SQL中的投影表达式SELECTtitleASname,length*0.016667ASlengthInHoursFROMMovie;常量也可作为一列SELECTtitle,length*0.016667ASlength,‘hrs.'ASinHoursFROMMovie;第6章数据库语言SQL16SQL中的选择WHERE子句如何确定条件condition?运算对象:属性、常量、别名算术运算符:+-*/比较运算符:===IS[NOT]NULL逻辑运算符:NOTANDOR第6章数据库语言SQL17SQL中的选择SELECTtitle,lengthFROMMovieWHEREstudioName='Disney';SELECTtitle,lengthFROMMovieWHEREstudioName='Disney'ANDlength=100;第6章数据库语言SQL18SQL查询与关系代数SQL查询具有以下形式SELECTLFROMRWHEREC与之对应的关系代数∏L(σC(R))第6章数据库语言SQL19字符串比较字符串如何比较?大于、等于、小于按字典次序决定字符大小。字符串大小从第一个字符开始比较,且空串最小。字符串常量用单引号标注。SELECT*FROMSelesmanWHEREempid'A0053';第6章数据库语言SQL20字符串比较字符串模式匹配LIKEs[NOT]LIKEp,其中s是一个字符串,p是包含%或下划线的字符串模式。匹配规则:p中普通字符只和s中完全相同的字符匹配;%可与s中0个或多个字符匹配;一个下划线可与s中一个任意字符(或汉字)匹配。第6章数据库语言SQL21例子SELECT*FROMStarsWHEREnameLIKE'王%';SELECT*FROMStarsWHEREnameLIKE'王_';注意:若p中包含单引号,则用两个单引号表示。第6章数据库语言SQL22日期和时间的比较日期和时间如何比较?大于、等于、小于日期类型Date常量通用格式:'yyyy-mm-dd'时间类型Time常量通用格式:'hh:mm:ss.sssss'单引号标注常量。第6章数据库语言SQL23日期和时间的比较小于d1d2即表示d1早于d2。SELECT*FROMStarsWHEREbirthday'1960-10-1';dBetweend1andd2等价于d=d1ANDd=d2SELECT*FROMStarsWHEREbirthdayBetween'1970-10-1'AND'1980-10-31';第6章数据库语言SQL24空值和涉及空值的比较SQL允许属性有一个特殊的值NULL称做空值。通常可解释为:⒈未知值知道它是一个值但不知道是什么。⒉不适用的值任何值在这里没有意义。⒊保留的值属于某对象的但我们无权知道的值。第6章数据库语言SQL25空值运算的规则⒈对NULL和任何值(包括另一个NULL值)进行算术运算(×或÷),其结果仍然是空值。⒉当使用比较运算符(=或),比较NULL值和任意值(包括另一个NULL值),结果都是UNKNOWN值。⒊正确判定x的值是否为NULL的方式是用表达式xisNULL表示。如果x的值是NULL则表达式的值为TRUE否则为FALSE。注意:NULL不是常量,不能显式作为操作数,如:NULL+3SELECT*FROMMovieWHEREstudioISNOTNULL第6章数据库语言SQL26布尔值UNKNOWNUnknown值作为一个逻辑值,与True和False构成三值逻辑。逻辑运算:NOT非、AND且、OR或设:True=1;False=0;Unknown=0.5那么aANDb=Min(a,b)aORb=Max(a,b)NOTa=1-a第6章数据库语言SQL27三值逻辑真值表XYXANDYXORYNOTXTrueTrueTrueTrueFalseTrueUnknownUnknownTrueFalseTrueFalseFalseTrueFalseUnknownTrueUnknownTrueUnknownUnknownUnknownUnknownUnknownUnknownUnknownFalseFalseUnknownUnknownFalseTrueFalseTrueTrueFalseUnknownFalseUnknownTrueFalseFalseFalseFalseTrue第6章数据库语言SQL28例子SELECT*FROMMovieWHERElength=120ORlength120;或SELECT*FROMMovieWHERElengthISNOTNULL第6章数据库语言SQL29输出的排序ORDERBY{expression|integer}[ASC|DESC],…当输出结果为多行时,往往需要按某种次序输出结果。即改变行位置。ASC表示升序(缺省);DESC表示降序。SELECT*FROMMovieWHEREstudioName='Disney'ANDyear=1990ORDERBYlengthDESC,title;第6章数据库语言SQL306.2多个关系上的查询第6章数据库语言SQL31乘积和连接SQL用简单的方式在一个查询中处理多个关系:在From子句中列出每个关系,然后在SELECT子句和WHERE子句中引用任何出现在FROM子句中关系的属性。Selecta1,a2,…FromR1,R2,…Wherecond关系代数表示为∏a1,a2,…(σcond(R1×R2×…))注意:结果是一个包,而不是集合第6章数据库语言SQL32例子设有关系Movie(title,year,length,inColor,studioName,producerC#)MovieExec(name,address,cert#,netWorth)要查询电影“StarWars”的制片人的姓名。SELECTnameFROMMovie,MovieExecWHEREtitle=“StarWars”ANDproducerC#=cert#第6章数据库语言SQL33消除属性二义性何时出现属性二义性?一个查询所涉及的多个关系中有两个或两个以上的属性同名。此时在Select、Where等子句中就不能简单引用属性名。如何消除属性二义性?关系名.属性名,限定关系和属性若表名或列名与SQL关键词(keywords)重复,如何消除二义性?把表名或列名用双引号标注,以区别于关键词。第6章数据库语言SQL34例
本文标题:数据库系统基础教程(第6章)
链接地址:https://www.777doc.com/doc-3603097 .html