数据库语言SQL.ppt
《数据库语言SQL.ppt》由会员分享,可在线阅读,更多相关《数据库语言SQL.ppt(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第五章第五章 数据库语言数据库语言SQLSQL:Structured Query Language SQL与关系代数之间的关系:与关系代数之间的关系:SQL的多数特性可对应关系代数的特性,如投影、的多数特性可对应关系代数的特性,如投影、选择、自然连接等;选择、自然连接等;SQL也超越关系代数,如聚合运算和数据更新;也超越关系代数,如聚合运算和数据更新;关系代数可实现的计算,标准关系代数可实现的计算,标准SQL都可实现。都可实现。SQL标准:标准:早期标准早期标准ANSI(American National Standard Institute);SQL92或或SQL2;较新的较新的SQL3。数
2、据库语言数据库语言SQL商业数据库系统符合的标准:商业数据库系统符合的标准:都支持都支持ANSI;很大程度支持很大程度支持SQL2标准;标准;支持支持SQL3的部分标准;的部分标准;都有自己的方言。都有自己的方言。SQL的主要内容:的主要内容:DQL数据查询数据查询(select)5.15.5,5.9DML数据操纵数据操纵(insert,delete,update)5.6DDL数据定义数据定义(create,drop,alter)5.75.8和第和第6章章DCL数据控制数据控制(grant,revoke)7.4 数据库语言数据库语言SQL数据库服务器、数据库和表之间的关系:数据库服务器、数据库
3、和表之间的关系:一个数据库服务器一个数据库服务器Database Server是一个驱动引擎程序,是一个驱动引擎程序,当驱动起来之后,可提供当驱动起来之后,可提供SQL服务。服务。一个数据库一个数据库database是一组语义相关的关系模式。通常是一组语义相关的关系模式。通常可对应某一个或几个文件。可对应某一个或几个文件。一个数据库服务器可支持一个数据库服务器可支持1个或多个数据库运行。个或多个数据库运行。一个表一个表table是一个关系。是一个关系。一个数据库可包含多个表,相互间可建立参照完整性。一个数据库可包含多个表,相互间可建立参照完整性。要访问某个表,必须由数据库服务器先启动该表所在的
4、要访问某个表,必须由数据库服务器先启动该表所在的数据库。数据库。数据库语言数据库语言SQL一个表中主要性质和内容:一个表中主要性质和内容:一个表名一个表名一组列一组列columns:列名,数据类型,缺省值,约列名,数据类型,缺省值,约束束(主键、允许空值、唯一值主键、允许空值、唯一值)等。等。一组外键一组外键Foreign keys:本表中某些属性需要参本表中某些属性需要参照其它表的主键。照其它表的主键。(Referenced By)一组约束一组约束constraints一组权限一组权限permissions一组索引一组索引indexes一组触发器一组触发器triggers等等数据库语言数据库
5、语言SQL常用数据类型:常用数据类型:字符型:字符型:Char,Varchar,需确定字符串长度,以字节为单位。单引号标注。需确定字符串长度,以字节为单位。单引号标注。数值型:数值型:整数:整数:Tinyint 1字节字节Smallint 2字节字节Int|Integer 4字节字节BigInt 8字节字节浮点数:浮点数:精确浮点数:精确浮点数:Decimal|Dec(precision,scale)(数字总位数数字总位数,小数点小数点后位数后位数)Numeric(precision,scale)近似浮点数:近似浮点数:Real,Double,Float(小数点后位数小数点后位数)日期型日期型
6、Date yyyy-mm-dd时间型时间型Time hh:mm:ss.sssss每一个属性每一个属性(列列)必须确定一种数据类型。还可能有缺省值。必须确定一种数据类型。还可能有缺省值。数据库语言数据库语言SQL约束之间的主要关系:约束之间的主要关系:主键主键(Primary Key)主键属性不允许为空值主键属性不允许为空值NULL。说明说明unique唯一值的属性隐含不允许为空值唯一值的属性隐含不允许为空值NULL。若表的主键是一个属性,则该属性隐含若表的主键是一个属性,则该属性隐含unique唯一值(如唯一值(如Salesman 中的中的idno);说明);说明unique唯一值的属性未必是
7、主键。唯一值的属性未必是主键。若表的主键是两个以上属性,则每个属性都不能说明为若表的主键是两个以上属性,则每个属性都不能说明为unique唯唯一值。如一值。如Salesitem中的中的salesno,lineno外键外键(Foreign Key)外键所关联的双方必须具有相同的数据类型和长度。外键所关联的双方必须具有相同的数据类型和长度。外键所关联的双方不一定具有相同的名字。外键所关联的双方不一定具有相同的名字。外键是一种参照关系:从外键是一种参照关系:从“参照方参照方”到到“被参照方被参照方”。参照方是本表中的属性,被参照方是其它表的主键属性,或参照方是本表中的属性,被参照方是其它表的主键属性
8、,或unique属性。属性。索引索引(index)说明主键和外键都自动建立索引。说明主键和外键都自动建立索引。已建立索引的属性的性质已建立索引的属性的性质(properties,如属性名、类型、长度,如属性名、类型、长度)不能修改。不能修改。若被参照的主键修改,所有参照它的外键会自动取消。若被参照的主键修改,所有参照它的外键会自动取消。数据库语言数据库语言SQL用用ISQL更新数据更新数据注意:注意:Command-Options 选择选择 Commit After Every Command,并按,并按permanent存储。存储。目的是每条语句执行后都提交数据到数据库,以实现永目的是每条语
9、句执行后都提交数据到数据库,以实现永久存储。久存储。运行运行insert/update/delete指令。指令。在更新数据之前,应确保数据库模式正确;而且保持模在更新数据之前,应确保数据库模式正确;而且保持模式稳定。式稳定。注意:当改变一个数据库模式时注意:当改变一个数据库模式时(修改表或列的性修改表或列的性质质),该数据库不允许有其它连接。,该数据库不允许有其它连接。ISQL必须关必须关闭。闭。数据库语言数据库语言SQLSQL语句计算正确性语句计算正确性的验证:验证:分析计算要求分析计算要求构造构造SQL语句语句准备试验数据准备试验数据手工计算结果手工计算结果运行运行SQL得到结果得到结果结
10、果是否一致结果是否一致?5.1 简单查询简单查询对单个关系的查询。对单个关系的查询。SELECT ALL|DISTINCT select-listFROM RWHERE condORDER BY expression|integer ASC|DESC,select-list:*|column-name|expression AS alias-name,.所有所有SQL语句的关键词、表名、列名大小写无语句的关键词、表名、列名大小写无关。关。SQL语句可多行书写。语句可多行书写。SQL语句用分号语句用分号(英文英文)结尾。结尾。5.1.1 投影投影SELECT子句的构成:子句的构成:*表示所有属性
11、,按缺省次序排列。表示所有属性,按缺省次序排列。SELECT*FROM customer;可投影到若干属性:可投影到若干属性:SELECT custid,name FROM customer;AS 别名别名(改名运算,改变列名改名运算,改变列名)SELECT custid,name AS CUSTNAME FROM customer;表达式表达式SELECT orderno,lineno,singlecost*quantity AS accountFROM salesitem;常量也可作为一列常量也可作为一列SELECT orderno,lineno,singlecost*quantity A
12、S account,Yuan AS RMBFROM DBA.salesitem;5.1.2 选择选择WHERE子句确定条件子句确定条件condition:运算对象:属性、常量、别名运算对象:属性、常量、别名算术运算符:数值运算:算术运算符:数值运算:+-*/比较运算符:比较运算符:=A0053;字符串模式匹配字符串模式匹配LIKEs LIKE p,其中其中s是一个字符串,是一个字符串,p包含包含%或下划线的字符串模式或下划线的字符串模式匹配规则:匹配规则:p中普通字符只和中普通字符只和s中完全相同的字符匹配;中完全相同的字符匹配;%可与可与s中中0个或多个字符匹配;个或多个字符匹配;一个下划线
13、可与一个下划线可与s中一个任意字符匹配。中一个任意字符匹配。SELECT*FROMsalesman WHERE name LIKE 王王%;SELECT*FROMsalesman WHERE name LIKE 王王_;注意:若注意:若p中包含单引号,则用两个单引号表示。中包含单引号,则用两个单引号表示。5.1.4 日期和时间的比较日期和时间的比较日期和时间的比较:大于、等于、小于日期和时间的比较:大于、等于、小于日期类型日期类型Date常量通用格式:常量通用格式:yyyy-mm-dd时间类型时间类型Time常量通用格式:常量通用格式:hh:mm:ss.sssss单引号标注常量。单引号标注常量
14、。小于小于d1d2 即表示即表示d1早于早于d2。select*from salesorder where signdate=d1 AND d=d2select*from salesorder where signdate between 2002-10-1 and 2002-10-31;5.1.5 输出的顺序输出的顺序ORDER BY子句子句 ORDER BY expression|integer ASC|DESC,当输出结果为多行时,往往需要按某次序输出当输出结果为多行时,往往需要按某次序输出结果。即改变行位置。结果。即改变行位置。ASC表示升序表示升序(缺省缺省);DESC表示降序。表示
15、降序。SELECT*FROM salesorder ORDER BY signdate DESC;5.2 多关系查询多关系查询两个以上的关系在两个以上的关系在From子句中连接起来子句中连接起来进行查询。进行查询。Select a1,a2,From R1,R2,Where condOrder By b1,5.2.1 乘积和连接乘积和连接 Select a1,a2,From R1,R2,Where cond实现关系代数运算:实现关系代数运算:a1,a2,.(R1 cond R2)即即 a1,a2,.(cond(R1 R2)注意:结果是一个包,而不是集合注意:结果是一个包,而不是集合(除非显示确定
16、除非显示确定Select distinct.)Select子句和子句和Where子句中可包含子句中可包含From子句中的子句中的R1,R2等关系的属等关系的属性。性。例:计算员工号为例:计算员工号为“A0043”的销售员所经办的客户的姓名的销售员所经办的客户的姓名及其电话号码及其电话号码 计算员工号为计算员工号为“A0044”的销售员所销售的商品的种类的销售员所销售的商品的种类和规格。和规格。自然连接方法:自然连接方法:5.9介绍。介绍。Select type,specFrom salesitem Natural Join salesorder Natural Join productWher
17、e salesorder.empid=A0043;5.2.2 消除属性二义性消除属性二义性属性二义性的出现:属性二义性的出现:一个查询所涉及的多个关系中有两个或两个以上的一个查询所涉及的多个关系中有两个或两个以上的属性同名。属性同名。此时在此时在Select、Where等子句中就不能简单引用属性等子句中就不能简单引用属性名。名。属性二义性的消除:属性二义性的消除:关系名关系名.属性名,限定关系和属性属性名,限定关系和属性若表名或列名与若表名或列名与SQL关键词关键词(keywords)重复,重复,如何消除二义性?如何消除二义性?把表名或列名用双引号标注,以区别关键词。把表名或列名用双引号标注,
18、以区别关键词。5.2.3 元组变量元组变量元组变量:元组变量:对关系的改名。对关系的改名。Select a1,a2From R AS S,Where condSelect、Where等子句中可使用改过的表名,即等子句中可使用改过的表名,即“元组元组变量变量”。例:计算例:计算“所有重名的销售员的员工号及其姓名所有重名的销售员的员工号及其姓名”Select s1.empid,s1.nameFrom salesman as s1,salesman as s2Where s1.empids2.empid AND s1.name=s2.nameOrder by s1.empid;5.2.4 多关系查询
19、的解释多关系查询的解释 Select a1,a2,From R1,R2,Where cond Order By b1,计算过程:计算过程:1.From多关系之间求笛卡尔积多关系之间求笛卡尔积2.Where条件的选择运算。条件的选择运算。连接连接3.Select投影运算。投影运算。运算运算4.Order By结果排序输出结果排序输出 5.2.5 集合运算集合运算并并 Union大部分大部分SQL支持支持交交 Intersect大部分大部分SQL不支持,可用子查询间接不支持,可用子查询间接实现。实现。差差 Except/Minus大部分大部分SQL不支持,可用子查不支持,可用子查询间接实现。询间接
20、实现。Union运算指令:运算指令:select-without-order-by .UNION ALL select-without-order-by .UNION ALL select-without-order-by .ORDER BY integer ASC|DESC,.求所有客户和销售员的名字及其电话。求所有客户和销售员的名字及其电话。Select name,phone From customerUnion AllSelect name,phone From salesman;ALL 说明结果可重复。说明结果可重复。5.3 子查询子查询子查询子查询(subquery):用括号封装的一
21、个用括号封装的一个Select语句,通常在语句,通常在Where子句中增强条件。子句中增强条件。例:计算员工号为例:计算员工号为“A0043”的销售员所经的销售员所经办的客户的姓名及其电话号码办的客户的姓名及其电话号码 Select name,phone From customer Where custid=ANY(Select custid From salesorder Where empid=A0043);5.3.1 涉及关系的条件涉及关系的条件Where子句中如何使用子查询?子句中如何使用子查询?NOT Exists(Subquery):当且仅当子查询结果非空,:当且仅当子查询结果非空
22、,条件为真。条件为真。expression compare ANY(Subquery):比较子查询:比较子查询的结果的任意一个值。的结果的任意一个值。expression compare ALL(Subquery):比较子查询结:比较子查询结果的所有的值。果的所有的值。expression NOT IN(Subquery):当且仅当表达式的:当且仅当表达式的值出现在子查询的结果中,条件为真。值出现在子查询的结果中,条件为真。其中:(其中:(表示等价)表示等价)expression IN(Subquery)expression=ANY(Subquery)expression NOT IN(Sub
23、query)expression ALL(Subquery)5.3.1 涉及关系的条件涉及关系的条件子查询可实现集合的减运算和交运算。子查询可实现集合的减运算和交运算。无订单的销售员无订单的销售员 销售员销售员 有订单的销售员有订单的销售员R S表示为:表示为:R ALL(S)R NOT IN(S)R S表示为:表示为:R=ANY(S)R IN(S)注意:注意:expression compare(Subquery)要求子查询返回要求子查询返回单行值,再进行比较。若返回多行值,则出错。单行值,再进行比较。若返回多行值,则出错。例:计算员工号为例:计算员工号为“A0043”的销售员所经办的客户的
24、姓的销售员所经办的客户的姓名及其电话号码。名及其电话号码。Select name,phoneFrom customerWhere custid=(Select custid From salesorder Where empid=A0043);说明:多数说明:多数DBMS要求子查询中的要求子查询中的Select语句为单列结果,不允语句为单列结果,不允许多列结果。许多列结果。若若A0043销售员只有一个订单时,结果正确;否则出错。销售员只有一个订单时,结果正确;否则出错。5.3.2 涉及元组的条件涉及元组的条件计算员工号为计算员工号为“A0044”的销售员所销售的商品的种类和规格。的销售员所销售
25、的商品的种类和规格。Select type,spec From product Where prodid IN(Select prodid From salesitem Where orderno IN(Select orderno From salesorder Where empid=A0044);等价:等价:Select type,spec From salesitem,salesorder,product Where salesitem.orderno=salesorder.orderno AND salesitem.prodid=product.prodid AND salesord
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 语言 SQL
限制150内