Java 面试之数据库篇 (offer 拿来吧你)

现在关于 Java 面试的资料是层出不穷,对于选择困难症的同学来说,无疑是陷入了一次次的抉择与不安中,担心错过了关键内容,现在小曾哥秉持着"融百家之所长,汇精辟之文档"的思想,整理一下目前主流的一些八股文,以达到 1+1 > 2 的效果!

文章目录

基础概念

1、什么是 DB?DBMS?DBS?DBA?

上面名词傻傻分不清,一问搞定

  • 数据库 : 数据库(DataBase 简称 DB)就是信息的集合(数据库是由数据库管理系统管理的数据的集合)

  • 数据库管理系统 :数据库管理系统(Database Management System 简称 DBMS)是一种 操纵和管理数据库的大型软件 ,通常用于建立、使用和维护数据库。

  • 数据库系统 : 数据库系统(Data Base System,简称 DBS)通常由 软件 、 数据库 和 数据管理员 (DBA)组成。

  • 数据库管理员 : 数据库管理员(Database Administrator, 简称 DBA)负责全面管理和控制数据库系统。

2、主键和外键有什么区别?

介绍主键和外键例子

学生表(学号,姓名,性别,班级),其中每个学生的学号是唯一的, 学号 就是一个主键;

用户表(用户名、密码、用户级别),其中用户名是唯一的, 用户名 就是一个主键

在成绩表(学号,课程号,成绩) 中,成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号 的属性组是一个主键 。

成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称 成绩表中的学号是学生表的外键

 

3、数据库范式(1NF、2NF、3NF)介绍?

第一范式:数据库表中的每一列都不可再分,也就是原子性

 

上述不满足原子性原则,所谓原子就是最小的,不能再把它进行划分了,上述可以将部门岗位进行划分为下面的表 

第二范式:在满足第一范式基础上要求每个字段都和主键完整相关,而不是仅和主键部分相关(主要针对联合主键而言)

第二范式的另一种表述方式是: 两张表要通过外键关联,不保存冗余字段

注意: 如果不是联合主键(两个字段共同充当表的主键) ,不存在不遵守第二范式的问题。

 

“订单详情表”使用**“订单编号”和“产品编号”**作为联合主键。

此时“产品价格”、 “产品数量”都和联合主键整体相关,但“订单金额”和“下单时间” 只和联合主键中的“订单编号”相关,和“产品编号”无关。所以只关联了主键中的部分字段,不满足第二范式。

修改后如下图:

 

第三范式:表中的非主键字段和主键字段直接相关,不允许间接相关 

上面表中的“部门名称”和“员工编号”的关系是“员工编号”→“部门编号” →“部门名称”,不是直接相关。此时会带来下列问题:

  1. 数据冗余:“部门名称”多次重复出现。

  2. 插入异常:组建一个新部门时没有员工信息,也就无法单独插入部门信息。就算强行插入部门信息,员工表中没有员工信息的记录同样是非法记录。

  3. 删除异常:删除员工信息会连带删除部门信息导致部门信息意外丢失。

  4. 更新异常:哪怕只修改一个部门的名称也要更新多条员工记录。

解决方案:把上表拆分成两张表,以外键形式关联

 

基础操作 + 内容

一个完整的 SELECT 语句包括 6 个子句,其中前面的 2 个子句是必不可少的,其他子句可以省略。

SELECT 语句的完整格式如下: SELECT [DISTINCT] 目标列名序列-----要查看的列 FROM 表名或视图名------------------数据来源 [WHERE 条件表达式]----------------查询条件 [GROUP BY + 列名] --------------------分组依据 [HAVING + 组条件表达式] ---------分组条件 [ORDER BY + 列名 + [ASC|DESC]序列]----排序依据

主要包含四个部分(基础查询、操作符、高级查询、多表查询)

1、常见的聚合函数

常用的聚合函数有 COUNT()、AVG()、SUM()、MAX()、MIN(),下面以 MySQL 为例,说明这些函数的作用。

  • COUNT()函数:统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数

COUNT()函数,它有两种用法:

COUNT(*)计算表中总的行数,不管某列是否有数值或者为空值。

COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。

COUNT()函数可以与 GROUP BY 一起使用来计算每个分组的总和。

<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾听铃的声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值