数据库原理及应用-(第12章-SQL语句)_第1页
数据库原理及应用-(第12章-SQL语句)_第2页
数据库原理及应用-(第12章-SQL语句)_第3页
数据库原理及应用-(第12章-SQL语句)_第4页
数据库原理及应用-(第12章-SQL语句)_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

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

文档简介

SQL语句计算中心王婧概述SQL:StructuredQueryLanguage

结构化查询语言理论基础:基于关系代数和关系演算概述优势在于:

语法简洁,功能极为强大和全面,自推出以来,便被广泛采用,历经多次改进、完善以及标准化工作,其地位更加稳固,现已成为关系数据库的标准语言。概述几乎所有的关系数据库管理系统,都毫无例外的支持SQL语言,而且在不同的数据库管理系统中,SQL语言的差别很小,所以,只要掌握了标准SQL语言,就可以应用到任何其他关系数据库管理系统上。目录12.1SQL概述12.2数据查询12.3数据定义12.4数据操纵12.1SQL概述SQL语言诞生不过短短的二十几年,为何能这么快的风靡世界,成为数据库世界的第一语言呢??与它优异特性是分不开的12.1.1SQL的历史和未来展望SQL的前身是1972年提出的SQUARE语言1974年Boyce和Chamberlin首先提出了SQL结构化查询语言1975年至1979年在IBM公司和关系数据库系统SystemR上逐步实现12.1.1SQL的历史和未来展望1986年10月ANSI(美国国家标准化委员会)公布了第一个SQL语言标准,这个标准被命名为SQL86标准。1987年ISO(国际标准化组织)采纳了他作为国际标准。12.1.1SQL的历史和未来展望此后,经过不断的完善和扩充,ISO于1989年推出了SQL89标准,这个标准增加了完整性标准。1992年,ISO又颁布了SQL2标准,亦称为SQL92标准目前新的SQL标准SQL3已经呼之欲出。12.1.1SQL的历史和未来展望现状:

SQL语言有着坚强的理论基础,其形式简洁,功能丰富等诸多优点,从一开始就受到各大数据库厂商的重视,许多数据库采用SQL作为数据库语言或者为自己的产品添加SQL接口。12.1.1SQL的历史和未来展望未来展望:

SQL已经成为关系数据库标准语言,并且还在不断改进和完善,不断吸收新的数据库概念,在数据库语言中的地位可以说是如日中天。12.1.2SQL数据库结构及其基本概念用户1用户2用户3用户4视图2视图1基本表4基本表3基本表2基本表1存储文件3存储文件2存储文件1SQL用户视图基本表存储文件外模式概念模式内模式12.1.3SQL特点1、语法简洁,使用方便

SQL语法十分简洁,适用于不同层次的计算机用户。总共只有九个简单的动词,却包含了从数据定义、数据操作到访问数据控制、数据查询这四个对数据库操作的主要功能。12.1.3SQL特点下表列出了这九个动词和它们分别所属功能功能动词数据定义CREATE,DROP,ALTER数据操作UPDATE,DELETE,INSERT数据控制GRANT,REVOTE数据查询SELECT其中,SELECT是SQL语言最强大的功能之一,只要巧妙组合,就可以完成所需查询任务12.1.3SQL特点2、非过程化查询

所谓非过程化查询,是指用户在对数据库进行查询操作时,不必关心或指出程序如何去或怎么去完成查询,而只需要告诉程序做什么就行了。

12.1.3SQL特点用户不必关心许多与查询具体实现过程中有关细节,如访问路径、访问方式等,而专注于关心自己所需要的查询。12.1.3SQL特点网状模型和层次模型的数据操作语言都是过程化的,其使用难度大,因而应用范围受到限制。12.1.3SQL特点相反,作为关系数据库标准语言的SQL语言,由于其高度的非过程化而极大地方便了用户的使用,获得了用户的青睐。12.1.3SQL特点3、完备而强大的功能

多数非关系数据库的数据库语言都只能适应这种数据库的一种模式,因而常常要为不同的模式设置不同的语言。

