数据库系统概论知识(SQL语言)

数据库系统概论知识(SQL语言)_第1张图片

一.了解数据库(绪论)(只复习重点部分)

我们日常生活中每一个人的信息都是国家居民数据库中的一个元组,那么何为数据库?何为数据?

数据(data):描述事物的符号记录。

数据库(DBS):数据库是保存有组织的数据容器.直义一点他就是用来储存数据的容器。

数据库系统由数据库(DBS),数据库管理系统(DBMS),应用程序,数据库管理员(DBA)构成。

模式:关于数据库和表的布局和特性的信息

数据库特点:1.数据冗程度小

                      2.可共享

                      3.数据独立性高

                      4.可扩展性高

数据库两类数据模型:

1.概念模型(抽象化模型)

2.逻辑模型和物理模型.

概念模型

概念模型是指将用户需求抽象为实体,最终将其转换为逻辑模型实现数据库。

概念模型中的专有名词:

1.实体:客观存在及可相互区别的事物。对应用关系数据库中的元组。

2.属性:实体所具有的某一特性。对应于关系数据库中的每一列的名称

3.码:唯一表示实体的属性集。可理解为全国居民信息中的身份证号码。

4.实体型:用实体名以及其属性名集合来抽象和刻画同类实体。理解为我们全国居民数据表

居民(身份证,姓名,性别)这一关系模式。

5.实体集:同一类型的实体集合.

6.联系:不同实体集之间的联系。分为一对一 一对多 多对多的联系。

概念模型常用工具:E-R图(后面具体介绍,详情请见关系数据库的设计)

常用逻辑模型模型(百度了解即可):

1.层次模型

2.网状模型

3.关系模型

4.面向对象模型

数据库的三级模式与两级映像:

数据库的三级模式:外模式 模式 内模式

两级映像:外模式/模式映像 模式/内模式映像

为什么数据库中的数据具有较高的数据独立性(数据独立性分为逻辑独立性和物理独立性)?

因为数据库的三级模式与两级映像,所以保持了数据库中的数据具有较高的数据独立性。

外模式:用来描述用户的数据特性和需求。

模式:用来描述数据库管理系统中数据库和表的布局的特性的信息。

内模式:内模式是指数据在机器内部的存储布局及特性。包含了数据的物理存储。

映像能够保持设计的关系数据库可以满足用户需求,可以增强数据的独立性。

相信看完这三个概念你应该能够理解为啥三级模式和两级映像可以保持数据独立性高。这也是留给读者的思考,请将答案打在下方评论区,我们一起讨论!

关系数据库

1.关系模型:由关系数据结构、关系操作集合、关系完整性约束构成.

2.关系(对应一张数据库中的表)

    域:具有相同的数据类型的值的集合。例如某个表中性别的取值:{男,女}。

    笛卡尔积:将多个关系作合并,合并后的结果不会去除重复。

举例:A具有m个域,K个元组 B具有n个域 Y个元组

那么A×B之后,得到的关系中包含m+n个域 Y*k个元组 ×为笛卡尔积的运算符号。

候选码:某一属性组的值可以唯一标识一个元组,其子集不能。

关系具有三种形式:

1.基本关系(普通表和基本表)

2.视图表

3.查询表

候选码的所有属性成为主属性,而非候选码则称为非主属性.

注:关系中的每一个属性必须是不可再分的数据项。

关系的描述:

R(U,D,DOM,F)

F为属性间数据的依耐关系集合,DOM为属性向域的映像集合,D为U中属性所来自的域,U为组成该关系的属性名集合。

关系操作(详细语句请见第三章)

1.数据定义(DDL)

2.数据处理(DML)

3.数据控制(DCL)

关系完整性:

1.实体完整性

实体完整性主要用保证实体的信息在数据库中保持完整。

举例:

比如将一个新生婴儿插入到居民数据库中,那么新生婴儿必须具有满足居民数据库中的实体完整性要求,比如居民数据库要求新生婴儿名字不能为空,那么如果你插入的婴儿名字为空,他将失败。这就是实体完整性

实体完整性主要体现在创建语句和插入语句的时候。

2.参照完整性

当一个数据库表和其他数据库表具有参照关系时,那么这个数据库中的信息改变需要参照和他有关联的数据库信息。

