数据库的三大范式是什么?
-
第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。
-
第二范式(2NF):在第一范式的基础上,且不存在部分依赖。
- 非主属性必须完全依赖主属性
-
第三范式(3NF):在第二范式的基础上,且不存在传递依赖。
- 非主属性与非主属性之间不能有依赖关系,非主属性必须直接依赖主属性
MySQL是怎么联表查询?
数据库联表查询有四种:
- 内连接(innter join)
- 左外连接(left join)
- 右外连接(right join)
- 全外连接(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