Mysql 学习 04

回顾:

列属性: 主键, 自增长, 唯一键,

关系: 一对一, 一对多, 多对多.
范式: 三层范式
1NF: 字段设计必须符合原子性.
2NF: 不能错在部分依赖(没有复合主键)
3NF: 不存在传递依赖 (实体单独建表)
逆规范化: 效率与磁盘空间的博弈.

高级数据操作:
新增操作: 主键冲突 (更新替换), 蠕虫复制.
更新操作: 限制更新数量: limit
删除操作: 限制删除数量: limit, 清空表 (truncate).
查询操作: select 选项, 字段别名, 数据源 (单表,多表和子查询[别名]), where 子句(条件判断: 从磁盘判断), group by 自句, (分组统计: 统计函数,分组排序, 多字段分组, 回溯统计,), having 子句 (判断结果, 针对分组统计的结果尽心判断). order by 子句 (排序, 多字段排序), limit 子句 (限制记录数, 分页).

需求: 查询出所有的学生, 而且要求显示学生所在的班级信息.

连接查询

连接查询: 将多张表 (可以大于 2 张) 进行记录的连接 (按照某个指定的条件进行数据的拼接): 最终的结果是: 记录数有可能变化, 字段数一定会增加 (至少两张表的合并).

连接查询的意义: 在用户查看数据的时候, 需要显示的数据来自于多张表.

连接查询: 关键字 join, 使用方式: 左表 join 右表
左表: 在join 关键字左边的表
右表: 在join 关键字右边的表.

连接查询的分类

SQL中将连接查询分为四类: 内连接, 外链接, 自然连接 和 交叉连接.

交叉连接:

交叉连接: cross join: 从一张表中循环取出每一条记录,每条记录都去另外一张表中进行匹配: 匹配一定保留 (没有条件匹配), 而连接本身字段会增加 (保留), 最终形成的结果叫做: 笛卡尔积.

基本语法: 左表 cross join 右表; =======from 左表, 右表;
这里写图片描述
笛卡尔积没有意义: 应该尽量避免 (交叉连接没用)
交叉连接存在的价值: 保证连接这种结构的完整性.

内连接:

内连接: [inner] join, 从左表中每一条记录,去右表中的所有记录进行匹配: 匹配必须是某个条件在左表中与右表中相同 才会保留结果, 否则不保留.

基本语法:
左表 [inner] join 右表 on 左表.字段 = 右表.字段; – on 表示连接条件: 条件字段就是代表相同的业务含义 (如 my_student.c_id 和 my_class.id).
这里写图片描述

字段别名以及表别名的使用: 在查询数据的时候,不同表有同名字段, 这个时候需要加上表名才能区分, 而表名太长, 通常可以使用别名.
这里写图片描述
内连接可以没有连接条件: 没有 on 之后的内容, 这个时候 系统会保留所有的结果 (形成笛卡尔积.).
这里写图片描述
内连接 还可以使用 where 代替 on 关键字. (where 没有 on 效率高).
这里写图片描述

外连接:

外连接: outer join, 以某张表为主,取出里面的所有记录, 然后每条与另外一张表进行连接: 不管能不能匹配上条件, 最终都会保留: 能匹配, 正确保留; 不能匹配, 其他字段都置空 NULL.

外连接分为两种: 是以某张表为主: 有主表
**Left join: 左外连接(左连接), 以左表为主表.
Right join: 右外连接,(右连接),以右表为主表.**

基本语法: 左表 left /right join 右表 on 左表.字段 = 右表.字段;

左连接:
这里写图片描述
右连接:
这里写图片描述

虽然左连接和右连接有主表差异,但是显示的结果永远是左表数据在左边, 右表数据在右边.

左连接 和 右连接可以互转.

自然连接:

自然连接: natural join, 自然连接, 就是自动匹配连接条件: 系统以字段名字作为匹配模式 (同名字段就作为条件, 多个同名字段都作为条件).

自然连接: 自然内连接 和 自然 外连接

自然内连接: 左表 natural join 右表;

自然内连接:
这里写图片描述

自然外连接: 左表 natural left/ right join 右表;
这里写图片描述

其实, 内连接 和 外连接都可以模拟自然连接: 使用 同名字段, 合并字段

左表 left / right / inner join 右表 using(字段名); – 使用同名字段作为连接条件: 自动合并条件.
这里写图片描述

**多表连接: A 表 inner join B 表 on 条件 left join C 表 on 条件……..

执行顺序: A 表内连接B表, 得到一个 二维表, 左连接C 表形成 二维表……**

猜你喜欢

转载自blog.csdn.net/yangyang_A/article/details/80329356