数据库基础知识个人整理版 强烈推荐.docx
- 文档编号:11094655
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:37
- 大小:63.40KB
数据库基础知识个人整理版 强烈推荐.docx
《数据库基础知识个人整理版 强烈推荐.docx》由会员分享,可在线阅读,更多相关《数据库基础知识个人整理版 强烈推荐.docx(37页珍藏版)》请在冰豆网上搜索。
数据库基础知识个人整理版强烈推荐
第一章关系数据模型
数据模型(静态)的三要素
一关系数据结构
(一)基本概念包括:
1属性(Attribute):
实体所具有的某一特征。
(如学生的特征是学号、姓名、----)
域(Domain):
属性对应的一组具有相同数据类型的值的集合。
每个属性有一个域。
(关系模型限定域必须原子性1NF)
2键(key)
(1)候选键(candidatekey)
关系的某一属性或属性组的值唯一标识一个元组,而其任何真子集无此性质。
候选键的诸属性称为主属性,不包含在任何候选键中的属性称为非主属性。
(2)主键(primarykey)
一个关系至少有一个侯选键,可以有几个侯选键。
一般从侯选键中选择一个作为主键(primarykey),其他的称为侯补键(alternatekey)
每个主键的值是不能相同的,
(3)外键(foreignkey)
如关系中的属性或属性组不是本关系的主键,而引用其他关系或本关系的主键,则称为本关系的外键。
3关系(Relation):
(1)关系:
定义在事物的所有属性域上的多元关系,一个关系就是一张二维表。
(2)关系模式:
关系的描述称为关系模式,它可以形式化的表示为
R(U,D,DOM,F)
R为关系名
U为组成该关系的属性名集合
D为属性组U中属性所来自的域
DOM为属性向域的映像集合
F为属性间数据的依赖关系集合
关系模式通常简记为:
R(U)或R(A1,A2,A3,……,An)
关系的三种基本类型
基本表:
是实际存在的表,它是实际存储数据的逻辑表示。
查询表:
是查询结果对应的表。
视图表:
是由基本表或其他视图导出的表,是虚表,不对应实际存储内容。
二关系操作
(一)两种关系操作
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={
(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<模式名>
例如:
DROPSCHEMA“s-t”CASCADE;
(1)CASCADE(级联)表示在删除模式的同时把该模式中所有的数据库对象全部一起删除。
(2)RESTRICT(限制)表示在删除该模式中已经定义了下属数据库对象(表,视图索引),则拒绝该删除语句。
(二)表的定义,删除和修改
1表的定义
CREATETEBLA<表名>(<列名><数据类型>[列级完整性约束]
[,<列名><数据类型>[列级完整性约束]]
[,<表级完整性约束>])
列定义的完整格式:
<列名><列类型>[DEFAULT<默认值>][[NOT]NULL][<列约束>]
CREATETEBLA<表名>AS
若要定义模式式下的表:
CREATETABLE<模式名>.<表名>
(1)数据类型
ANSI/ISO
Oracle
字符型
Char(n)
Char(n)
Character(n)
CharacterVarying(n)
Varchar2(n)
CharVarying(n)
数值型
Numeric
Number
Decimal
Integer
Int
Float
Double
Real
日期型
Date
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>0)
)
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,…)//列名一定要放在括号里
AS<查询>
[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(‘20081512’,‘陈冬’,‘男’,‘IS’,18);
INTO语句中没有出现的属性列,新元组在这些列上将取空值或默认值。
在INTO子句中只指出了表名,没有指出属性名,新元组要在所有属性列上都指定值,属性列的次序与CREATETABLE中的次序相同。
2插入子查询结果
INSERT
INTO<表名>[(<属性列1>[,<属性列2>])]
子查询;
例如INSERT
INTODept_age(Sdept,Avg_age)
SELECTSdept,AVG(Sage)
FROMStudent
GROUPBYSdept;
(二)修改数据
UPDATE<表名>
SET<列名>=<表达式>[,<列名>=<表达式>]…
[WHERE<条件>];
例如:
UPDATEStudent
SETSage=22
WHERESno=’200215021’;
(三)删除数据
DELETE
FROM<表名>
[WHERE<条件>];
例如:
DELETE
FROMStudent
WHERESno=’20021528’;
DELETE语句删除的是表中的数据,而不是关于表的定义。
四数据查询
基本数据查询的格式:
SELECT[ALL|DISTINCT]<目标列表达式>AS<别名>[,<标列表达式>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
将结果按年龄升序排列,按姓名降序排列
SELECT*FROMStudent
ORDERByageASC,snameDESC
ASC表示升序,DESC表示降序
(4)聚集函数
注:
1)聚集函数和groupby子句联合使用,表示对每个组进行统计,否则将所有数据行当
成一个组进行统计。
2)聚集函数只能出现在选择列表、orderby子句、having子句中,而不能出现在where
和groupby子句中。
3)除了count(*)外,其他聚集函数都会忽略null行。
4)聚集函数中可以指定all和distinct选项。
其中all是默认选项,表示统计所有的行(包
括重复行),而distinct只统计不同的行。
count(distinctsal)
COUNT(列名):
对一列中的值计数
COUNT(*):
计算记录个数
SUM(列名):
求一列值的总和(数值)
AVG(列名):
求一列值的平均值
MIN(列名):
求一列值的最小值
MAX(列名):
求一列值的最大值
例子:
求学生的总人数
SELECTcount(*)FROMstudent
求选修了课程的学生人数
SELECTCOUNT(DISTINCTs#)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库基础知识个人整理版 强烈推荐 数据库 基础知识 个人 整理