第6章 关系数据库标准语言_第1页
第6章 关系数据库标准语言_第2页
第6章 关系数据库标准语言_第3页
第6章 关系数据库标准语言_第4页
第6章 关系数据库标准语言_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章关系数据库标准语言——SQL

6.1关系数据库标准语言6.2SQL语句6.1关系数据库标准语言在关系数据库中普遍使用一种介于关系代数和关系演算之间的数据库操作语言SQL,SQL的含义即结构化查询语言(StructuredQueryLanguage)。

SQL最早是1974年由Boyce和Chamberlin提出,是StructuredQueryLanguage的缩写,并作为IBM公司研制的关系数据库管理系统原型SystemR的一部分付诸实施。自SQL成为国际标准语言以后,各个数据库厂家纷纷推出各自的SQL软件或与SQL能够通信的的接口软件

6.1关系数据库标准语言SQL语言之所以能够为用户和业界所接受,成为国际标准,是因为它是一个综合的、通用的、功能极强的、简学易用的语言。其主要特点包括:综合统一高度非过程化用同一种语法结构提供两种使用方式语言简洁,易学易用6.2SQL语句在ACCESS2003中,可以通过查询对象的SQL窗口执行SQL语句。

6.2.1数据定义语言(1)表的创建、修改和删除表的创建SQL语言使用CREATETABLE语句建立基本表。其一般格式为:CREATETABLE<表名>(<字段名1><数据类型>[NOTNULL][索引1],[<字段名2><数据类型>[NOTNULL][索引2],﹍,][,CONSTRAINT复合字段索引][,﹍﹍])

功能:创建一个名为“表名”的数据表,该数据表由若干个字段组成。

6.2.1数据定义语言(1)表的创建、修改和删除表的创建其中,“<>”中的内容是必选项,“[]”中的内容是可选项。本书以下各章节也遵循这个约定。<表名>:规定了所定义的表的名字,在一个数据库中不允许有两个基本表同名。<字段名>:规定了该字段的名称。表中可以有若干字段,不能有两个字段同名。<数据类型>:规定了该字段的数据类型。参见表6-2。NOTNULL,UNIQUE是指对某一列设置的约束条件。CONSTRAIN子句用来建立索引。【例6-1】在“ZHJW”数据库中创建四个表:解:创建表的语句分别如下。CREATETABLE

学生表(学号CHAR(6),姓名CHAR(8),性别CHAR(2),所属年级CHAR(4),专业CHAR(10))CREATETABLE

课程表(课号CHAR(3)NOTNULL,课名CHAR(20),开课教师CHAR(8),总学时INTEGER,学分INTEGER)CREATETABLE

必修课表(课号CHAR(3)NOTNULL,必修专业CHAR(10))CREATETABLE

必修课成绩表(学号CHAR(6)NOTNULL,课号CHAR(3)NOTNULL,成绩INTEGER)(1)表的创建、修改和删除修改表的结构添加字段语句格式:ALTERTABLE<表名>ADDCOLUMN<新字段名><数据类型>[长度][NOTNULL]]功能:为“表名”指定的表添加一个名为“字段名”的字段,字段的数据类型由“类型”指定。NOTNULL与长度的含义同CREATETABLE语句。【例6-2】在已定义的课程表中增加开课学期字段。解:ALTERTABLE

课程表ADDCOLUMN开课学期INTEGER(1)表的创建、修改和删除删除字段语句格式:ALTERTABLE

表名DROPCOLUMN字段名功能:为“表名”指定的表删除一个名为“字段名”的字段。【例6-3】在已定义的课程表中删除开课日期字段。解:ALTERTABLE

课程表DROPCOLUMN开课学期(1)表的创建、修改和删除删除表语句格式:DROPTABEL

表名功能:删除名为“表名”的表。【例6-4】删除“ZHJW”数据库中的“课程”表。解:语句如下。DROPTABLE课程表(2)索引的建立与删除

建立索引创建索引可使用SQL的CREATEINDEX

语句,该语句的格式和功能如下:语句格式:CREATE[UNIQUE]INDEX

索引名ON表名(字段名1[DESC|ASC][,字段名2[DESC|ASC],…])[WITHPRIMARY|DISALLOWNULL|IGNORENULL]功能:为“表名”指定的表创建一个名为“索引名”的索引。【例6-5】为“学生”表创建一个名为“XH”的索引,该索引按照“学号”字段的升序排列,为主键。为“课程”表创建一个名为“KH”的索引,该索引按照“课号”字段的降序排列,为主键。为“必修课”表创建一个名为“KHZY”的索引,该索引按照“课号”的升序和“专业”的降序排列,索引字段中不允许使用空值。为“必修课成绩”表创建一个名为“XHKH”的索引,该索引按照“学号”的升序和“课号”的升序排列。

