数据库标准语言SQL.ppt
《数据库标准语言SQL.ppt》由会员分享,可在线阅读,更多相关《数据库标准语言SQL.ppt(338页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目 录上一页下一页退 出目 录上一页下一页退 出第五章第五章 数据库标准语言数据库标准语言SQLSQL第六章第六章 查询与视图查询与视图第七章第七章 程序设计基础程序设计基础第八章第八章 表单设计与应用表单设计与应用第十一章第十一章 开发应用程序开发应用程序第九章第九章 菜单设计与应用菜单设计与应用第十章第十章 报表设计报表设计目 录目 录上一页下一页退 出第五章 关系数据库标准语言SQLu本章要点:本章要点:SQL的基本概念的基本概念SQL的数据查询功能:简单查询、嵌套查询、的数据查询功能:简单查询、嵌套查询、联接查询、分组和计算查询、集合的并运算联接查询、分组和计算查询、集合的并运算SQL
2、的数据操作功能:删除(的数据操作功能:删除(DELETESQL)、)、插入(插入(INSERTSQL)、更新()、更新(UPDATESQL)SQL的数据定义功能:表的定义、表的删除、的数据定义功能:表的定义、表的删除、表结构的修改、视图的定义表结构的修改、视图的定义目 录上一页下一页退 出第五章 关系数据库标准语言SQL SQL是结构化查询语言是结构化查询语言Structured Query Language的缩写。查询是的缩写。查询是SQL语言语言的重要组成部分,但不是全部,的重要组成部分,但不是全部,SQL还包含还包含数据定义、数据操纵和数据控制功能等部分。数据定义、数据操纵和数据控制功能
3、等部分。现在所有的关系数据库管理系统都支持现在所有的关系数据库管理系统都支持SQL。FoxPro从从2.5For DOS版就开始支持版就开始支持SQL,现在的现在的VF当然在这方面更加完善。当然在这方面更加完善。目 录上一页下一页退 出表表5.1 SQL命令动词命令动词SQL功能功能 命令动词命令动词 数据查询数据查询 SELECT 数据定义数据定义 CREATE、DROP、ALTER数据操纵数据操纵 INSERT、UPDATE、DELETE 数据控制数据控制 GRANT、REVOKE 目 录上一页下一页退 出SQL语言具有如下主要特点:语言具有如下主要特点:SQL是一种一体化的语言,它包括了
4、数据定义、数据查询、数据是一种一体化的语言,它包括了数据定义、数据查询、数据操纵和数据控制等方面的功能,它可以完成数据库活动中的全部操纵和数据控制等方面的功能,它可以完成数据库活动中的全部工作。工作。SQL语言是一种高度非过程化的语言,它没有必要一步步地告诉语言是一种高度非过程化的语言,它没有必要一步步地告诉计算机计算机“如何如何”去做,而只需要描述清楚用户要去做,而只需要描述清楚用户要“做什么做什么”,SQL语言就可以将要求交给系统,自动完成全部工作。语言就可以将要求交给系统,自动完成全部工作。SQL语言非常简洁。语言非常简洁。SQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言可
5、以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。语言中以程序方式使用。VF是将是将SQL语言直接融入到自身的语语言直接融入到自身的语言之中,使用起来更方便。言之中,使用起来更方便。目 录上一页下一页退 出查询功能:查询功能:SELECT ALL|DISTINCT.,.FROM,WHEREANDGROUP BY,HAVINGORDER BYASC|DESC,ASC|DESC目 录上一页下一页退 出命令中各参数的含义如下:命令中各参数的含义如下:SELECT是该命令的主要关键字。是该命令的主要关键字。ALL|DISTINCT表示表示ALL和和DISTINCT任选其任选其 一,一
6、,ALL表表示所有的记录,示所有的记录,DISTINCT表示表示 去掉重复记录。去掉重复记录。FROM 说明要查询的数据来自哪个或哪些表,可以对单个说明要查询的数据来自哪个或哪些表,可以对单个表或多个表进行查询;表或多个表进行查询;WHERE说明查询条件,即选择元组说明查询条件,即选择元组的条件;的条件;目 录上一页下一页退 出GROUP BY 短语用于对查询结果进行分组,可以利用短语用于对查询结果进行分组,可以利用它进行分组汇总;它进行分组汇总;HAVING 短语必须跟随短语必须跟随GROUP BY使用,它用来限定使用,它用来限定分组必须满足的条件;分组必须满足的条件;ORDER BY 短语
7、用来对查询的结果进行排序短语用来对查询的结果进行排序目 录上一页下一页退 出简单查询简单查询例例1、从职工关系中检索所有工资值。、从职工关系中检索所有工资值。SELECT 工资工资 FROM 职工职工可以看到在结果中有重复值,若要去掉重复值只需要指定可以看到在结果中有重复值,若要去掉重复值只需要指定DISTINCT短语。短语。SELECT DISTINCT 工资工资 FROM 职工职工目 录上一页下一页退 出2、查询仓库关系中的所有元组。、查询仓库关系中的所有元组。SELECT*FROM 仓库仓库目 录上一页下一页退 出3、查询工资多于、查询工资多于1230元的职工号。元的职工号。SELECT
8、 职工号职工号 FROM 职工职工 WHERE 工资工资 1230目 录上一页下一页退 出 4、查询哪些仓库有工资多于、查询哪些仓库有工资多于1210元的职工。元的职工。SELECT DISTINCT 仓库号仓库号 FROM 职工表职工表 WHERE 工资工资 1210目 录上一页下一页退 出5、查询在仓库、查询在仓库“wh1”或或“wh2”工作,并且工资少于工作,并且工资少于1250元的元的职工号。职工号。SELECT 职工号职工号 FROM 职工表职工表;&(续行符)(续行符)WHERE 工资工资1230)AND(职工职工.仓库号仓库号=仓库仓库.仓库号仓库号注:由表可知,仓库和职工之间存
9、在着一个一对多的联系。当FROM之后的多个关系中含有相同的属性名时,这时必须用关系前缀直接指明属性所属的关系,如职工.仓库号,“.”前关系名,后是属性名目 录上一页下一页退 出2、找出工作在面积大于、找出工作在面积大于400的仓库的职工号以及这些职工工作所在的仓库的职工号以及这些职工工作所在的城市。的城市。SELECT 职工号职工号,城市城市 FROM 仓库仓库,职工表职工表;WHERE (面积面积400)AND(职工表职工表.仓库号仓库号=仓库仓库.仓库号仓库号)目 录上一页下一页退 出嵌套查询嵌套查询 SELECT嵌套查询是一种子查询,子查询的特征是能够将一嵌套查询是一种子查询,子查询的特
10、征是能够将一个查询的结果作为另一个查询的一部分,子查询是对查询结果个查询的结果作为另一个查询的一部分,子查询是对查询结果的查询。在的查询。在SQL中,有些查询不用子查询无法表达。子查询要中,有些查询不用子查询无法表达。子查询要加括号,并且与加括号,并且与SELECT语句的形式类似,也有语句的形式类似,也有FROM子句,以子句,以及可选择的及可选择的WHERE、GROUP BY和和HAVING子句等。子查询中子句等。子查询中的子句与的子句与SELECT语句中的子句格式相同,用于子查询时,它语句中的子句格式相同,用于子查询时,它们执行正常的功能,但是子查询和们执行正常的功能,但是子查询和SELEC
11、T语句还是有如下区语句还是有如下区别:别:目 录上一页下一页退 出(1)子查询通常必须生成单字段数据作为其查询结果,即必须)子查询通常必须生成单字段数据作为其查询结果,即必须是一个确定的项。若为一个集合,则需要使用谓词演算查询。是一个确定的项。若为一个集合,则需要使用谓词演算查询。(2)ORDER BY子句不能用于子查询,子查询结果只是被主查子句不能用于子查询,子查询结果只是被主查询内部使用,对用户是不可见的,所以对它们的任何排序都是询内部使用,对用户是不可见的,所以对它们的任何排序都是没有意义的。没有意义的。目 录上一页下一页退 出例例1、哪些城市至少有一个仓库的职工工资为、哪些城市至少有一
12、个仓库的职工工资为1250元?元?SELECT 城市城市 FROM 仓库仓库 WHERE 仓库号仓库号 IN;(SELECT 仓库号仓库号 FROM 职工职工 WHERE 工资工资=1250)目 录上一页下一页退 出2.查询所有职工的工资都多于查询所有职工的工资都多于1210元的仓库的信息。元的仓库的信息。此查询也可描述为:没有一个职工的工资少于或等于此查询也可描述为:没有一个职工的工资少于或等于1210元的仓元的仓库的信息。库的信息。SELECT*FROM 仓库仓库 WHERE 仓库号仓库号 NOT IN;(SELECT 仓库号仓库号 FROM 职工表职工表 WHERE 工资工资=1210)
13、目 录上一页下一页退 出注:尽管在“武汉“的”wh4”仓库还没有职工,但该仓库的信息也被检索出来了,所以必须认真分析检索要求,写出正确的SQL命令。如果要求排除那些还没有职工的仓库,检索要求可以叙述为:检索所有职工的工资都多于1210元的仓库的信息,并且该仓库至少要有一名职工。SELECT*FROM 仓库仓库 WHERE 仓库号仓库号 NOT IN;(SELECT 仓库号仓库号 FROM 职工表职工表 WHERE 工资工资 =1220 AND工资工资=1240)目 录上一页下一页退 出2、从供应商关系中检索出全部公司的信息,不要工厂或其他供应、从供应商关系中检索出全部公司的信息,不要工厂或其他
14、供应商的信息。这是一个字符串匹配的查询,显然应该使用商的信息。这是一个字符串匹配的查询,显然应该使用LIKE运运算符。算符。SELECT*FROM 供应商供应商 WHERE 供应商名供应商名 LIKE“%公司公司”目 录上一页下一页退 出3、找出不在北京的全部供应商信息。、找出不在北京的全部供应商信息。SELECT*FROM 供应商供应商 WHERE 地址地址!=“北京北京”SELECT*FROM供应商供应商WHERE NOT(地址地址=“北京北京”)NOT的应用范围很广,比如,可以有的应用范围很广,比如,可以有NOT IN、NOT BETWEEN等。若提出和例等。若提出和例1相反的请求,找出
15、工资不在相反的请求,找出工资不在1220元和元和1240元之间的全部职工信息,可以用命令:元之间的全部职工信息,可以用命令:SELECT*FROM 职工表职工表 WHERE 工资工资 NOT BETWEEN 1220 AND 1240目 录上一页下一页退 出排序排序使用使用SQLSELECT可以将查询结果排序,排的短语是可以将查询结果排序,排的短语是ORDER BY,具体格式如下:,具体格式如下:ORDER BY 字段字段1 ASCDESC,字段字段2 ASCDESC 由以上格式可看出,可以按升序(由以上格式可看出,可以按升序(ASC)或降序)或降序(DESC)排序,允许按一列或多列排序。)排
16、序,允许按一列或多列排序。目 录上一页下一页退 出1、按职工的工资值升序检索出全部职工信息。、按职工的工资值升序检索出全部职工信息。SELECT*FROM 职工表职工表 ORDER BY 工资(升序)工资(升序)目 录上一页下一页退 出2、先按仓库号排序,再按工资排序并输出全部职工信息。、先按仓库号排序,再按工资排序并输出全部职工信息。SELECT*FROM 职工表职工表 ORDER BY 仓库号仓库号,工资(升序)工资(升序)注:ORDER BY是对最终的查询结果进行排序,不可以在子查询中使用该短语。目 录上一页下一页退 出简单的计算查询简单的计算查询SQL命令不仅具有一般的检索能力,而且还
17、有计算方式的命令不仅具有一般的检索能力,而且还有计算方式的检索,比如检索职工的平均工资、检索某个仓库中职工的最高检索,比如检索职工的平均工资、检索某个仓库中职工的最高工资值等。用于计算检索的函数有:工资值等。用于计算检索的函数有:(1)COUNT计数计数(2)SUM求和求和(3)AVG计算平均值计算平均值(4)MAX求最大值求最大值(5)MIN求最小值求最小值这些函数可以用在这些函数可以用在SELECT短语中对查询结果进行计算。短语中对查询结果进行计算。目 录上一页下一页退 出1、找出供应商所在地的数目。、找出供应商所在地的数目。SELECT COUNT(DISTINCT 地址地址)FROM
18、供应商供应商 注:除非对关系中的元组个数进行计数,一般COUNT 函数应该使用DISTINCT。如:SELECT COUNT(*)FROM 供应商 将给出供应商关系中的记录数。目 录上一页下一页退 出2、求支付的工资总数。、求支付的工资总数。SELECT SUM(工资工资)FROM 职工职工 这个结果是职工关系中的工资值的总和,它并不管是否有重复值。这个结果是职工关系中的工资值的总和,它并不管是否有重复值。这时若使用命令:这时若使用命令:SELECT SUM(DISTINCT 工资工资)FROM 职工职工3、求北京和上海的仓库职工的工资总和。、求北京和上海的仓库职工的工资总和。SELECT S
19、UM(工资工资)FROM 职工表职工表 WHERE 仓库号仓库号 IN;(SELECT 仓库号仓库号 FROM 仓库仓库 WHERE 城市城市=”北北京京”OR 城市城市=”上海上海”)4、求所有职工的工资都多于、求所有职工的工资都多于1210元的仓库的平均面积。元的仓库的平均面积。SELECT AVG(面积面积)FROM 职工表职工表 WHERE 仓库号仓库号 NOT IN;(SELECT 仓库号仓库号 FROM 职工表职工表 WHERE 工资工资=1210)目 录上一页下一页退 出注:以上结果的运算包含了没有职工的wh4仓库。若要排除没有职工的仓库,就改为:SELECT AVG(工资工资)
20、FROM 职工表职工表 WHERE 仓库号仓库号 NOT IN;(SELECT 仓库号仓库号 FROM 职工表职工表 WHERE 工资工资=2注:HAVING子句总是跟在GROUP BY子句之后,不可以单独使用。HAVING子句和WHER子句不矛盾,在查询中是先用WHERE子句限定元组,然后进行分组,最后再用HAVING子句限定分组。目 录上一页下一页退 出利用空值查询利用空值查询 在第四章介绍过空值的概念,在第四章介绍过空值的概念,SQL支持空值,当然也可以支持空值,当然也可以利用空值进行查询。利用空值进行查询。IS NULLIS NOT NULL假设在订购单关假设在订购单关系中,一名职工正
21、在准备订购单,但尚未选定供应商,这样若系中,一名职工正在准备订购单,但尚未选定供应商,这样若把信息存入数据库,则供应商号和订购日期两个属性均为空值。把信息存入数据库,则供应商号和订购日期两个属性均为空值。目 录上一页下一页退 出1、找出尚未确定供应商的订购单。、找出尚未确定供应商的订购单。SELECT*FROM 订购单订购单 WHERE 供应商号供应商号 IS NULL注:查询空值是要使用IS NULL,而NULL是无效的,因为空值不是一个确定的值,所以不能用”=”运算符进行比较。目 录上一页下一页退 出2、列出已经确定了供应商的订购单信息。、列出已经确定了供应商的订购单信息。SELECT*F
22、ROM 订购单订购单 WHERE 供应商号供应商号 IS NOT NULL目 录上一页下一页退 出别名与自联接查询别名与自联接查询在联接操作中,经常需要使用关系名作前缀,有时这样在联接操作中,经常需要使用关系名作前缀,有时这样显得很麻烦。因此,显得很麻烦。因此,SQL允许在允许在FROM短语中为关系名定义短语中为关系名定义别名,格式为:别名,格式为:目 录上一页下一页退 出比如:如下的联接语句是一个基于比如:如下的联接语句是一个基于4个关系的联接查询,其中必须个关系的联接查询,其中必须使用关系名作前缀;使用关系名作前缀;SELECT 供应商供应商 FROM 供应商供应商,订购单订购单,职工职工
23、,仓库仓库;WHERE 地址地址=”北京北京”AND城市城市=”北京北京”;AND 供应商供应商.供应商号供应商号=订购单订购单.供应商号供应商号;AND 订购单订购单.职工号职工号=职工职工.职工号职工号;AND 职工职工.仓库号仓库号=仓库仓库.仓库号仓库号目 录上一页下一页退 出在上面的查询中,如果使用别名就会简单一些,如下是使用了别在上面的查询中,如果使用别名就会简单一些,如下是使用了别名的同样的联接查询语句。名的同样的联接查询语句。SELECT 供应商供应商 FROM 供应商供应商 S,订购单订购单 P,职工职工 E,仓库仓库 W;WHERE 地址地址=”北京北京”AND城市城市=”
24、北京北京”;AND S.供应商号供应商号=P.供应商号供应商号;AND P.职工号职工号=E.职工号职工号;AND E.仓库号仓库号=W.仓库号仓库号目 录上一页下一页退 出 在这个例子中,别名并不必须的,但是在关系的自联接操在这个例子中,别名并不必须的,但是在关系的自联接操作中,别名就是必不可少的了。作中,别名就是必不可少的了。SQL不仅可以对多个关系实行不仅可以对多个关系实行联接操作,也可以将同一关系与其自身进行联接,这种联接就联接操作,也可以将同一关系与其自身进行联接,这种联接就称为自联接。在可以进行这种自联接操作的关系上,实际存在称为自联接。在可以进行这种自联接操作的关系上,实际存在着
25、一种特殊的递归联系,即关系中的一些元组,根据出自同一着一种特殊的递归联系,即关系中的一些元组,根据出自同一值域的两个不同的属性,可以与另外一些元组有一种对应关系值域的两个不同的属性,可以与另外一些元组有一种对应关系(一对多的联系)。(一对多的联系)。目 录上一页下一页退 出例:例:雇员关系(雇员号,雇号姓名,经理)其中雇员号和经理两个雇员关系(雇员号,雇号姓名,经理)其中雇员号和经理两个属性出自同一个值域,同一元组的这两个属性是属性出自同一个值域,同一元组的这两个属性是“上、下级上、下级”关系。关系。目 录上一页下一页退 出雇员号雇员号 雇员姓名雇员姓名 经理经理目 录上一页下一页退 出雇员号
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 标准 语言 SQL
限制150内