• 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 一起使用来计算每个分组的总和。

    <
  • 相关阅读:
    Linux学习-20-yum介绍,yum源配置
    Jmeter学习
    大模型lora微调-chatglm2
    两台linux 之间传输文件 (详细+bash脚本)
    Anaconda 踩过的一些坑
    【工程光学】像差
    SpringCloud-7.消息驱动(Spring Cloud Stream)
    VCS & Design Compiler(1)
    1024程序员狂欢节 | IT前沿技术、人工智能、数据挖掘、网络空间安全技术
    在 ubuntu 22.04 上配置界面服务器 vnc
  • 原文地址:https://blog.csdn.net/m0_67698950/article/details/126486508