(2)索引的建立与删除

删除索引语句格式:DROPINDEX

索引名ON表名功能:删除“表名”指定的表中由“索引名”指定的索引。【例6-6】删除必修课成绩表中的XH索引。解:使用的SQL语句如下。DROPINDEXXHON必修课成绩6.2.2数据查询功能(1)SELECT语句格式及功能说明

数据查询是数据库中最常见的操作,SQL中实现查询的语句是SELECT语句,该语句有一系列的子句,通过这些子句可以实现对数据库的任何查询。

该语句的格式和功能如下:SELECT[ALL|DISTINCT|TOPN|TOPNPERCENT]*|列名1或表达式1[AS列标题1][,列名2或表达式2[AS列标题2]…][INTO表名]FROM

表名1[,表名2][WHERE

条件][GROUPBY

列名1[,列名2]…][HAVING

条件][ORDERBY

列名1[ASC|DESC][,列名2[ASC|DESC]…]][说明]ALL|DISTINCE|TOPN|TOPNPERCENT:选“ALL”时表示值相同的记录也包含在结果中,这是默认设置;选“DISTINCT”时表示对于相同的记录只包含第一条记录;选“TOPN”时只返回查询结果的前N条记录,“N”为可变参数;选“TOPNPERCENT”时表示只返回查询结果中的前百分之N条记录,N为可变参数。*|列名1或表达式1[AS列标题1][,列名2或表达式2[AS列标题2]…]:用于指定查询结果中包含的选定项,可以是列名或表达式,AS后面的“列标题”用来定义对应列或表达式的标题。在“列名1”、“列名2”等别名的前面可能有包含该列的表名。若选“*”表示输出列是由FROM子句中指定的表中的所有字段。INTO子句:用于查询生成新表,<表名>为新表的名称。[说明]FROM表名1[IN数据库名1]别名1[,表名2[IN数据库名2]别名2…]:用于指定查询操作从哪些表中获取数据,每个表可以取一个“别名”,这样就可以在选定项中用“别名”来引用相应表中的字段。WHERE条件:用于设定查询条件或多个表之间的连接条件。GROUPBY

列名1[,<列名2>…]:用于指定按照哪些列进行分组,以便进行统计。HAVING条件:只有在指定分组的查询中才有效,只有满足条件的组的信息才包含在查询结果中。GROUPBY列名1[ASC|DESC][,列名[ASC|DESC]…]:用于指定按照哪些列对查询结果进行排序,ASC代表升序,DESC代表降序,默认为升序。格式中的所有条件均可以是逻辑表达式或关系表达式,使用的运算符有:AND、OR、NOT、=、<、<=、>、>=、<>、BETWEEN、LIKE、IN等。(2)简单查询

【例6-7】列出全部学生表信息。解:命令如下:SELECT*FROM

学生表

【例6-8】列出“工商管理”专业的全部学生的学号、姓名和所属年级。解:Select

学号,姓名,所属年级from

学生Where

专业=“工商管理”

【例6-9】求“101”号课成绩在60分以上的学生的姓名和成绩。并按成绩由高到低排序。解:Select学号,成绩From

必修课成绩表WHERE

课号="101"and成绩>=60ORDERBY

成绩DESC

【例6-10】在必修课成绩表中找出所有没有成绩的学号和课号。SELECT

学号,课号FROM

必修课成绩表WHERE

成绩ISNULL三个专用于查询的谓词

BETWEEN…AND:当要求某个字段值在某个区间内时,可使用该谓词,否定的形式是NOTBETWEEN…AND。IN:当要求字段值是几个值中的一个时,可使用该谓词,否定的形式是NOTIN。LIKE:主要用于在查询条件中对字符串进行比较。LIKE提供两种字符串匹配方式,一种是使用“?”匹配任意一个字符,另一种是使用“*”匹配0个或多个字符的字符串。它的否定形式为NOTLIKE。【例6-11】查找成绩在85和95之间的学生的选课得分情况。SELECT*FROM

必修课成绩表WHERE

成绩BETWEEN85AND95【例6-12】查找出“2002”和“2003”级学生的学号和姓名。SELECT学号,姓名FROM

学生表WHERE

所属年级IN("2002","2003")

【例6-13】查询“02”和“03”级学生的学习情况。已知学号的前2位是学生的年级。SELECT*FROM

必修课成绩表WHERE

学号Like"02*"Or学号Like"03*"(3)联接查询

多个表之间的联接运算特别是自然联结运算是关系数据库中经常用到的一种操作。SQL语言提供了查询多个表中信息的操作,这种多个表之间的查询功能称之为联接查询。若按对应字段相等将一个表中的行与另一个表中的行联接起来,称为等值查询,若两个表对应字段同名就相当于内联结。

