数据库概论-关系数据库标准语言

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

结构化查询语言SQL(StructuredQueryLanguage)是一种介于关系代数与关系演算之间的语言,其功能包括查询、操纵、定义和控制四个方面,是一个通用的、功能极强的关系数据库语言,目前已成为关系数据库的标准语言。第四章关系数据库标准语言SQL的历史SQL语言最初是由IBM公司1974年在原型的关系数据库管理系统SYSTEMR上开发的语言。1979年,ORACLE公司首家推出商业上可执行的SQL。如今,SQL成为国际上标准的数据库存取语言。SQL的标准美国国家标准学会(ANSI)将SQL作为关系数据库管理系统的标准语言,并且定义在ANSIx3.125---1989”具有完整性增强特征的数据库语言SQL”文档中,即ANSISQL89。1986.10ISOSQL861987.6-1989.4ISOSQL891992年ISOSQL92SQL22000年ISOSQL99SQL32003年SQL2003,包含了XML相关内容2006年SQL2003,定义了SQL与XML(包含XQuery)的关联应用4.1SQL概述及其特点1.SQL概述按其功能分为四大类名称动词功能数据查询SELECT查询数据数据定义CREATE,DROP,ALTER定义、撤消和修改数据模式数据操纵INSERT,UPDATE,DELETE增、删、改数据数据控制GRANT,REVOKE数据访问权限的控制其作用是建立和使用数据库。SQL的特点①综合统一的一体化的特点②高度非过程化③面向集合的操作方式,语言功能强④统一的语法结构,两种使用方式⑤语言简洁,易学易用⑥提供数据控制功能⑦提供有数据视图的数据结构⑧所有关系数据库的公共语言2.SQL数据库的体系结构按支持SQL的数据库管理系统可称其SQL数据库,其结构基本上采用三级结构,但所用术语与传统关系模型的术语有些不同。SQL传统的RDB基本表(BaseTable)关系模式存储文件(BaseTable)内模式(存储模式)视图(View)外模式行(Row)/列(Column)元组/属性用户1用户2用户3用户4视图3视图1视图2基本表1基本表2基本表3基本表4存储文件1存储文件1SQL用户视图基本表存储文件外模式模式内模式表说明:一个SQL数据库是表的汇集,它用一个或若干个SQL模式定义;基本表都是一个实际存在的关系,由行集构成,一行是列的序列,每列对应一个数据项;一个表或者是一个基本表,或者是一个视图;每个存储文件与外部存储上一个物理文件对应;用户可以用SQL语句对视图和基本表进行查询操作;SQL用户可以应用程序,也可以是终端用户。格式:SELECT[ALL|DISTINCT]目标列表达式[,目标列表达式,···]FROM基本表名或视图名[,基本表名或视图名,···][WHERE条件表达式][GROUPBY列名1[HAVING条件表达式]][ORDERBY列名2[ASC|DESC]];描述:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。如果有GROUPBY子句则将结果按列名1的值进行分组,该属性列相等的元组为一个组。通常会在每组中作用集函数。如果GROUP子句带有HAVING短语,则只有满足指定条件的组才予输出。如果有ORDERBY子句,则结果表还要按列名2的值升序或降序排列。4.2SQL查询1.选择表中的若干列选择表中的指定列;选择表中的所有列;结果列的显示顺序;使用列表达式;SELECT中的目标列表达式可以是表中的列,也可以是表达式,包括算术表达式、字符串常数、函数等。(字符串用单引号定界)。使用的列的别名:列名[AS]列的别名4.2.1单表查询仅涉及一个表的查询例1:求全体学生的学号、姓名。例2:求全体学生的详细信息。例3:求学生学号和学生出生的年份(经过计算的值)。例4:求学生的学号和出生年份,显示时使用别名Student_No和Birth_Day。2.选择表中的若干元组①消除取值重复行查找相异的行:在SELECT语句中使用关键字DISTINCT原本不完全相同的元组,经过向某些列投影操作后,可能变成相同的行了。如果想去掉结果表中的重复行,必须指定DISTINCT短语,没有指定,则使用用缺省值ALL,意为保留结果表中所有的行。例5:求选修了课程的学生学号。②查询满足条件的元组可以通过WHERE子句来实现。WHERE常用的查询条件如下表所示。查询条件谓词比较=,,,=,=,!=,,!,!;NOT+上述比较运算符确定范围BETWEENAND,NOTBETWEENAND确定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重条件AND,OR,NOT大小比较条件表达式的形式如下:属性列比较运算符{列名|常量|表达式}其中:字符串常量和日期常量要用一对单引号括起来。例6:求年龄大于等于20岁的学生姓名和年龄。BETWEEN确定范围谓词BETWEENAND与NOTBETWEENAND的一般格式为:属性列[NOT]BETWEENaANDb查询属性值在(或不在)指定范围内的元组其中:a为范围的下限(低值),b为范围的上限(高值)。选出的元组包括边界a与b,要求a=b,等价于a=属性列=b。例7:求年龄在20岁与22岁之间(包括20岁和22岁)的学生学号和年龄。例8:求年龄不在20岁与22岁之间的学生学号和年龄。IN确定集合谓词IN可以用来查找属性值属于指定集合的元组。属性列[NOT]IN值表谓词IN实际上是一系列谓词‘OR’的缩写。所起的作用就是检查列值是否等于它后面括弧内的一组值中某一个。如果等于其中某一个值,则其结果为‘真’,否则其结果为‘假’。NOTIN表示与IN完全相反的含义。例9:求在下列各系的学生:数学系(‘MA’)、计算机科学系(‘CS’)。例10:求不是数学系、计算机科学系的学生的信息。LIKE匹配查询或模糊查询谓词LIKE的一般格式为:属性列[NOT]LIKE‘匹配串’查询指定的属性列与匹配串相匹配的元组。注释:匹配串可以是一个完整的字符串,也可以含有通配符的字符串。通配符包括:%(百分号):代表任意长(长度为0)字符串。_(下划线):代表任意单个字符所有其它字符:只代表自己例11:求姓名是以字母‘马’打头的学生信息。例12:求姓名中含有字母‘马’的学生信息。例13:求姓名长度至少是三个字符且倒数第三个字符必须是字母‘马’的学生信息。使用换码字符将通配符转义为普通字符例14:查询以DB_开头,且倒数第3个字符为i的课程的详细情况。ESCAPE'\'表示“\”为换码字符NULL涉及空值查询NULL表示空值。空值是一种不存在的或者不知道、不可用的数据。列名[NOT]ISNULL这里的IS不能用=替代。数据库表的行中,未被赋值的字段自动被认为是空值。0长度的字符串自动解释为空值。空值的赋值:把连续两个单引号赋值给它;把空值常量NULL赋值给它。例15:求缺少学习成绩的学生的学号和课程号。(查询含有空值的行)。SELECTSNO,CNOFROMSCOREWHEREGRADEISNULL;GRADE=NULL;多重条件当查询条件涉及到多个时,可将若干条件通过逻辑运算符构成一个更复杂的条件进行查询。可以使用三种逻辑运算符:NOT逻辑非;AND逻辑与;OR逻辑或运算符的优先顺序如下:=!=NOT===[NOT]BETWEEN…AND[NOT]IN[NOT]LIKEIS[NOT]NULLNOTANDOR用户可以用括号()改变优先级。例16:求计算机系(‘CS’)或数学系(‘MA’),年龄大于20岁的学生姓名、系和年龄。例17:求选修课程(‘001’)或课程(‘002’),成绩在85和95之间,学号为96xxx的学生的学号、课程与成绩。3.控制行的显示顺序ORDERBY子句中,列名表2指出在显示查询结果时,数据按指定的列排序。ASC升序排序(默认值);DESC降序排序可以选择多列进行排序;ORDERBY子句中可以使用表达式;ORDERBY子句必须是放在SELECT命令中影响选取行的所有子句的后面;如果排序列含有空值时,DESC排序时,含有空值的行位于最前面;ASC排序时,含有空值的行位于最后面。例18:求选修课程(‘001’)或课程(‘002’)学生的学号、课程号与成绩,结果按课程号升序、成绩降序排序。4.组函数SQL提供的五种组函数COUNT()计算所选数据(记录)的个数SUM()计算某一数值列的和AVG()计算某一数值列的平均值MAX()求(字符、日期、数值列)的最大值MIN()求(字符、日期、数值列)的最小值例19:求学生总人数。例20:求选修了课程的学生人数。例21:求计算机系学生的平均年龄。例22:求选修了课程‘005’的最高、最低与平均成绩。5.分组查询实现行的分组和分组统计。在对表格进行操作时,要求将记录按某个或某几个字段上相同的值分成组,然后再对组进行相应的操作,称作分组查询。SNOSNAMESDEPTSCLASSSAGE96001丁一CS011996002王二CS012096003张三CS012196004李四CS021996005刘五CS022096006赵六CS042296007马蓉MA012096008司马明MA011996009张胜利MA012096010李力CI0222SSDEPTSCLASSSAGECS0120CS0219.5CS0422MA0119.3CI0222分组后的平均年龄按系、班级分组计算学生的平均年龄GROUPBY子句分组查询是通过GROUPBY子句实现的。将查询结果表按某一列或多列值分组,值相等的为一组;当对多列进行分组时,所有的组函数统计都是对最后的分组列进行的;对查询的结果分组的目的是为了细化统计函数的作用对象;如果未对查询分组,组函数将作用于整个查询结果;如果分组后组函数将作用于每一个组,即每一个分组都有一个组函数;在包含GROUPBY子句的查询语句中,SELECT子句后面的所有字段列表(除组函数外),均应该包含在GROUPBY子句中,即所选项与分组的一致性。例23:求各门课程的平均成绩与总成绩。例24:求各系中各个班级的人数及平均年龄。例25(?):SELECTSNAME,SDEPT,COUNT(*)FROMSTUDENTGROUPBYSDEPT;例26(?):SELECTSAGEFROMSTUDENTGROUPBYSNO;HAVING子句如果分组后还要按一定的条件对这些分组进行筛选,只输出满足条件的组,则应该使用HAVING短语指定筛选条件。HAVING子句用来选择满足条件的分组。WHERE与HAVING的区别:作用对象不同WHERE作用于基本表或视图,从中选择满足条件的元组;HAVING短语作用于组,从中选择满足条件的组。例27:求学生人数不足百人的系号及其相应学生人数的。例28:求各系中年龄大于20岁的除1班之外的各班级人数。SELECT列名FROM表名WHERE条件GROUPBY列名HAVING条件ORDERBY列名投影连接选取分组去组排序小结连接查询是通过各表中相应列的公共数据把一个表中的某些行与另一个表中的某些行连接起来。表之间的联系是通过表的字段值来体现的,这种字段通常称为连接字段。连接字段就是在两个表中都包含的一个公共字段。连接操作的目的就是通过加在连接字段的条件将多个表连接起来。4.2.2连接查询涉及两个以上的表1.无条件连接在连接操作中,如果不用连接条件,则称为无条件连接。无条件连接将产生大量的行,当n1,n2,…,nn这n个表进行连接时,产生的记录是n1*n2*…*nn。例:SELECTSNO,SNAME,CNO,GRADEFROMSTUDENT,GRADE

1 / 182
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功