第5章关系数据库标准语 言S QL

上传人:w****i 文档编号:91050195 上传时间:2019-06-21 格式:PPT 页数:126 大小:757KB
返回 下载 相关 举报
第5章关系数据库标准语 言S QL_第1页
第1页 / 共126页
第5章关系数据库标准语 言S QL_第2页
第2页 / 共126页
第5章关系数据库标准语 言S QL_第3页
第3页 / 共126页
第5章关系数据库标准语 言S QL_第4页
第4页 / 共126页
第5章关系数据库标准语 言S QL_第5页
第5页 / 共126页
点击查看更多>>
资源描述

《第5章关系数据库标准语 言S QL》由会员分享,可在线阅读,更多相关《第5章关系数据库标准语 言S QL(126页珍藏版)》请在金锄头文库上搜索。

1、第5章 关系数据库标准语言SQL,SQL是Structured Query Language的缩写,即结构化查询语言。它是关系数据库的标准语言。查询是SQL语言的重要组成部分,SQL还包含数据定义、数据操作和数据控制功能等内容。SQL已经成为关系数据库的标准数据语言,所以现在所有的关系数据库管理系统都支持SQL。掌握SQL语法可以更加灵活地建立查询和视图。,5.1 SQL简介,SQL语言来源于20世纪70年代IBM的一个被称为SEQUEL(Structured English Query Language)的研究项目。20世纪80年代,SQL由ANSI进行了标准化,它包括了定义和操作数据的指令

2、。由于它具有功能丰富、使用方式灵活、语言简洁易学等突出特点,在计算机界深受广大用户欢迎,许多数据库生产厂家都相继推出各自支持SQL标准。1998年4月,ISO提出了具有完整性特征的SQL,并将其定为国际标准,推荐它为标准关系数据库语言。1990年,我国也颁布了信息处理系统数据库语言SQL,将其定为中国国家标准。,5.1.1 SQL语言的主要特点,(1)一体化语言 (2)高度非过程化 (3)语言简洁 (4)统一的语法结构对待不同的工作方式,5.1.2 SQL语句的执行,SQL语句可以在命令窗口中执行,也可以作为查询或视图(的内容)被使用,还可以在程序文件被执行。 表5.1 SQL命令动词 SQL

3、功能 命令动词 数据查询 SELECT 数据定义 CREATE、DROP、ALTER 数据操作 INSERT、UPDATE、DELETE 数据控制 GRANT、REVOKE ,5.2 查询功能,数据库中最常见的操作是数据查询,也是SQL的核心。,5.2.1 SQL语法,SQL给出了简单而又丰富的查询语句形式,SQL的查询命令也称作SELECT命令,它的基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行。 格式: SELECT ALL|DISTINCT TOP表达式 别名 Select表达式 AS 列名 , 别名 Select表达式 AS 列名 FORM 数据库名 !

4、 表名 ASLocal_Alias INNER | LEFT OUTER | RIGHT OUTER | FULL OUTER JOIN 数据库名 ! 表名 ASLocal_AliasON联接条件 INTO 查询结果 |TO FILE 文件名 ADDITIVE | TO PRINTER PROMPT | TO SCREEN PREFERENCE PreferenceNameNOCONSOLEPLAINNOWAIT WHERE 联接条件1 AND 联接条件2AND | OR 筛选条件 GROUP BY 组表达式 , 组表达式 HAVING 筛选条件 UNION ALL SELECT命令 ORDE

5、R BY 关键字表达式 ASC |DESC , 关键字表达式 ASC |DESC 说明:SELECT-SQL命令的格式包括三个基本子句:SELECT子句、FROM子句、WHERE子句,还包括操作子句:ORDER子句、GROUP子句、UNION子句以及其他一些选项。,SELECT 查询项目 FROM 数据库源 WHERE 查询条件 GROUP BY 分组表达式 HAVING 筛选条件 ORDER BY 排序关键字表达式,1.SELECT子句,SELECT子句用来指定查询结果中的数据。其中: ALL选项:表示选出的记录中包括重复记录,这时缺省值;DISTINCT则表示选出的记录中不包括重复记录。

