数据库

数据库基础

1. 范式

  • 1 第一范式(1NF):原子性。所谓第一范式(1NF)是指在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。每一列都是不可分割的原子数据项
  • 2 第二范式(2NF):在1NF之上,非主属性都完全依赖主关键字(主键),第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依
    赖是指不能存在仅仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与
    原实体之间是一对多的关系。
  • 3 第三范式(3NF),在2NF之上,任何非主属性不依赖与其他非主属性(在2NF基础上消除传递依赖)

​ 简而言之,第三范式要求一个关系中不包含已在其他关系已包括的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。

  • 4第四范式,对于候选键只能存在不超过1个多值属性,要求把同一表内的多对多关系删除

例如,职工表(职工编号,职工孩子姓名,职工选修课程),在这个表中,同一个职工可能会有多个职工孩子姓名,同样,同一个职工也可能会有多个职工选修课程,即这里存在着多值事实,不符合第四范式。如果要符合第四范式,只需要将上表分为两个表,使它们只有一个多值事实,例如职工表一(职工编号,职工孩子姓名),职工表二(职工编号,职工选修课程),两个表都只有一个多值事实,所以符合第四范式

总结下:1. 原子性,表中的每一列都是不可再分的原子数据项

2.每个非主属性都完全依赖主属性

3. 任何非主属性不依赖其他非主属性(不存在传递依赖)

4.对于候选键值只存在不超过一个多值属性。

2 事务四大特性

  • 原子性:要么执行,要么不执行

    原子性是指事务包含的所有操作要么成功,要么全部失败回滚

  • 一致性: 所有操作全部执行完以前其他会话不能看到过程

    一致性是指事务必须是数据库从一个一致性状态变换到另一个一致性状态,也就是说一个失误执行之前和执行之后都必须处于一致性状态。那转账来说,假设和用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还是5000,这就是事务的一致性。

  • 隔离性:隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离

  • 持久性:一旦事务提交,对数据的改变是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作

    总结:原子性,一致性,隔离性,持久性

3 数据库中中的left join ,inner join cross join

  • 左连接

    表A 表B

    select * from A left join B on (A.a1=B.a2)

  • 右连接

    表A 表B

    select * from A right join B on (A.a1=B.a2)

  • 内连接

    表A 表B

    select * from A inner join B on (A.a1=B.a2)

  • 全连接

    表 A 表B

    select * from A,B where A.a1=B.a2

4.关系型数据库和非关系型数据库区别

关系型数据库

优点

  1. 容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解
  2. 使用方便:通用的SQL语言使得操作关系型数据库非常方便
  3. 易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率
  4. 支持SQL,可用于复杂的查询。
  5. 支持事务

缺点:

1.为了维护一致性所付出的巨大代价就是其读写性能比较差;

2.固定的表结构;

3.不支持高并发读写需求

4.不支持海量数据的高效率读写

非关系型数据库

1.使用键值对存储数据

2.分布式

优点

无需经过sql层的解析,读写性能很高

基于键值对,数据没有耦合性,容易扩展

存储数据的格式:nosql的存储格式是key,value形式

缺点:不提供sql支持

5 SQL面试题

经典面试题:

1 having 是函数

  • Having子句,在SQL中增加HAVING子句原因是,where关键字无法与聚合函数一起使用。

    having子句可以让我们筛选分组后的各组数据 要和grounp by结合使用

    select column_name,aggreate_function(column_name)
    from table_name
    where column_name operator value
    group by column_name
    having aggregate_function(column_name) operator value;

    它的优先级比较低,整个插叙结果出来之后,可以在having子句中对结果进行处理

2 not in

​ not in 与 in相对 是关键字,后面跟子句

SELECT * from AA_order_info WHERE order_no NOT IN (SELECT * FROM temp_order_lost)

面试题:用一条SQL语句查询xuesheng表每门可都大于80分的学生姓名,

图片说明

  • 使用having函数

    select name from xuesheng  order by name having min(score)>80
  • 使用 not in

    select distinct from xuesheng where name not in
    (select distinct name from xuesheng where score<=80)

3. 删除

​ 删除数据表中的冗余数据
图片说明

删除除了自动编号不同,其他都相同的学生冗余信息。

DELETE t1 from xueshengbiao t1,xueshengbiao t2 
where t1.id=t2.id
and t1.name=t2.name
and t1.kick=t2.kcid
and t1.kcname=t2.kcname
and t1.score=t2.score
and t1.autoid<t2.autoid

4. 模糊查询%

使用符号“%”表示模糊的地方,用like关键字
图片说明

用sql查询出“张”姓学生中平均成绩大于75分的学生信息

select * from student
where name in 
(select name from student where name like '张%' group by name having avg(score)>75)

5 SQL通配符

图片说明
在SQL中,统配符 SQL LIKE操作符一起使用。SQL通配符用于搜索表中的数据,在SQL 中,

like操作符:LIKE操作符用于在where子句中搜索列中的指定模式。

select column_name(s) from table_name where column_name like pattern`
全部评论

相关推荐

祈求顺利毕业😁:简历很好了,多投吧牛油😂。主要是环境不好,大家也卷
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务