12.1.3SQL特点而关系数据库语言SQL集数据定义语言(DDL),数据操作语言(DML)以及控制于一身,跨越了数据库的三级模式,可以用它方便的进行数据模式的修改或其他数据操作。12.1.3SQL特点4、易移植性

SQL语言的适应性很好,它既是自含性语言,又可以作为嵌入式语言嵌入宿主语言中与宿主语言的语句进行交互。12.1.3SQL特点在关系数据库管理系统中,SQL可以在交互环境下供终端用户使用如:VisualFoxPro6.0就可以在命令窗口中直接键入Select-SQL命令进行查询。12.1.3SQL特点在高级语言如:Fortran、Cobol、Pascal、C中,也可以嵌入SQL语言,与程序语句进行交互。12.1.3SQL特点值得注意的是,新一代的RAD工具(RapidApplicationDevelopment,快速应用程序开发工具),如Borland的Delphi、C++

builder、Microsoft的VisualBasic等都提供了对SQL语言完整而强大的支持。12.1.3SQL特点5、计算机实现的难度

关系数据库以二维表来表达关系。SQL主要是对这些二维表进行操作。而二维表的许多操作如投影运算、连接等都与矩阵运算有关,因而其效率比起网状和层次模型DML较低,不过随着SQL对自身在计算机实现方面不断改进和计算机硬件技术飞速发展,这种差别已经越来越小。12.2数据查询SELECT语句是SQL语言唯一的查询语言,它是SQL语言的核心,担当了SQL查询的所有任务。掌握了SELECT查询语句就等于掌握了SQL语言的精髓。12.2数据查询格式如下:

SELECT[ALL|DISTINCT]A1,A2…AnFROMR1,R2,….Rm[WHEREF1][GROUPBYC1][HAVINGF2][ORDERBYC2][ASC|DESC]12.2数据查询其中:

A1,A2,….An表示目标属性列

R1,R2,….Rm表示基本表或视图名

F1、F2为条件表达式(P200常用运算符)

C1、C2为列名(即分组字段名)

ALL表示选择所有符合条件的记录,而不管它们是否重复

DISTINCT则显示只列出相同元组的第一个12.2数据查询GroupBy:查询结果是表按<分组字段名>

分组的记录集。

Having:将指定表满足<条件表达式>,并按

<分组字段名>结果组成的记录集,它必须与GroupBy一同使用。12.2数据查询OrderBy:查询结果是否按某一字段值排序

Asc:查询结果按某一字段值升序排列

Desc:查询结果按某一字段值降序排列12.2数据查询例:学生选课和成绩数据管理(三个关系表)学号姓名性别年龄系别SnoSnameSsexSageSdepa学号课程编号成绩SnoCnoGrade课程编号课程名称任课教师CnoCnameTeacher学生情况表(Student)成绩表(Sc)课程表(Course)12.2.1简单查询简单查询是基于单表的查询格式:

Select[All|Distinct]<字段名1>|<函数>12.2.1简单查询例:从Student表中查询学生的学号、姓名、年龄和性别的信息。12.2.1简单查询

答:

SELECT

Sno,Sname,Sage,SsexFROMSTUDENT12.2.1简单查询查询结果:12.2.2条件查询条件查询是添加了条件子句,对记录进行筛选格式:

