chapter_4
概述
SQL发展

注:关键词是哪些功能,尤其第一个create alter drop是定义功能
1.SQL功能强大,实现了数据定义、数据操纵、数据控制等功能
2.SQL语言简洁,只用少量的动词就实现了核心功能
3.SQL支持关系数据库的三级模式结构
4.SQL语言能嵌入到其他高级语言所写的程序中
注:语句格式

补充:模式 create/drop schema <模式名> authorization <用户名> 定义模式=定义命名空间,可以进一步定义数据库对象等
补充:索引:create/drop [ unique/cluster ] index <索引名> on <表名>(....列)
基本表定义创建
基本表修改
查询结果显示select
基础不再赘述
1.在SQL查询语句中,若结果中需要显示一个关系表的所有属性用*号
2.去除结果中重复的元组 select distinct ****列【默认不去除】
3.查询结果计算 【返回的结果】
聚集函数:count/sum/avg/max/min [all|distinct] <列>
对于属性的空值,除count()外都不考虑,count()只计算个数需要考虑
数学函数/字符串函数/日期函数
举例:select
查询结果排序order by
5.SQL的查询语句中,重命名目标列的方式:
在重命名对象后用AS表示出新的名称 ,age as age1,
在重命名对象后空格加新的名称 ,age age1,
【不可以】在重命名后以括号形式表示新的名称
查询满足条件 like in
元组条件表达式:
1.运算符:+- / % = > < and or not* 比如:5/3=1
**2.谓词:[not] between ..and .. 范围 [not] LIKE .... **匹配
[not] IN (列名....) 指定集合 IS [not] NULL

其中LIKE 用于部分匹配查询[单引号]
其中字符串表达式通配符
_ 表示任意单个字符[可以是0个字符]
% 表示长度可为0的任意长字符串
比如查找DB_Design 则 LIKE 'DB I_ Design' ESCAPE 'I'
前面用添加转义字符,后面补充 ESCAPE 'I'
其中IN 用于判断一个值是否属于集合里面
分组聚集group by、having
1.根据属性名1,属性名2值依次进行分组;2.having子句对分组后的结果进行筛选
连接查询join
多表连接查询
注意连接时,需要补充where中的内容 等价关系
外连接查询
from <左关系 > left |right|full [outer] join <右关系 > on <连接条件>
【常规/内连接】from <左关系 > [inner] join <右关系 > on <连接条件>
自身连接查询
举例练习:设有关系R(A,B,C)和S(C,D)。与SQL语句select A,B,D from R,S where R.C=S.C等价的关系代数表达式是( )。πA,B,D(σR.C= S.C(R×S))
嵌套查询方式where中in
根据子查询中处理的数据是否与父查询的当前元组有关,
可以把嵌套查询分为独立子查询和相关子查询
谓词IN【一个值是否属于一个集合】

比较操作符

量词ANY ALL【部分支持】
ANY 的语义为查询结果中的某个值,当子查询结果中有某一 个值满足比较运算符,比较运算结果则为真。
ALL的语义为查询结果中的所有值,当子查询结果中每一个值 都满足比较运算符,比较运算结果才为真。

等价关系【因为部分支持any和all量词,所以可以替换】

谓词 exisits【相关子查询】
因为子查询的查询条件(sc.sno)需要用父查询的属性(s.sno)
集合运算
select语句返回的是集合,多个select语句可以返回多个集合
两个参与集合查询的select语句中,查询结果不仅要具备相同的属性名,而且属性名的排列顺序也要一致。
并union
交intersect
差except
数据更新
**insert into <表名> (属性名,.....) value (值....) **可插入多个元组
常量值与相应的属性名值域相同、个数相同。
元组的某属性没在INTO后出现,则这些属性上的值取空值NULL。
INTO中没有指明任何属性,则VALUES子句中新插入的元组在每个属 性上必须有值,且常量值的顺序要与表定义中属性的顺序一致。
INSERT语句可以往视图中插入数据
举例:INSERT INTO SC(SNO,CNO) VALUES ('S31','C01');
INSERT INTO S VALUES (‘S31’,‘王浩’,‘计算机’,‘1999-10-15’,‘男’) ;
或者插入的元祖是某个子查询的结果
举例:插入“计算机”系学生选修“数据库”课程的选课记录。
INSERT INTO SC(SNO,CNO)
SELECT SNO,CNO FROM S,C WHERE SD='计算机' AND CN='数据库';
update <表名> set <属性>=<值> ,......... where <条件> 可修改多个属性值
delete from <表名> [ where <条件> ]
举例:删除成绩低于所有课程平均成绩的选课元组
DELETE FROM SC WHERE GRADE<(SELECT AVG(GRADE) FROM SC);
更新操作的完整性检查
更新操作不能满足参照完整性时,采用的处理策略
拒绝执行(NO ACTION) •产生级联操作(CASCADE) •设置为空值(SET NULL)
更新操作不对关系表的模式结构进行改变
更新往往是在查询的基础上操作,更新也可能会嵌套子查询
更新需要考虑数据库定义的各类完整性约束
视图
视图(View)并不在数据库中实际存在,而是一种虚拟表,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。
即视图就是执行查询语句后所返回的结果集,所以在创建视图的时候,主要就是创建这条SQL查询语句。
对于普通的数据表来说,视图具有以下的一些特点:
1、简单:因为视图是查询语句执行后返回的已经过滤好的复合条件的结果集,所以使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件。
2、安全:使用视图的用户只能访问他们被允许查询的结果集,对于表的权限管理并不能限制到某个行或者某个列,但是通过视图就可以简单的实现。
3、数据独立:一旦视图的结构被确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
二、视图的语法
Last updated