6、TOP表达式选项:表示在符合条件的记录中,选取指定数量或百分比(表达式)记录。别名Select表达式AS列名选项中的别名是字段所在的表名;Select表达式,可以是字段名或字段表达式;列名用于指定输出时使用的列标题,可以不同于字段名。 Select表达式用一个*号来表示时,指定所有的字段。,2.FROM子句,用于指定查询的表与联接类型。其中: JOIN关键字用于联接其左右两个表名所指定的表。INNER | LEFTOUTER | RIGHTOUTER | FULLOUTER选项,指定两表联接时的联接类型,联接类型有4种,如表5.2所示。其中的OUTER选项,表示外部联接,即允许满足联接条件的记

7、录,又允许不满足联接条件的记录。若省略OUTER选项,效果不变。,3.WHERE子句,用来指定查询的条件。其中的 联接条件 指定一个字段,该字段连接FROM子句中的表。 如果查询中包含不止一个表,就应该为第一个表后的每一个表指定连接条件。,4.GROUP BY子句 对查询结果按组表达式值分组,常用于分组统计。,5. HAVING子句 当含有GROUP BY子句时,HAVING子句可用作记录查询的限制条件;无GROUP BY 子句时,HAVING子句的作用如同 WHERE子句。,6. ORDER BY子句 指定查询结查中记录按关键字表达式排序,默认升序。选项ASC表示升序,DESE表示降序。,7

8、.其他子句和选项,UNION子句:可以用UNION子句嵌入另一个SELECT-SQL命令,使这两个命令的查询结果合并输,但输出字段的类型和宽度必须一致。UNION子句默认组合结果中排除重复行,使用ALL,则允许包含重复行。 SELECT查询命令的使用非常灵活,用它可以构造各种各样的查询。本章将通过大量的实例来介绍SELECT命令的使用方法。,5.2.2 简单查询,简单查询只含有基本子句,可有简单的查询条件。 【5.1】在zgda表中,检索所有字段。 SELECT * FROM zgda,5.2.2 简单查询,【5.2】在zggz表中,检索实发工资大于2000元的记录。 SELECT 编号,姓名

9、,实发工资 FROM zggz WHERE 实发工资2000,5.2.2 简单查询,【5.3】在zgda表中,检索所有职称名称。 SELECT DISTINCT 职称 FROM zgda 【5.4】在zgda表中,检索职称是助教的记录。 SELECT 编号,姓名,职称 FROM zgda WHERE 职称=“助教“,5.2.2 简单查询,【5.5】在zggz表中,检索实发工资小于1000大于1800元的记录。 SELECT 编号,姓名,实发工资 FROM zggz WHERE 实发工资1000 AND 实发工资1800,5.2.3 几个特殊运算符,在SQL语句中,WHERE子句后面的联接条件,

10、除了可以使用VFP语言中的关系表达式以及逻辑表达外,还可以使用几个特殊运算符: (1)NOTIN:表示不在之中。 (2)NOTBETWEENAND:表示不在之间。 (3)NOTLIKE:表示不与匹配。,5.2.3 几个特殊运算符,下面以实例来说明此用法。 说明: (1)NOT运算符来设计否定条件。 (2)LIKE运算符提供两种字符串匹配方式,一种是使用下划线符号“_”,匹配一个和任意字符,另一种是使用百分号“”,匹配0个或多个任意字符。 (3)IN运算符,格式为IN(常量1,常量2,)。含义为查找和常量相等的值。,5.2.3 几个特殊运算符,【5.6】在zgda表中,检索性别是男的记录。 SE