设R1为一个关系,R2为另一个关系,K1为R1的主键,F为R1和R2的参考关系,那么F为R2的一个主键。

注:请记住 外键在多方,主键在一方

举例:选课表与课程表与学生表

学生的学号关联与选课表中的学号,选课表中的课程号关联与课程表中的课程号,如果我们贸然修改选课表中某位学生的选课信息,如果学生所选课程号在课程表中没有,那么我们修改将失败。

参照完整性的实现体现在CREATE ALTER DROP等语句上

3.用户定义完整性

用户定义完整性是指用户根据用户的需求来进行数据库设计,对数据库中关系的属性进行约束等操作。

比如:用户要求学生表中不能添加年龄大于30的学生,那么当我们添加年龄大于30的学生将会失败。

用户定义完整性体现在创建表时,也就是CREATE语句实现

关系代数及其运算

关系代数及其运算给数据库管理员查询提功了思维上的引导。

关系代数是一种抽象的查询语言,它用对关系的运算表达查询

关系运算符:

并(\large \cup)交(\large \cap)笛卡尔积(×)差(-)

选择(\large \sigma)投影(\large \pi)连接(\large \bowtie)除运算(÷)

前四种操作与集合操作一致,这里不再多说

选择(\large \sigma

选择是指从数据表中选择符合关系的元组,这里给一个例子

比如:这里有一个学生表STUDENT,要求你给出学生表中性别为男的学生,male为学生表中的性别

\large \sigmaStdudent.male='男'(STUDENT)

 所以选择是从行的角度来选择的

投影(\large \pi

投影是指用户可以查询自己要查看的特定的数据库的表的属性,投影出来的是列,也就是属性的对应分量,这里说分量可能不太严谨,投影出来的是满足用户条件的所有元组对应的该属性的值,也就是一个列符合条件的值,很少写文章所以遵循学术严谨

例如,一个学生表stduent(sno,name,grade),用户只想要查看学术名字和成绩,那么我们只需选择投影name和grade。

关系运算表达式:

\large \piname,grade(stduent)

可以看出投影操作是从列角度进行的

连接(\large \bowtie

t\large \bowtier(连接符下方还有一个表达式 \large A\theta B,其中\large \theta为比较运算符。当\large \theta

为=时其为等值连接。 

 这里的连接是指自然连接,也可以进行等值连接

自然连接(特殊的等值连接):将两个表进行笛卡尔积,并且去除重复数据,要求两个表中必须具有相同的属性名。

等值连接:用一个表的主键和外键连接与他关联的另一个表。

我将在第三章详细讲述自连接 自然连接 等值连接 外连接四种连接

举例:

现在有两个表:一个课程表Cn(sco,cnoname),一个学生表student(sco,name),要求我们查询学生名字以及对应的课程。

\large \piname,cnoname  (Cn \large \bowtie student)(注:在连接符号下面由Cn.sco=student.sco,由于文档无法设计。

除(÷

在这里我们说除,我们不按照书上定义去讲,按照直接的理解,举例说明即可,如果需要按照书上讲述,请在评论区评论。

举例:学生表student(sco,name) 课程表Cno(sco,cno,cnoname)现要求查询至少选择了4号课程和3号课程的学生姓名,课程号

1.建立一个关系K,

课程号
4
3

2.查询选修了课程的所有学生

 \large \piname,cno  \large \left ( student\bowtie Cno \right )  (注:连接运算符下方还有一个条件student.cno=Cno.sco  将此表达式记述为T

3.作除运算

T÷K

所得结果即为题目答案

读到此,除运算你是否清晰了解了

技巧:除运算得到的结果一定是至少满足条件的结果,上方得出的最终结果一定是包含于问题的,但问题所要的结果只是真包含于上方结果关系数据库到此为止,可寻找书上例题或者网上题目练习。下面我们进入最重要的一个环节

SQL语句

SQL语句为:

sql语句不区分大小写,每条语句结束之前都需要以;结束

DDL(数据定义语句)关键字:create drop alter truncate

DCL(数据控制语句)关键字:grant revoke deny

DML(数据操作语句)关键字:insert delete update

DQL(数据查询语句)关键字:select

TCL(事物控制语句)关键字:commit rollback savepoint 

DDL语句大全

CREATE TABLE|VIEW|SCHEMA|INDEX|PROCEDURE|TIGGLE

创建表

CREATE TABLE TABLENAME(

column DATATYPE [null|not null] constraint,

column DATATYPE [null|not null] constraint,·······

);

创建索引

CREATE INDEX INDEXNAME ON TABLENAME(COLUMN,·····);

创建视图

CREATE VIEW VIEWNAME

AS

SELECT COLUMNNAME,·····

FROM TABLENAME,······

[where] ····

[group by]······

[having]·······

[order by] columnname·····;

模式的创建

CREATE SCHEMA SCHEMANAME [AUTHORIZATION ] ON USERNAME;

存储过程的创建

CREATE PROCEDURE PROCEDURENAME

BEGIN 

SELECT ······

END;

触发器的创建

CREATE TIGGLE TIGGLENAME

 on TABLENAME(colunm1, ·······)

for [insert|alter|drop|update|truncate|create]

as   ·······;

DROP语句

DROP [index|table|tiggle|procedure|view] [viewname|tigglename|indexname|tablename|proccedurename|];

ALTER语句

ALTER TABLE TABLENAME(

ADD|ALTER|DROP COLUMNNAME DATATYPE [NOT|NULL] CONSTRAINT;

····);

TRUNCATE TABLE TABLENAME;

TRUNCATE会删除表结构,但他会创建一张新表

DQL

SELECT COLUMNNAME,·····

FROM TABLENAME,······

[where] ····

[group by]······

[having]·······

[order by] columnname·····;

常见比较运算符:= >= <= < > <>(不等于)!=(两种不等于均可用)过去大家均学过,这里不多说。

用于嵌套查询的运算函数:in(子查询语句) all(子查询语句) any(子查询语句)

IN表示实体对象的某个属性在子查询结果集的范围内即可

ALL表示实体对象的某个属性要和全体的子查询范围比较才行

ANY相信就不用多说了

下面我们来说聚合函数

count() 用于计算查询出的元组数量,也就是行数

avg() 用于计算平均值

sum() 用于求和

max()用于返回最大值

min()用于返回最小值

count(*)将会忽略空行,请务必记住

NULL值在SQL中是一个未知值,判断字符类型的数学是否为空请用 is null ,不为空是 is not null ,在where中使用即可。

not and or为三个逻辑运算符,表示 否 与 或

dql语句支持嵌入,但是建议少用,因为会影响允许时间

我们接下来进行前面第二个章节的补充,关于表的连接

1.自连接

表自身与自身连接,我们称为自连接

例1

student(sco,name,matesco) matesco为班长学号

select s1.name from student s1,student s2 where s1.sco=student.matesco;

2.内连接

将两个表进行内连接,内连接会删除掉两个表没有交集的部分信息,最终得到的结果是有交集的部分

举例:

例二.

存在两个班的课程表 Cno1(cno,teachercno) Cno2(cno,teachercno) cno为课程号,teachercno为教师职工号.需要查询教这两个班的相同的老师的课程号.

select * from Cno1 [inner] join Cno2 on Cno1.cno=Cno2.cno; 

3.自然连接

将两个表做笛卡尔积,然后消除掉重复的部分

举例:

例二,要求查询出课程表1中的课程号和教师号以及相同的教师在二班上课的课程号:

select Cno1.*,Cno2.cno from Cno1,Cno2 where Cno1.teachercno=Cno2.teachercno;

4.外连接

外连接分为全外连接,左外连接,右外连接

全外连接:返回多个关联查询表查询出来的所有数据,缺少的数据由null补充(full outer join)

左外连接:只返回查询左表中的数据,不返回右表。(left outer join)

右外连接:读者自己思考这个,讲答案打在公屏上。(right outer join)

这里请读者自己举例验证,由于时间原因暂时不举例,待作者有空例子会出现在评论区或者剩余的数据库部分。

5.等值连接

等值连接相信大家都会用。以例二为例,可以将例二的问题写为:

select Cno1.teachercno from Cno1 where Cno1.teachercno=Cno2.teachercno;

对比一下等值连接,你会发现其实等值连接实现去除重复行是要求用户自己实现的.

剩余数据库部分将在下一期发出,请关注查看。上述写作如果有不足之处请谅解,因为期末原因,可能有错误,感谢你的阅读。听说点赞的同学期末不会考的差哦!

你可能感兴趣的:(数据库,p2p,linq,wpf)