【例6-14】查询出所有学生的必修课的学习情况,查询结果中包含学号、姓名、课程名称和成绩。解:SELECT

学生表.学号,学生表.姓名,必修课成绩表.课号,必修课成绩表.成绩FROM

学生,必修课成绩表WHERE

学生表.学号=必修课成绩表.学号AND课程表.课号=必修课成绩表.课号【例6-14】【例6-15】列出修“101”号课的学生姓名及成绩。SELECT

学生表.姓名,必修课成绩表.成绩FROM

学生表,必修课成绩表WHERE

学生表.学号=必修课成绩表.学号AND必修课成绩表.课号="101"

(4)嵌套查询

嵌套查询是指在一个外层查询中包含有另一个内层查询。其中外层查询称为主查询,内层查询称为子查询。SQL允许多层嵌套,由内而外地进行分析,子查询的结果作为主查询的查询条件。根据子查询嵌套的层数,可以分成单层嵌套查询和多层嵌套查询。把仅嵌套一层子查询的SELECT命令称为单层嵌套查询,把嵌套的子查询多于一层的查询称为多层嵌套查询。

返回单值的子查询

【例6-16】列出所有选修了“微观经济学”的学生的学号。解:SELECT学号FROM必修课成绩表WHERE课号=(SelectDISTINCT课号FROM课程表WHERE课名="微观经济学")返回一组值的子查询

当子查询返回的值不止一个,则必须在WHERE子句中说明怎样使用这些返回值。使用方式有如下三种。字段名|表达式比较运算符ANY|SOME|ALL

(子查询结果集);字段名|表达式[NOT]IN

(子查询结果集);字段名|表达式[NOT]EXISTS

(子查询结果集)各谓词的含义如下。ANY或SOME:这两个谓词的功能完成一样,只要子查询结果集中任一个值满足给定的条件,结果就是真。ALL:只有在子查询集中的所有值均满足条件时结果才为真。IN:如果表达式或字段的值包含在子查询中则表达式值为真,而NOTIN正相反。EXISTS:若子查询中有返回记录,则结果为真。【例6-17】ANY和SOME的用法求选修“101”号课的学生的学号和成绩,这些学生的成绩比选修“102”号课的最低成绩要高。解:SELECT

学号,成绩FROM

必修课成绩表WHERE课号="101"and成绩>any(select成绩FROM必修课成绩表WHERE课号='102')图6-13例6-17的执行结果【例6-18】ALL的用法求选修了“101”号课的学生的学号和成绩,这些学生的成绩比选修了“102”课的任何学生的成绩都要高。解:SELECT

学号,成绩FROM

必修课成绩表WHERE课号="101"and成绩>ALL(SELECT成绩FROM必修课成绩表WHERE课号='102')图6-14例6-18的执行结果【例6-19】IN的用法查找“经济管理”专业的所有必修课的设置情况。解:SELECT*FROM

课程表WHERE

课号IN

(SELECT课号FROM必修课表WHERE必修专业="经济管理")

【例6-20】EXISTS的用法使用EXISTS谓词从“必修课成绩”表中进行查询,查询条件是:如果“必修课”表中存在课号为“101”的课程,则从“必修课成绩”表中选出所有选修“101”号课程的记录。SELECT*FROM

必修课成绩表WHERE

课号="101"ANDEXISTS(SELECT*FROM必修课表WHERE课号="101")组函数查询

SELECT语句不仅可以通过WHERE子句查找满足条件的数据,还可以通过组函数对满足条件的数据进行示最大值、最小值、平均值、求和、计数等统计运算。AVG():求数值字段的平均值。COUNT():计算所选数据的行数,在分组统计中,用来计算每组数据的行数;其特殊形式是COUNT(*),用来统计满足WHERE子句中逻辑表达式的元组个数。MIN():求字符型、日期型或数值型字段的最小值。MAX():求字符型、日期型或数值型字段的最大值。SUM():计算数值列的总和。这些组函数一般从一组值中计算出一个汇总信息,可使用GROUPBY子句把字段按照值分为多个组,对每个组进行统计。

【例6-21】列出各门课的平均成绩、最高成绩、最低成绩和选课人数。解:SELECT

课号,AVG(成绩)AS平均成绩,MAX(成绩)AS最高成绩,MIN(成绩)AS最低成绩,COUNT(学号)AS人数

FROM

必修课成绩表GROUPBY

课号【例6-22】列出至少选修了三门课的学生姓名。

解:SELECT

姓名FROM

学生表WHERE

学号IN

(SELECT学号FROM必修课成绩表GROUPBY学号HAVINGCOUNT(*)>=3)图6-18例6-22的执行结果6.2.3数据操纵功能(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论