数据库基础知识个人整理版文档格式.docx
《数据库基础知识个人整理版文档格式.docx》由会员分享,可在线阅读,更多相关《数据库基础知识个人整理版文档格式.docx(36页珍藏版)》请在冰点文库上搜索。
基本表:
就是实际存在得表,它就是实际存储数据得逻辑表示。
查询表:
就是查询结果对应得表。
视图表:
就是由基本表或其她视图导出得表,就是虚表,不对应实际存储内容。
二关系操作
(一)两种关系操作
1查询(Query)
查询可以分为选择(SELECT),投影(Project),连接(Join),交(Intersection),并(Union),差(Except),除(Divide),笛卡尔乘积。
其中选择,投影,并,差,笛卡尔乘积就是5种基本操作,其她得操作可用这些基本操作定义与导出
2插入(Insert),删除(Delete),修改(Update)
(二)关系操作得特点
集合式得操作方式,即操作得对象与结果都就是集合。
(三)关系数据语言可以分为三类
1关系代数语言
2关系演算语言(元组关系演算与域关系演算)
3具有关系代数与关系演算双重特点得语言(SQL语言)
三关系完整性约束
关系数据库得数据必须遵循得约束
实体完整性(EntityIntegrity)
参照完整性(ReferentialIntegrity)
用户自定义完整性(User-DefinedIntegrity)
实体完整性与参照完整性就是关系模型必须满足得完整性约束条件,被称为关系得两个不变性。
(一)实体完整性
实体完整性规则:
关系模式R得主属性值不可为空
指所有主属性均不可取空值,不仅仅就是主键不可为空
(二)参照完整性
1外键(ForeignKey)
定义:
设F就是基本关系R得一个或一组属性,但不就是关系R得码,KS就是基本关系S得主码。
如果F与KS相对应,则称F就是R得外码(ForeignKey)
R称为参照关系(ReferentialRelation),S称为被参照关系(ReferencedRelation)
2参照完整性规则
若属性(或属性组)F就是基本关系R得外码,它与基本关系S得主码KS相对应(基本关系到R与S不一定就是不同关系),则对于R中每个元组在F上得值必须为:
(1)等于被参照关系S中所参照得候选键得某个值
(2)空值
(三)用户自定义完整性
针对某一具体数据得约束条件,反映某一具体应用所涉及得数据必须满足得特殊语义
由应用环境决定
四关系代数
关系代数按运算符得不同可分为传统关系运算与专门关系运算
(一)传统关系运算(交,并,差,笛卡尔乘积)
1∪(并)R1∪R2=b2d
b3b
c2d
d3b
a3c
e5f
g66
2∩(交AND)R1∩R2=b2d
c2d
3━(差)R1━R2=b3b
d3b
4╳(笛卡尔乘积)R1╳S=b2d2d
b2d3b
b3b2d
b3b3b
c2d2d
c2d3b
d3b2d
d3b3b
(二)专门关系运算
1选择(SELECT)(选择符合条件得元组)
δ<
选择条件>
(<
关系名>
)如:
δ性别=男(STUDENT)
表得水平划分
2投影(Project)(选择符合条件得属性)
Π<
属性表>
(<
Π学号,姓名(STUDENT)
表得垂直划分
3连接操作(Join)
笛卡尔乘积R╳S={<
t,g>
|t∈RANDg∈S}
(1)连接分为等值连接与自然连接
AфB
连接操作:
R|╳|S其中A与B分别为R与S上度数相等且具有可比性得属性组
1)等值连接(ф为=)
R1、A1R1、A2R1、A3S、A2S、A3
如上例R1|╳|S=b2d2d
R1、A2=S、A2b3b3b
c2d2d
d3b3b
2)自然连接(只有|╳|)
一般连接就是从行得角度出发得,但自然连接还要取消重复得列,就是从行与列得角度进行运算
S、A2S、A3
R1、A1R1、A2R1、A3
如R1|╳|S=b2d
B3b
4除运算(÷
)
R1、A1
如R1÷
S=b
在R1上b印象集合就是{(2,d),(3,d)}
S在(A1,A2)上得投影为{(2,d),(3,d)}
第二章关系数据库得标准语言SQL
一SQL动词表
SQL功能
动词
数据查询
SELECT
数据定义
CREATE,DROP,ALTER
数据操纵
INSERT,UPDATE,DELETE
数据控制
GRANT,REVOKE
二数据定义
操作对象
操作方式
创建
删除
修改
模式
CREATESCHEMA
DROPSCHEMA
表
CREATETABLE
DROPTABLE
ALTERTABLE
视图
CREATEVIEW
DROPVIEW
索引
CREATEINDEX
DROPINDEX
注意
SQL通常不提供修改模式定义,修改视图定义,修改索引定义得操作
(一)模式得定义与删除
1模式得定义
CREATESCHEMA<
模式名>
AUTORIZATION<
用户>
例如:
CREATESCHEMA“s-t”AUTORIZATIONwang;
(1)要创建模式,调用该命令得用户必须具有DBA权限,或者获得了DBA授予得CREATESCHEMA权限
(2)如果没指定<
那么<
隐含为<
用户名>
(3)定义模式,实际上就是定义了一个命名空间,在这个空间中可以进一步定义该模式包含得数据库对象,例如基本表,视图,索引。
2模式得删除
DROPSCHEMA<
<
CASCADE|RESTRICT>
(两者必选其一)
DROPSCHEMA“s-t”CASCADE;
(1)CASCADE(级联)表示在删除模式得同时把该模式中所有得数据库对象全部一起删除。
(2)RESTRICT(限制)表示在删除该模式中已经定义了下属数据库对象(表,视图索引),则拒绝该删除语句。
(二)表得定义,删除与修改
1表得定义
CREATETEBLA<
表名>
列名>
<
数据类型>
[列级完整性约束]
[,<
[列级完整性约束]]
[,<
表级完整性约束>
])
列定义得完整格式:
列类型>
[DEFAULT<
默认值>
][[NOT]NULL][<
列约束>
]
AS<
SELECT查询>
若要定义模式式下得表:
CREATETABLE<
、<
(1)数据类型
ANSI/ISO
Oracle
字符型
Char(n)
Character(n)
CharacterVarying(n)
Varchar2(n)
CharVarying(n)
数值型
Numeric
Number
Decimal
Integer
Int
Float
Double
Real
日期型
Date
Time
(2)完整性约束
主键约束(PrimaryKey)实体完整性
外键约束(ForeignKey)参照完整性
检查约束(Check)用户自定义完整性
唯一键约束(Unique)
非空约束(Null|NotNull)
默认值(Defautl)
(3)例子
CREATETABLEstudent
(SnoCHAR(8)PRIMARYKEY,
SnameCHAR(20)UNIQUE,
SsexCHAR
(2)DEFALULT‘男’,
SageSMALLINTCHECK(Sage>
0)
SdeptCHAR(20)
)
CREATETABLECourse
(CnoCHAR(4)PRIMARYKEY,
CnameCHAR(40),
CpnoCHAR(4)REFERENCESCourse(Cno),
CcreditSMALLINT,
CHECK(Ccredit>
CREATETABLEsc
(SnoCHAR(9),
CnoCHAR(4),
GradeSMALLINT,
PRIMARYKEY(Sno,Cno),//注意一定要有括号
FOREIGNKEY(Sno)REFERENCESCourse(Cno),//sno一定要有括号)
(4)说明
1)列约束:
在每个列后定义,可以有多个约束子句,不能定义多个列上得约束
2)表约束:
在全部列定义完成后定义,可以有多个约束子句,多个列上得约束必须使用表约束,单列上得约束可以用列约束,也可用表约束
2表得删除
DROPTABLE<
[CASCADE|RESTRICT]
(1)CASCADE(级联)删除该表没有任何限制,删除表得同时,相关得依赖对象(如视图)也一起删除。
(2)RESTRICT(限制)删除该表就是有限制条件得。
欲删除得表不能被其她表得约束所引用(如CHECK,FOREIGNKEY等约束),不能有视图,不能有触发器(trigger),不能存储过程或函数。
(3)缺省情况下就是RESTRICT
3表得修改
ALTERTABLE<
[ADD<
[完整性约束]]|
[MODIFY<
[完整性约束]]|
[DROPCOLUMN<
]|
[ADD<
表约束>
]|
[DROPCONSTRAINT<
约束名>
例如
(1)ALTERTABLEStudent
ADDDeptVarchar2(10)UNIQUE
(2)AlterTableStudent
DROPCOLUMNage
`(3)AlLTERTABLEStudent
MODIFYagenumber(3)NOTNULL
(4)ALTERTABLEStudent
ADDCONSTRAINTPK_StudentPRIMARYKEY(S#)
(5)ALTERTABLESC
DROPCONSTRAINTFK_SC
(三)视图得定义与删除
1视图得定义
CREATEVIEW<
视图名>
(列名1,列名2,…)//列名一定要放在括号里
查询>
[WITHCHECKOPTION|WITHREADONLY]
例如:
CREATEVIEWcs_view(sno,name,age)
ASSELECTs#,sname,age
FROMstudent
WHEREDept=‘计算机系‘
WITHREADONLY;
(1)WITHCHECKOPTION表示对视图进行UPTATE,INSERT,DELETE操作时要保证更新,插入,删除得行满足视图定义中得谓词条件(即子查询中得条件表达式)
WITHREADONLY表示视图就是只读得
(2)视图得属性列名只能就是全部缺省或全部指定,没有别得选择。
但在下列两种情况下必须明确指定组成视图得列名。
1)某个目标列不就是单纯得属性名,而就是聚集函数或列表达式。
2)多表连接时选出几个同名列作为视图得字段。
(3)子查询可以就是任意得SELECT子句,但通常不允许含有OREERBY子句各DISDINCT短语。
(4)不就是所有视图都就是可更新得
1)基于联接查询得视图不可更新
2)使用了函数得视图不可更新
3)使用了分组操作得视图不可更新
4)只有建立在单个表上而且没有使用函数得视图才就是可更新得
2视图得删除
DROPVIEW<
[CASCADE]
(四)索引得定义与删除
1索引得定义
CREATE[UNIQUE|CLUSTER]INDEX<
索引名>
ON<
[<
次序>
][,<
[<
]]…)
CREATEUNIQUEINDEXSCnoonSC(SnoASC,CnoDESC);
(1)UNIQUE表明此索引得每一个索引值只对应唯一得数据记录
(2)CLUSTER表示要建立得索引就是聚簇索引。
聚簇索引就是指索引项得顺序与表中得物理顺序一致得索引组织,在一个表上只能建立一个聚簇索引。
(3)次序可选ASC(升序)或DESC(降序)缺省值为ASC
2索引得删除
DROPINDEX<
DROPINDEXSCno;
三数据更新
(一)插入数据
INSERT插入数据通常有两种形式,一种就是插入一个元组,另一种就是插入子查询结果。
后者可以一次插入多个元组。
1插入一个元组
INSERT
INTO<
[(<
属性列1>
属性列2>
])]
VALUES(<
常量1>
[,<
常量2>
例如INSERT
INTOStudent(Sno,Sname,Ssex,Sdept,Sage)
VALUES(‘’,‘陈冬’,‘男’,‘IS’,18);
INTO语句中没有出现得属性列,新元组在这些列上将取空值或默认值。
在INTO子句中只指出了表名,没有指出属性名,新元组要在所有属性列上都指定值,属性列得次序与CREATETABLE中得次序相同。
2插入子查询结果
子查询;
例如INSERT
INTODept_age(Sdept,Avg_age)
SELECTSdept,AVG(Sage)
FROMStudent
GROUPBYSdept;
(二)修改数据
UPDATE<
SET<
=<
表达式>
]…
[WHERE<
条件>
];
UPDATEStudent
SETSage=22
WHERESno=’21’;
(三)删除数据
DELETE
FROM<
[WHERE<
例如:
DELETE
FROMStudent
WHERESno=’’;
DELETE语句删除得就是表中得数据,而不就是关于表得定义。
四数据查询
基本数据查询得格式:
SELECT[ALL|DISTINCT]<
目标列表达式>
AS<
别名>
标列表达式>
别名>
FROM<
名或视图名>
表名或视图名>
[WHERE<
查询表达式>
[GROUPBY<
列名1>
][HAVING<
条件表达式>
]]
[ORDERBY<
列名2>
][ASC|DESC];
(一)单表查询
在一个表中查询数据
1*查询
查询全部记录:
查询全部得学生信息
SELECT*FROMStudent;
*表示所有列
等同于
SELECTs#,sname,age,sexFROMStudent
2使用别名(AS或空格)
使用别名:
查询所有学生得学号与姓名
SELECTs#AS学号,snameAS姓名FROMStudent
如果别名包含空格,须使用双引号
SELECTs#AS“StudentNumber”FROMStudent
3表达式查询(三种表达式,字符串表达式,算术表达式,函数表达式)
(1)字符串表达式
查询所有学生得学号、姓名与出生年份,返回两列信息,其中一列就是“学号:
姓名”,另一列就是出生年份
SELECTs#||“:
”||snameAS学生,2003-ageAS出生年份FROMStudent
说明
连接字符串||表示则多个查询列连接为一个列输出。
(2)算术表达式
查询学生得出生年份
SELECT2003-ageAS出生年份FROMStudent;
(3)函数表达式
SELECTsno,to_char(birth,‘mm-dd-yyyy’)ASbirthdayFROMStudent
SELECTCount(sno)As学生人数FROMStudent
4条件查询
(1)WHERE条件
注:
1)在where子句中使用列名与表达式,但不能使用别名。
2)在where子句中使用数值时,既可以用单引号也可以不用单引号,使用日期值
字符值时,都必须使用单引号,并且日期值得格式必须要符合数据库中支持得日
期格式,否则必须事先使用to_date函数将其转换成为数据库中支持得日期格式。
oracle中日期得默认格式为:
01-1月-82
在输入查询条件时,可以用to_date(‘1998’-01-01,’yyyy-mm-dd’)
3)在SQL语句中,命令不区分大小写,但字符串区分大小写
WHERE子句中得关系运算符:
比较操作符:
>
<
>
=,<
=,=,<
逻辑操作符:
ANDORNO
其她操作符:
IN
BETWEENAND
ISNULL与ISNOTNULL
LIKE
EXISTS
例如:
1)IN:
查询‘s001’,’s003’,’s006’与’s008’四学生得信息
SELECT*FROMStudent
WHEREs#IN(‘s001’,’s003’,’s006’,’s008’)
2)IS[NOT]NULL:
查询缺少年龄数据得学生
SELECT*FROMStudentWHEREageISNULL
LIKE:
查询姓名得第一个字母为‘R’得学生
SELECT*FROMStudentWHEREsnameLIKE‘R%’
%:
任意长度得字符串
_:
单个字符(一个汉字占两个字节)
注意:
LIKE只能用于字符串得匹配,不能用于其她类型。
查询姓名得第一个字母为‘R’并且倒数第二个字母为‘S’得学生
SELECT*FROMStudentWHEREsnameLIKE‘R%S_’
多个比较式可用NOT、AND与OR连接
SELECT*FROMStudent
WHEREageISNULLandsnameLIKE‘R%’
3)若要查询通配符可以用转义字符escapecharacter通常character用\
(2)去除重复记录(DISTINCT)
查询学生得姓名
SELECTDistinctsnameFROMStudent
DISTINCTt只对记录有效,不针对某个特定列
SELECTDistinctsname,ageFROMStudent
(3)排序查询(ORDERBY)
注:
1)orderby只能对最终查询结果进行排序,也就就是说其只能放在查询语句得最后一条。
2)可以使用列得别名,列得位置进行排序。
3)在大多数情况下,指定得排序列(orderby列名)都就是选择列(select列名),但排序
列也可以不就是选择列。
但如果在select语句中使用了distinct关键字,则排序列必须
就是选择列了。
查询所有学生信息并将结果按年龄升序排列
SELECT*FROMStudentORDERByage
将结果按年龄升序排列,按姓名降序排列
ORDERByageASC,snameDESC
ASC表示升序,DESC表示降序
(4)聚集函数
注:
1)聚集函数与groupby子句联合使用,表示对每个组进行统计,否则将所有数据行当
成一个组进行统计。
2)聚集函数只能出现在选择列表、orderby子句、having子句中,而不能出现在where
与groupby子句中。
3)除了count(*)外,其她聚集函数都会忽略null行。
4)聚集函数中可以指定all与distinct选项。
其中all就是默认选项,表示统计所有得行(包
括重复行),而distinct只统计不同得行。
count(distinctsal)
<
FuctionName>
([DISTINCT|ALL]<
COUNT(列名):
对一列中得值计数
COUNT(*)