当前位置:首页 > 金融/证券 > 股票报告 > 第4章 结构化查询语言SQL
1数据库原理(2016-2017)宋安平上海大学计算机学院1015室Apsong@shu.edu.cn第1周—第4周答疑时间:周五3-4,1001GGG2“数据库原理”课程的特点:理论性:关系运算理论、模式设计理论等;实用性:数据库语言、数据库设计;可操作性:较强,有大量问题和应用值得分析和设计;创新性:有许多深层的问题具有发展的余地,有待去挖掘、发现和总结。3课程教学目的和要求:掌握数据库系统的基本概念和原理;理解SQL、关系代数和关系演算等数据库语言;学会关系数据库规范设计的方法和步骤;了解数据库系统的实现技术;具备使用关系数据库软件开发数据库应用系统的能力。4《数据库原理一》课堂教学+研讨(30学时)内容及安排:第四章结构化查询语言SQL(12学时)第一章数据库发展史(3学时)第二章数据库系统结构(3学时)第六章实体联系模型(3学时)第三章关系运算(6学时)习题分析、总复习(3学时)5实验内容和安排(20学时):见WORD附件写实验报告6第4章结构化查询语言SQLSQL概述SQL的数据定义SQL的数据查询SQL的数据更新视图嵌入式SQL2020/2/97第一节SQL概述SQL发展历程SQL数据库的体系结构SQL的组成8一、SQL发展历程SQL(StructuredQueryLanguage)语言是1974年提出的在IBM公司的SystemR上实现。是介于关系代数和关系演算之间的语言。1986年ANSI批准SQL作为关系数据库语言的美国标准,同年,ISO也同样决定。以后相继出现SQL89,SQL2(1992),SQL3(1999)。9二、SQL数据库的体系结构SQL支持数据库的三级模式结构,如图4―1所示。从图中可以看出,模式与基本表相对应,外模式与视图相对应,内模式对应于存储文件。基本表和视图都是关系。1.基本表(BaseTable)基本表是模式的基本内容。每个基本表都是一个实际存在的关系。10SQL用户视图1基本表2存储文件2基本表1存储文件1SQL用户视图2基本表3存储文件3内模式模式外模式图4―1SQL支持的数据库模式11二、SQL数据库的体系结构2.视图(View)视图是外模式的基本单位,用户通过视图使用数据库中基于基本表的数据(基本表也可作为外模式使用)。视图是虚表,实际并不存在,只有定义存放在数据字典中。12二、SQL数据库的体系结构3.存储文件存储文件是内模式的基本单位。每一个存储文件存储一个或多个基本表的内容。一个基本表可有若干索引,索引也存储在存储文件中。存储文件的存储结构对用户是透明的。下面将介绍SQL的基本语句。各厂商的RDBMS实际使用的SQL语言,与标准SQL语言都有所差异及扩充。因此,具体使用时,应参阅实际系统的有关手册13三、SQL的组成数据定义DDL:CREATE、DROP、ALTER数据操纵DML:数据查询DQL:SELECT数据操纵DML:INSERT、DELETE、UPDATE数据控制DCL:GRANT、REVOKE嵌入式SQL14第二节SQL的数据定义SQL模式的创建和撤消SQL提供的基本数据类型基本表的创建、修改和撤消索引的创建和撤消15一、SQL模式的创建和撤消SQL模式的创建CREATESCHEMA模式名AUTHORIZATION用户名SQL模式的撤消DROPSCHEMA模式名[CASCADE|RESTRICT]16二、SQL提供的基本数据类型各具体DBMS所提供的数据类型是不同的。但下面的数据类型几乎都是支持的:INT或INTEGER全字长二进制整数SMALLINT半字长二进制整数DEC(p[,q])或压缩十进制数,共p位,其中小数点后有q位,FLOAT双字长的浮点数CHAR(n)或CHARTER(n)长度为n的定长字符串VARCHAR(n)最大长度为n的变长字符串DATE日期型,格式为YYYY―MM―DDTIME时间型,格式为HH.MM.SS17三、基本表的创建、修改和撤消基本表的创建——CREATETABLECREATETABLE表名(列名1类型[该列的完整性约束][,列名2类型[该列的完整性约束]]…[,表级完整性约束])该列的完整性约束:该列上数据必须符合的条件。最常见的有:NOTNULL该列值不能为空NULL该列值可以为空UNIQUE该列值不能有相同者DEFAULT该列上某值未定义时的默认值表级完整性约束:对整个表的一些约束条件,常见的有定义主码(外码),各列上数据必须符合的关联条件等。18三、基本表的创建、修改和撤消例如:有一个学生数据库中,有三个关系S(Sno,SName,Age,Sex,Sdept)C(Cno,CName,Tname)SC(Sno,Cno,Grade)19Createtables(snochar(4)notnull,snamechar(8),ageint,sexchar(2),primarykeysno);Createtablec(cnochar(4)notnull,cnamechar(10),tnamechar(8),primarykeycno);Createtablesc(snochar(4)notnull,cnochar(4)notnull,gradeint,primarykey(sno,cno),foreignkeysnoreferences(sno),foreignkeycnoreferencec(cno),check(gradebetween0and100));20三、基本表的创建、修改和撤消基本表结构的修改——ALTERTABLE基本表的结构是可以随环境的变化而修改的,即根据需要增加、修改或删除其中一列(或完整性约束条件等)。ALTERTABLE表名[ADD列名数据类型[完整性约束]][DROP列名][MODIFY列名数据类型[完整性约束]]21三、基本表的创建、修改和撤消基本表的撤消——DROPTABLEDROPTABLE表名[CASCADE|RESTRICT]此语句一执行,指定的表即从数据库中删除(表被删除,表在数据字典中的定义也被删除),此表上建立的索引和视图也被自动删除(有些系统对建立在此表上的视图的定义并不删除,但也无法使用了)。22四、索引的创建和撤消索引的建立——CREATEINDEX在一个基本表上,可建立若干索引。有了索引,可以加快查询速度。索引的建立和删除工作由DBA或表的属主(建表人)负责。用户在查询时并不能选择索引,选择索引的工作由DBMS自动进行。CREATE[UNIQUE]INDEX索引名ON表名(列名[ASC|DESC])…本语句为规定表名建立一索引,索引名为索引名。23四、索引的创建和撤消删除索引——DROPINDEX索引太多,索引的维护开销也将增大。因此,不必要的索引应及时删除。DROPINDEX索引名本语句将删除规定的索引。该索引在数据字典中的描述也将被删除。24第三节SQL的数据查询SELECT语句的基本格式举例说明25一、SELECT语句的基本格式SELECT[DISTINCT]*|目标列表达式[别名]清单FROM关系名[别名]或视图名清单[WHERE查询条件表达式][GROUPBY列名清单[HAVING组条件表达式]][ORDERBY列名[ASC|DESC],…]26整个语句的执行过程如下:1、读取FROM子句中基本表、视图的数据,执行笛卡尔积操作。2、选取满足WHERE子句中给出的条件表达式的元组。3、按GROUP子句中指定列的值分组,同时提取满足HAVING子句中组条件表达式的那些组。4、按SELECT子句中给出的列名或列表达式求值输出。5、ORDER子句对输出的目标表进行排序,按附加说明ASC升序排列,或按DESC降序排列。27SELECT语句中:WHERE子句称为“行条件子句”,GROUP子句称为“分组子句”,HAVING子句称为“组条件子句”,ORDER子句称为“排序子句”。28在WHERE子句的行条件表达式中可使用下列运算符:算术比较运算符:<,<=,>,>=,=,<>或!=;逻辑运算符:AND,OR,NOT;集合成员资格运算符:IN,NOTIN;谓词:EXISTS,ALL,SOME,UNIQUE;聚合函数:AVG,MIN,MAX,SUM,COUNT;集合运算符:UNION,INTERSECT,EXCEPT。29二、举例说明单表查询--选择列选择表中的若干列1.查询指定列例:查询学生的学号和姓名2.查询全部列:使用*表示所有属性例:查询全体学生的详细情况3.查询经过计算的值:表达式可用别名代替例:查询学生的姓名和出生年份注意:字段名称AS别名字段名称别名别名=字段名称4.消除取值重复的行例查询选课的学生学号30单表查询—选择行1.比较大小:比较运算符===例:查询1980年以后出生的学生的基本情况2.确定范围:列名[NOT]BETWEEN下限AND上限例:查询年龄在20到25之间的学生姓名3.确定集合:列名[NOT]IN(值序列例:查询选择了c1、c4、c6课号的学生学号和成绩4.涉及空值的查询:列名IS[NOT]NULL例:列出所有成绩为空的学生学号5.字符匹配:列名[NOT]LIKE‘匹配串’通配符:%表示任意多个字符王%%卫%%卫_表示任意一个字符_卫___千__平%王__例:查询姓名中包含“敏”的学生姓名查询所有刘姓、王姓且为双名的学生姓名31单表查询—聚合函数1.COUNT([DISTINCT]*)统计元组的个数2.COUNT([DISTINCT]列名)统计一列中值的个数3.SUM([DISTINCT]列名)计算一列值的总和4.AVG([DISTINCT]列名)计算一列值的平均值5.MAX([DISTINCT]列名)求一列值中的最大值6.MIN([DISTINCT]列名)求一列值中的最小值例:查询选过课的学生人数查询选课次数查询最大和最小年龄统计有多少名年龄超过19岁的女同学查询学号s1的学生考试成绩的平均分和总分32单表查询—分组排序查询结果分组查询每类课的学生人数查询选课一门以上的学生学号统计男女同学的人数和平均年龄查询每门课程都超过70分的学生学号查询结果排序查询每门课的学生人数和总成绩,查询结果按总成绩升序,人数降序排列统计每个学生选修课程的门数(超过5门的学生才统计)。要求输出学生学号和选修门数,查询结果按门数降序排列,若门数相同,按学号升序排列33联接操作联接条件可在WHERE中指定也可以在FROM子句中指定。在FROM子句中指定联接条件时,SQL2将联接操作符分成:联接类型、联接条件。联接类型:决定了如何处理联接条件中不匹配的元组。联接条件:决定了两个关系中哪些元组应该匹配。联接类型中的OUTER字样可不写。34联接类型联接类型说明INNERJOIN内联接:LEFTOUTERJOIN左外联接:RIGHTOUTERJOIN右外联接:FULLOUTERJOIN完全外联接:CROSSJOIN交叉联接:结果为两个联接表中的匹配行的联接。结果包括“左”表(出现在JOIN子句的最左边)中的所有行。不包括右表中的不匹配行。结果包括“右”表(出现在JOIN子句的最右边)中的所有行。不包括左表中的不匹配行。结果包括所有联接表中的所有行,不论它们是否匹配结果包括两个联接表中所有可能的行组合。交叉联接返回的是两个表的笛卡儿积35多表连接查询自身连接查询选课二门或二门以上的学生学号检索选修c1和c2课的学生学号,姓名复合条件连接查找选修了VB课程且成绩在70分以上的姓名及成绩。查询每门课程都超过70
本文标题:第4章 结构化查询语言SQL
链接地址:https://www.777doc.com/doc-3600809 .html