Select[All|Distinct]<字段名1>|<函数>From<表或查询>[Where<条件表达式>][OrderBy<排序选项>[Asc][Desc]12.2.2条件查询例1:查询所有男学生的学号、姓名、年龄以及系别。12.2.2条件查询

答:

SELECTSNO,SNAME,SAGE,SDEPA

FROMSTUDENT

WHERESSEX=‘男’12.2.2条件查询查询结果:12.2.2条件查询例2:查询所有年龄小于19岁而性别为女的外语系的学生的学号和姓名

12.2.2条件查询答:

SELECTSNO,SNAMEFROMSTUDENT

WHERESSEX=‘女’

ANDSAGE<19ANDSDEPA=‘外语系’12.2.2条件查询查询结果:12.2.2条件查询例3:查询所有性别为女或者年龄小于19岁的女学生的学号,姓名及系别属性12.2.2条件查询答:

SELECTSNO,SNAME,SDEPAFROMSTUDENT

WHERESSEX=‘女’

ORSAGE<1912.2.2条件查询查询结果:12.2.2条件查询例4:查询所有计算机系学生的所有属性列12.2.2条件查询答:

SELECT*FROMSTUDENT

WHERESDEPA=‘计算机系’12.2.2条件查询查询结果:12.2.2条件查询例5:查询男学生的学号、姓名和出生年,并且按照学号升序排列12.2.2条件查询答:

SELECTSNO,SNAME,2000-SAGEFROMSTUDENTWHERESSEX=‘男’OrderBySNOAsc

12.2.2条件查询查询结果:多表查询两个乃至多个表中获得所需的查询信息,这就需要多表查询多表查询例:列出全部学生的名字和他们所选修科目的名称和成绩多表查询答:

SELECTSTUDENT.SNAME,

COURSE.CNAME,SC.GRADEFROMSTUDENT,COURSE,SC

WHERESTUDENT.SNO=SC.SNOANDSC.CNO=COURSE.CNO多表查询连接查询和嵌套查询都属于多表查询12.2.3连接查询连接查询基于多表的查询查询结果通过选择<字段名>对字段进行选择,依照Where子句的<条件表达式>对记录进行筛选,而且可以通过Order子句对查询进行重新排序12.2.3连接查询格式:Select[all|Distinct]<字段名1>|<函数>From<表或查询>[[Left][Right]Join<表或查询>On<条件表达式>][Where<条件表达式>][OrderBy<排序选项>[Asc][Desc]]12.2.3连接查询例1:查询所有选修了课程编号为“20012”学生的学号、姓名和系别属性12.2.3连接查询答:SELECTSTUDENT.SNO,STUDENT.SNAME,STUDENT.SDEPAFROMSTUDENTJOINSCONSTUDENT.SNO=SC.SNOANDSC.CNO=“20012”

12.2.3连接查询例2:查询所有没有选修课程编号为“20012”的学生的学号、姓名和系别属性12.2.3连接查询答:

SELECTSTUDENT.SNO,STUDENT.SNAME,STUDENT.SDEPADISTINCTFROMSTUDENTJOINSC

ONSC.SNO=STUDENT.SNOANDCNO<>’20012’12.2.4嵌套查询嵌套查询也是基于多表的查询这类查询结果基于一个表,通过选择<字段名>

对字段进行选择,但Where子句的<条件表达式>是另一个表或多个表的查询结果,以此对记录进行筛选,而且可以通过Order子句对查询进行重新排序12.2.4嵌套查询格式:

Select[All|Distinct]<字段名1>|<函数>From<表或查询>[Where<条件表达式>[OrderBy<排序选项>[Asc][Desc]嵌套的特点是:Where子句的<条件表达式>中包含一个Select子句12.2.4嵌套查询例1:查询所有选修了课程编号为“20012”学生的学号、姓名和系别属性(嵌套查询)12.2.4嵌套查询答:

SELECTSNO,SNAME,SDEPAFROMSTUDENTWHERESNOIN(SELECTSNOFROMSCWHERECNO=‘20012’)12.2.4嵌套查询例2:查询所有没有选修课程编号为“20012”

的学生的学号、姓名和系别属性(嵌套查询)12.2.4嵌套查询答:

SELECTSNO,SNAME,SDEPAFROMSTUDENTWHERESNOIN(SELECTSNOFROMSCWHERECNO<>’20012’)12.2.5分组计算查询分组计算是基于单表、多表的查询通过选择<字段名>对字段进行选择,还可以通过Group分组,利用计算函数获取新的字段,依照Where子句的<条件表达式>可以对记录进行筛选,而且可以通过Order子句对查询进行重新排序12.2.5分组计算查询格式:Select[All|Distinct]<字段名>|<函数>From<表或查询>[Where<条件表达式>][GroupBy<分组字段名>[Having<条件表达式>]][OrderBy<排序选项>[Asc][Desc]]12.2.5分组计算查询例1:求外语系女学生的总人数和平均成绩12.2.5分组计算查询答:

SELECTCOUNT(*),AVG(SAGE)

FROMSTUDENTWHERESDEPA=‘外语系’

ANDSSEX=‘女’12.2.5分组计算查询查询结果:12.2.5分组计算查询例2:查询每门课的编号及选修这门课的学生人数12.2.5分组计算查询答:

SELECTCNO,COUNT(SNO)FROMSC

GROUPBYCNO12.2.5分组计算查询查询结果:12.2.5分组计算查询例3:查询平均成绩超过70分的科目,并且将结果按课程号升序排列12.2.5分组计算查询答:

SELECTCNO,AVG(GRADE)

FROMSC

GROUPBYCNO

HAVINGAVG(GRADE)>70

ORDERBYCNOASC12.2.5分组计算查询查询结果:12.2.6查询结果处理使用Select语句进行查询,将默认其查询结果输出状态,结果自动在显示器上输出若想使查询结果多样化,可在Select语句中加入Into子句,使查询结果有所变化12.2.6查询结果处理格式:Select[All|Distinct]<字段名>|<函数>From<表或查询>[[Left][Right]Join<表或查询>On<条件表达式>][Where<条件表达式>][GroupBy<分组字段名>[Having<条件表达式>]][OrderBy<排序选项>[Asc][Desc]][Into<目标>]

12.2.6查询结果处理输出目标输出形式INTOARRER输出到数组INTOCURSOR输出到临时表INTODBF输出到表12.2.6查询结果处理例:将查询结果生成为一个文件12.2.6查询结果处理操作步骤:

1)在命令窗口中,键入如下命令:

SELECTSNO,SNAME,SSEXFROMSTUDENTINTODBFNEWSTUDENT2)单击“文件”菜单中的“打开”命令12.2.6查询结果处理3)在弹出的对话框中的文件类型里选择.DBF

