MySQL基础

数据库的三大范式是什么?

  • 第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。

  • 第二范式(2NF):在第一范式的基础上,且不存在部分依赖。

    • 非主属性必须完全依赖主属性
  • 第三范式(3NF):在第二范式的基础上,且不存在传递依赖。

    • 非主属性与非主属性之间不能有依赖关系,非主属性必须直接依赖主属性

MySQL是怎么联表查询?

数据库联表查询有四种:

  1. 内连接(innter join)
  2. 左外连接(left join)
  3. 右外连接(right join)
  4. 全外连接(full join)

内连接:查询的是两个表的交集,即两张表都有的数据(通常以数据量小的表作为驱动表)

SQL代码展示:

MySQL 复制代码
    # FROM 两表 WHERE 连接
    SELECT * FROM A表 , B表 WHERE A表.id = B表.id;

    # JOIN ON 连接
    SELECT * FROM A表  JOIN B表 
    ON A表.id = B表.id;

    # INNER JOIN ON 连接
    SELECT * FROM A表 INNER JOIN B表 
    ON A表.id = B表.id;

    # 多JOIN ON 连接
    SELECT * FROM A表 
    INNER JOIN B表 
    	ON A表.id = B表.id
    INNER JOIN C表 
    	ON B表.id = C表.id;

左外连接 :会返回左表中所有的记录。如果右表中没有匹配的记录,则右表字段使用 null 填充

SQL代码展示:

MySQL 复制代码
# LEFT JOIN ON 连接。 
SELECT * FROM A表 LEFT JOIN B表 
ON A表.id = B表.id;

右外连接 :右连接会返回右表中的所有记录。如果左表中没有匹配的记录,则左表字段使用 NULL 填充

SQL代码展示:

MySQL 复制代码
# RIGHT JOIN ON 连接
SELECT * FROM A表 RIGHT JOIN B表 
ON A表.id = B表.id;

全外连接:返回两个表中所有行,包括非匹配行。在MySQL中,FULL JOIN 需要使用 UNION 来实现,因为 MySQL 不直接支持 FULL JOIN


SQL代码展示:

MySQL 复制代码
SELECT * FROM A表 LEFT JOIN B表 ON A表.id = B表.id
UNION
SELECT * FROM A表 RIGHT JOIN B表 ON A表.id = B表.id
相关推荐
ClouGence20 分钟前
SAP HANA 到 Doris 数据迁移:4 种方案对比与迁移教程
数据库·后端·dba
LVZ22 分钟前
用了半年 AI 写代码,最烦的不是代码,是环境
前端·后端·开源
云边有个稻草人29 分钟前
从一条危险的 WHERE 条件说起:金仓数据库逻辑安全警示
后端
用户77139702070630 分钟前
从一脸懵到熟练使用:我的C#CAD二次开发日常中那些“反人类“的循环技巧
后端
JaneConan1 小时前
鸿蒙报错速查:arkts-no-any any 类型禁用,用了就炸,根因 + 真解法
后端·harmonyos
颜酱2 小时前
# 02 | 搭骨架:用 LangGraph 编排 12 步工作流(思路)
前端·人工智能·后端
颜酱2 小时前
02 | 搭骨架:用 LangGraph 编排 12 步工作流
前端·人工智能·后端
嘉伟桑3 小时前
Python调用电价API返回JSON示例:分时电价、现货电价和字段解析
后端
武子康3 小时前
Shippy:确定性工具、会话级 Sandbox 与 Live-Data Eval(4 类收敛 + 7 步实现方案 + 6 类评测指标)
前端·人工智能·后端
我叫黑大帅3 小时前
我为什么单一消费者的场景下,要用 Redis List 当消息队列?
redis·后端·面试