11、LECT DISTINCT 编号,姓名,性别 FROM zgda WHERE 性别 LIKE “男“ 可以使用NOT运算符来设计否定条件,检索性别不是男的记录。 SELECT DISTINCT 编号,姓名,性别 FROM zgda WHERE NOT(性别 LIKE “男“),5.2.3 几个特殊运算符,【5.7】在zgda表中,检索所有姓刘的记录。 SELECT 编号,姓名 FROM zgda WHERE 姓名 LIKE “刘%“,5.2.3 几个特殊运算符,【5.8】在zgda表中,检索所有姓陈和姜的记录。 SELECT 编号,姓名 FROM zgda WHERE 姓名 IN(“陈“,“姜

12、“) 上式可以改为VFP条件,执行结果是一样的。 SELECT 编号,姓名 FROM zgda WHERE 姓名=“陈“ OR 姓名=“姜“,5.2.4 简单的联接查询,联接是关系的基本操作之一,联接查询是一种基于多个关系的查询。 【5.9】在zgda表和zggz表中,检索实发工资大于2000元的记录。 SELECT zgda.编号,zgda.姓名,zggz.实发工资 FROM zgda,zggz WHERE (实发工资2000) AND (zgda.编号=zggz.编号) zgda.编号=zggz.编号 &编号是联接的条件,5.2.4 简单的联接查询,【5.10】在zgda表和zggz表中,

13、检索职称是讲师, 并且实发工资大于1900元的记录 SELECT zgda.编号,zgda.姓名,zgda.职称,zggz.实发工资 FROM zgda,zggz WHERE (职称=“讲师“) AND (实发工资1900) AND (zgda.编号=zggz.编号),5.2.5 嵌套查询,为了讨论嵌套查询,在此引入一个订货管理数据库,此数据库涉及4个表(4 个关系),即仓库表、职工表、订购单表、供应商表,4个表的内容见教材 P.90。,5.2.5 嵌套查询,【5.11】在仓库表和职工表中,检索哪些城市至少有一个仓库的职工工资为1250元 SELECT 城市 FROM 仓库 WHERE 仓库号

14、 IN (SELECT 仓库号 FROM 职工 WHERE 工资=1250) 在这个命令中含有两个SELECT-FROM-WHERE查询块,即内层查询块和外层查询块,内层查询块 检索到的仓库号值是WH1和WH2, 这里IN相当于集合运算符。这样就可写出等价的命令: SELECT 城市 FROM 仓库 WHERE 仓库号 IN(“WH1“, “WH2“),5.2.5 嵌套查询,【5.12】在仓库表和职工表中,检索所有职工的工资都多于为1210元的仓库信息。 SELECT * FROM 仓库 WHERE 仓库号 NOT IN(SELECT 仓库号FROM职工 WHERE工资 =1210),5.2.

15、5 嵌套查询,内层SELECTFROMWHERE查询块指出所有职工的工资少于或等于1210元的仓库的仓库号值的集合,在这里该集合只有一个值“WH1”;然后从仓库关系中检索元组的仓库号属性值不在该集合中的每个元组。刚才的检索出现了错误,尽管在“武汉”的“WH4”仓库还没有职工,但该仓库的信息也被检索出来了。所以必须认真分析检索要求,写出正确的SQL命令。如果要求排除那些还没有职工的仓库,检索要求可以叙述为:检索所有职工的工资都多于1210元的仓库的信息,并且该仓库至少要有一名职工。这样描述就很清楚了,因为我们对没有职工的仓库不感兴趣。 SELECT * FROM 仓库 WHERE 仓库号 NOT IN (SELECT 仓库号 FROM 职工 WHERE 工资=1210) AND 仓库号 IN(SELECT 仓库号 FROM 职工) 这样内层是两个并列的查询,在结果中将不包含没有职工的仓库信息。,5.2.5 嵌套查询,【5.13】检索出和职工E4挣同样工资的所有职工。 SELECT 职工号 FROM 职工 WHERE 工资= (SELECT 工资 FROM 职工 WHERE 职工号=“E4“),5.2.5 嵌套查询,【5.14

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号