SQL总结

基本概念:
数据data:数据是数据库系统中存储的基本对象
(数据的解释是指对数据含义的说明,数据的含义称为数据的语义,数据与其语义是不可分的)
数据库DB:存放数据的仓库,是长期存储在计算机内、有组织的、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
数据库具有永久存储、有组织和可共享三个基本特点。
数据库管理系统DBMS:是一个系统软件,功能有:
数据定义功能DDL
数据组织、存储和管理(目标是提高存储空间利用率和方便存取)
数据操纵功能DML
数据库的事务管理和运行管理(保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统恢复)
数据库的建立和维护功能
其他功能(异构数据库之间的互访和互操作功能等)
数据库系统:是由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统。
数据管理技术的三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段

数据库是长期存储在计算机内有组织、大量、共享的数据集合。它可以供各种用户共享,具有最小冗余度和较高的数据独立性。数据库管理系统在数据库建立、运用和维护时对数据库进行统一控制,以保证数据的完整性和安全性,并在多用户同时使用数据库时进行并发控制,在发生故障后对数据库进行恢复。

具体内容:

数据模型:
数据模型也是一种模型,它是对现实世界数据特征的抽象,数据模型是用来描述数据、组织数据和对数据进行操作的。
概念模型:按照用户的观点来对数据和信息建模,主要用于数据库设计
逻辑模型:按计算机系统的观点对数据建模,主要用于数据库管理系统的实现
物理模型:

概念模型是现实世界到机器世界的一个中间层次,ER图
数据模型通常由数据结构、数据操作和数据的完整性约束条件三部分组成


数据模型:

层次模型、网状模型、关系模型
关系模型的完整性约束条件包括:实体完整性、参照完整性和用户定义的完整性。


数据库系统的结构

数据库系统的三级模式结构:
模式,也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
外模式,也称子模式或用户模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据试图,是与某一应用有关的数据的逻辑表示。外模式是保证数据库安全性的一个有力措施,每个用户只能看见和访问所对应的外模式中的数据,数据库中的其余数据是不可见的。
内模式,一个数据库只有一个内模式。他是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。
数据库系统在这三级模式之间提供了两层映像:外模式/模式映像和模式/内模式映像。正是这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
1、外模式/模式映像 保证了数据的逻辑独立性
2、模式/内模式映像 保证了数据的物理独立性


关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件。
规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项。
关系模式,关系的描述称为关系模式


选择、投影、并、差、笛卡儿积是5种基本操作。其他操作可以用基本操作来定义和导出。
关系模型中有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称为是关系的两个不变性。用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。


候选码:可以唯一标识一个元组的最少的属性集合。
某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。若一个关系有多个候选码,则选定其中一个为主码
实体完整性: 若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值(null value)。
参照完整性:外键
用户定义的完整性:unqiue not null 取值范围等等
关系代数:
传统的集合运算:并 差 交 笛卡儿积
专门的关系运算:选择 投影 连接 除
选择是从两个关系的笛卡儿积中选取属性间满足一定条件的元组
连接运算从R和S的笛卡儿积RXS中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系θ的元组
连接关系中有两种最为重要也最为常用的连接,一种是等值连接,另一种是自然连接
θ为“=”的连接关系称为等值连接,它是从关系R与S的广义笛卡儿积中选取A、B属性值相等的那些元组。
自然连接是一种特殊的等值连接,*它要求两个关系中进行比较的分量必须是同名的属性组。*并且在结果中把重复的属性列去掉。它是同时从行和列的角度进行运算的。
外连接
左外连接
右外连接


主码可以由两个属性构成


clob 字符串大对象
blob 二进制大对象
http://blog.csdn.net/zhangbingtao2011/article/details/68941360
date 日期,格式为YYYY-MM-DD
time 时间 格式为HH:MM:SS
timestamp 时间戳类型    http://blog.csdn.net/magister_feng/article/details/6763582
interval 时间间隔类型
SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
//和第一个数字23比较没有满足条件的数有几个?
double  precision 取决于机器精度的双精度浮点数




索引的建立与删除
create index on
索引可以建立在表的一列或多列上,各列之间用逗号隔开,每个列名后面还可以用次序指定索引值的排列次序,可选ASC(升序)或DESC(降序),默认值为ASC
unique 表明此索引的每一个索引值只对应唯一的数据记录
cluster 表示要建立的索引是聚簇索引(有相同的值则放在一起)
create unique index stusno on student(sno)
create unique index scno on sc(sno ASC,cno DESC)
修改索引名:
alter index <旧索引名> rename to <新索引值>
alter index scno rename to scsno
删除索引
drop index <索引值>
drop index  stusname
删除索引时,系统会同时在数据字典中删去有关该索引的描述


数据字典:
数据字典是关系数据管理系统内部的一组系统表,它记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等。


关系数据库管理系统在执行sql的数据定义语句时,实际上就是在更新数据字典表中的相应信息,在进行查询优化和查询处理时,数据字典中的信息是其重要依据。


常用的查询条件:
比较: = > < >= <= != <> !> !< NOT
确定范围: BETWEEN AND,NOT BETWEEN AND
确定集合:IN, NOT IN
字符匹配:LIKE,NOT LIKE
空值:IS NULL,IS NOT NULL
多重条件(逻辑运算): AND,OR,NOT


虽然建立了索引,但如果所查找数据量少,索引查找不一定能提高查询效率,系统仍会使用全表扫描,这是由查询优化器按照某些规则或估计执行代价来做出选择。


字符匹配时:数据库字符集为ASCLL时一个汉字需要两个_;当字符集为GBK时只需要一个_。


如果用户要查询的字符串本身就含有通配符%或_,这时就要使用 ESCAPE ‘<换码字符>’短语对通配符进行转义了。


