Mysql基础
1. 什么是内连接、外连接、交叉连接、笛卡尔积呢?
Mysql中的连接是通过两个或多个表之间的列进行关联,从而获取相关联的数据。
内连接(inner join):返回两个表中连接字段匹配的行。如果一个表中的行在另一个表中没有匹配的行,则这些行不会出现在查询结果中。
假设有两个表,Employees 和 Departments。
SELECT Employees.Name, Departments.DeptName
FROM Employees
INNER JOIN Departments ON Employees.DeptID = Departments.DeptID;
2.外连接(outer join):不仅返回两个表中匹配的行,还返回左表、右表或两者中未匹配的行。
SELECT Employees.Name, Departments.DeptName
FROM Employees
LEFT OUTER JOIN Departments ON Employees.DeptID = Departments.DeptID;
这个查询将返回所有员工的名字和他们部门的名字,即使某些员工没有分配到部门。
3.交叉连接(cross join):返回第一个表中的每一行与第二个表中的每一行的组合,这种类型的连接通常用于生成笛卡尔积。
SELECT Employees.Name, Departments.DeptName
FROM Employees
CROSS JOIN Departments;
2. MySQL 的内连接、左连接、右连接有什么区别?
MySQL 的连接主要分为内连接和外连接,外连接又可以分为左连接和右连接。
三大范式的作用主要是为了减少数据冗余,提高数据完整性。
1.第一范式(1NF):确保表的每一列都是不可分割的基本数据单元,比如说用户地址,应该拆分为省、市、区、详细信息等四个字段。
2.第二范式(2NF):在第一范式的基础上,要求数据库的每一列都与主键直接相关,而不能只与主键的某一部分相关(主要针对联合主键)。
3.第三范式(3NF):在 2NF 的基础上,消除非主键列对主键的传递依赖,即非主键列只依赖于主键列,不依赖于其他非主键列。
4.varchar 与 char 的区别?
char:
char 表示定长字符串,长度是固定的;
如果插入数据的长度小于 char 的固定长度时,则用空格填充;
因为长度固定,所以存取速度要比 varchar 快很多,甚至能快 50%,但正因为其长度固定,所以会占据多余的空间,是空间换时间的做法;
对于 char 来说,最多能存放的字符个数为 255,和编码无关
varchar:
varchar 表示可变长字符串,长度是可变的;
插入的数据是多长,就按照多长来存储;
varchar 在存取方面与 char 相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间,是时间换空间的做法;
对于 varchar 来说,最多能存放的字符个数为 65532
日常的设计,对于长度相对固定的字符串,可以使用 char,对于长度不确定的,使用 varchar 更合适一些。
5.blob 和 text 有什么区别?
blob 用于存储二进制数据,而 text 用于存储大字符串。
blob 没有字符集,text 有一个字符集,并且根据字符集的校对规则对值进行排序和比较。
6.DATETIME 和 TIMESTAMP 的异同?
相同:
1.两个数据类型存储时间的表现格式一致 YY:mm:DD HH:MM:SS
2.两个数据类型都包含日期和时间部分。
3.两个数据类型都可以存储微秒的小数位数(秒后6位小数秒)。
区别:DATETIME 和 TIMESTAMP 的区别
日期范围:DATETIME 的日期范围是 1000-01-01 00:00:00.000000 到 9999-12-31 23:59:59.999999;TIMESTAMP 的时间范围是1970-01-01 00:00:01.000000 UTC 到 ``2038-01-09 03:14:07.999999 UTC
存储空间:DATETIME 的存储空间为 8 字节;TIMESTAMP 的存储空间为 4 字节
时区相关:DATETIME 存储时间与时区无关;TIMESTAMP 存储时间与时区有关,显示的值也依赖于时区
默认值:DATETIME 的默认值为 null;TIMESTAMP 的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP)
补充一些细节:
数据库连接类型
-
内连接(INNER JOIN):
- 返回两个表中连接字段匹配的行。
- 如果一个表中的行在另一个表中没有匹配的行,则这些行不会出现在查询结果中。
-
外连接(OUTER JOIN):
- 包括左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。
- 返回两个表中匹配的行,以及左表、右表或两者中未匹配的行。
-
交叉连接(CROSS JOIN):
- 返回第一个表中的每一行与第二个表中的每一行的组合,即笛卡尔积。
-
笛卡尔积:
- 两个表的所有可能的行组合,不考虑匹配条件。
数据库范式
-
第一范式(1NF):
- 表的每一列都是不可分割的基本数据项。
-
第二范式(2NF):
- 在1NF的基础上,非主键列必须完全依赖于主键。
-
第三范式(3NF):
- 在2NF的基础上,消除非主键列对主键的传递依赖。
数据类型
-
CHAR与VARCHAR:
- CHAR:固定长度字符串,不足部分用空格填充,存取速度快,但空间利用率低。
- VARCHAR:可变长度字符串,只存储实际长度的数据,存取速度慢,但空间利用率高。
-
BLOB与TEXT:
- BLOB:用于存储二进制数据,没有字符集。
- TEXT:用于存储大文本数据,有字符集,支持排序和比较。
-
DATETIME与TIMESTAMP:
- 相同点:
- 存储格式一致。
- 都包含日期和时间部分。
- 都可以存储微秒。
- 不同点:
- DATETIME:日期范围广,存储空间为8字节,与时区无关,可为空。
- TIMESTAMP:日期范围较小,存储空间为4字节,与时区有关,通常默认为当前时间,不可为空。
- 相同点:
这些概念是数据库设计和查询中非常重要的基础,理解它们有助于更有效地设计数据库和执行查询操作。
原文地址:https://blog.csdn.net/2303_81990289/article/details/144412342
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!