MYSQL的数据类型及多种连接

170 阅读2分钟

复习mysql啦,那就正好整理一下mysql基础吧,之前了解过InnoDB与MyISAM的区别,以及索引的优化。有需要的可以翻一下之前的文章啦。一起开始今天的学习记录吧


三大数据类型

数值类

小二,上图
image.png

  • 在创建表字段的时候使用unsigned可以使数值类转换成无符号数值,具体表现为最大值翻倍最小值为0
  • 值得一提的是,数据类型的长度与可存储数据的范围并无关系
    数据类型的长度实际上指的是显示宽度,可以使用zerofill填充

日期类

小二,怎么这么慢呢

image.png

  • 每一个时间类型都有自己的有效值范围,当插入不在范围内的值时会使用 0 表示
  • TIMESTAMP 专有自动更新特性,when新建记录或是update记录时会自动更新字段。
    默认精度为14位,常用精度有6,8,12,14

字符串类

小二,你被解雇了 image.png

  • 二进制形式指的是它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值
  • char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符
    char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此
  • BLOB 是存储的是字符串的二进制形式,只能整体读出

多种连接

在讲连接之前必须复习一下笛卡尔积
为了方便解释 我们创建两张表

image.png

笛卡尔积

  • 概念:笛卡尔积在数学上指的是二个不同集合中,不同元素的匹配集合
  • 举个栗子:假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}

左连接

  • 语法 SELECT [list] FROM [table] LEFT JOIN [table] ON [condition]

查询结果 是以condition做笛卡尔积之后,左表的所有记录。condition不匹配的以null填充

image.png

右连接

  • 语法 SELECT [list] FROM [table] RIGHT JOIN [table] ON [condition]

查询结果 是以condition做笛卡尔积之后,右表的所有记录。condition不匹配的以null填充 image.png

内连接

  • 语法 SELECT [list] FROM [table] INTER JOIN [table] ON [condition]

查询结果 是以condition做笛卡尔积之后所匹配的记录

image.png