AND的优先级高于OR


IN谓词实际上是多个OR运算符的缩写


聚集函数


当聚集函数遇到空值时,除COUNT(*)外,都跳过空值而只处理非空值
WHERE子句中是不能用聚集函数做为条件表达式的。聚集函数只能用于select子句和group by中的having 子句


对查询结果分组的目的是为了细化聚集函数的作用对象。分组后聚集函数将作用于每一个组,即每一组都有一个函数值。


where 子句与having 短语的区别在于作用对象不同,where 子句作用于基本表或视图,从中选择满足条件的元组。having短语作用于组,从中选择满足条件的组。




查询的所有内容:


常用的查询条件
聚集函数
order by


若一个查询同时涉及两个以上的表,则称为连接查询。
等值连接查询
自然链接查询
非等值连接查询
自身连接查询
外连接查询
多表连接
复合条件连接查询


嵌套查询
带有in谓词的子查询
带有比较运算符的子查询
带有ANY(SOME)或ALL谓词的子查询
带有EXISTS谓词的子查询                不相关子查询
相关子查询
(内层查询由于与外层查询有关,因此必须反复求值)


集合查询 
集合操作主要包括并操作 union、交操作intersect和差操作except
参加集合操作的各查询结果的列数必须相同,对应项的数据类型也必须相同。


select *
from student
where sdept=‘cs’
union 
select *
from student
where  sage<=19
本查询实际上是求计算机科学系的所有学生与年龄不大于19岁的学生的并集。
使用union将多个查询结果合并起来时,系统会自动去掉重复元组。如果要保留重复元组则用union all操作符


并集 交集 差集


子查询不仅可以出现在where子句中,还可以出现在from子句中,这时子查询生成的临时派生表成为主查询的查询对象。




左外连接
select *
from student left outer join sc on (student.sno=sc.sno)


一个SELECT-FROM-WHERE语句称为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询。




order by子句只能对最终查询结果排序,子查询的select语句不能使用order by子句




不相关子查询
相关子查询


>ANY 大于子查询结果中的某个值
<ALL 大于子查询结果中的所有值
!=ANY 不等于子查询结果中的某个值
<>ALL 不等于子查询结果中的任何一个值


EXISTS 代表存在量词,带有EXISTS谓词的子查询不返回然和数据,只产生逻辑真值“true”或逻辑假值“false”。
NOT EXISTS
select sname
from student
where exists (
select *
from sc
where sno=student.sno and cno='1'
);
执行过程:
首先取外层查询中student表的第一个元组,根据它与内层查询相关的属性值(sno值)处理内层查询,若where子句返回值为真,则取外层查询中共该元组的sname放入结果表,然后再取student表的下一个元组;重复这一过程,直至外层student表全部检查完为止。






由EXISTS 引出的子查询,其目标列表达式通常都用*,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义。


SQL中没有全称量词,可将题目的意思转换成等价的用存在量词的形式。
例:查询选修了全部课程的学生姓名
转化为:查询这样的学生,没有一门课程是他不选修的。

插入子查询结果

空值与另一个值(包括另一个空值)的比较结果为UNKNOWN。二值逻辑扩展为了三值逻辑:true false unknown
空值与另一个值(包括另一个空值)的算术运算的结果为空值


not and or 优先级递增


如何将null输出时变为0?    isnull(字段名,0)

建立视图
create view      as
with check option;   表示对视图进行update insert delete操作时要保证更新、插入或删除的行满足试图定义中的谓词条件。(即子查询中的条件表达式)
组成视图的属性列名或者全部省略或者全部指定,没有第三种选择


create view 语句的结果只是把视图的定义存入数据字典,并不执行其中的select语句。只是在对视图查询时,才按视图的定义从基本表中将数据查出。


删除视图
drop view       cascade   级联删除语句把该视图和由它导出的所有视图一起删除
基本表删除之后,视图无法使用,但是视图的定义没有从字典中清除。



数据库的完整性是指数据的正确性和相容性(数据符合逻辑)。它是为了防止数据库中存在不正确的数据


on delete set null


on delete cascade 级联删除sc表中的相应元组


on update cascade 级联更新sc表中的相应元组


用check短语指定列值应该满足的条件


断言  可以定义涉及多个表或聚集操作的比较复杂的完整性约束,断言创建后,任何对断言中所涉及关系的操作都会触发关系数据库管理系统对断言的检查,任何使断言不为真值的操作都会被拒绝执行。

创建断言:
create assertion
删除断言
drop asssertion


触发器(trigger)是用户定义在关系表上的一类由事件驱动的特殊过程。一但定义,触发器将被保存在数据库服务器中,任何用户对表的增删改操作均由服务器自动激活相应的触发器。


按属性间依赖情况来区分关系规范化程度为第一范式、第二范式、第三范式和第四范式。如何将不合适性质的关系转换为更合适的形式。
第一范式(1NF):每一个分量必须是不可分的数据项。
第二范式(2NF)若R∈1NF,且每一个非主属性完全函数依赖与任何一个候选码,则R∈2NF。
第三范式(3NF)设关系模式R<U,F>∈1NF,若R中不存在这样的码X,属性组Y及非主属性Z(Z不是Y的真子集)使得X->Y,Y->Z成立,Y不->X,则称R<U,F>∈3NF
换句话说,若R∈3NF,则每一个非主属性既不传递依赖于码,也不部份依赖与码,所以,如果R属于3NF,则必然R属于2NF
BCNF:在关系模式中R<U,F>中,若每一个决定因素都包含码,则R<U,F>∈BCNF
要求:所有非主属性对每一个码都是完全函数依赖
所有主属性对每一个不包含它的码也是完全函数依赖
没有任何属性完全函数依赖于非码的任何一组属性
第四范式(4NF)限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值