文件类型,大家会发现多出了一个“NEWSTUDENT.DBF”文件,这是刚刚用

SQL查询生成的文件,它是一个自由表。12.3数据定义

SQL语句除了能够创建查询外,还能够进行表结构的定义,能够完成对表结构的设计及维护。12.3.1表结构的定义格式:

CreateTable<表名>([<字段名1>]类型(长度)[,[<字段名2>]类型(长度)…])功能:

创建一个以<表名>为名,以指定的字段属性定义的数据表12.3.1表结构的定义例:定义一个包括学号(Sno,)、姓名(Sname)、性别(Ssex)、年龄(Sage)和系别(Sdepa)

共五个属性的学生(Student)表12.3.1表结构的定义答:

CREATETABLEStudent(SnoCHAR(8)NOTNULLUNIQUE,

SnameCHAR(8)NOTNULL,

SsexCHAR(2),SageINT,

SdepaCHAR(20))12.3.2表结构的修改“修改命令”格式:AlterTable<表名>Alter<字段名1>类型(长度)[Alter<字段名2>类型(长度)…]功能:修改以<表名>为名的表的部分字段的属性12.3.2表结构的修改例:修改Student表中字段的属性答:

AlterTABLEStudentAlterSageSMALLINT12.3.2表结构的修改“删除命令”格式:

AlterTable<表名>Drop<字段名1>[Drop<字段名2>…]功能:删除以<表名>为名的表的部分字段12.3.2表结构的修改例:在Student表中删除性别(Ssex)属性答:

ALTERTABLEStudentDROP

Ssex12.3.2表结构的修改“增加字段命令”格式:AlterTable<表名>Add<字段名1>类型(长度)[Add<字段名2>类型(长度)…]功能:给以<表名>为名的表增加部分字段12.3.2表结构的修改例:在Student表中增加籍贯(Shome)属性答:

ALTERTABLEStudent

ADD

SsexCHAR(2)12.4数据操纵SQL语句除了可以进行数据查询、数据定义之外,还可以完成有关表记录的插入、更新、删除等相关操作包括三种操作:数据插入、修改、删除分别使用命令:INSERT、UPDATE、DELETE12.4.1插入数据格式:InsertInto<表名>(<字段名1>[,<字段名2>…])Values(<表达式1>[,<表达式2>…])功能:在表中追加一个新的记录12.4.1插入数据例1:在STUDENT表中增加一个学生(99215001,顾荃,1

温馨提示

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

评论

0/150

提交评论