Sql 函数 约束 多表查询 新手02
Mysql常见函数使用(二)
1.思维导图

Mysql常见约束使用(三)

1.普通约束探究
1 | |
1 | |
2.外键约束探究
逻辑探究

它们只是在逻辑上存在这样一层关系;在数据库层面,并未建立外键关联。也就说emp表中的dept_id值可以为任意数值,即是dept表中不存在。而dept表中字段被emp使用了也可以随意删除。 因此无法保证数据的一致性和完整性的。这时候就需要我们严格的进行手动维护或者使用外键约束。
父子关系探究
父表(也称为主表)是提供主键(或唯一键)的表
数据依赖:父表中的主键数据必须先存在,子表中的外键才能引用这些数据。这意味着父表不依赖子表,而子表依赖父表。
1 | |
Mysql常见多表查询(四)

1.多表查询探究
多表查询就是指一次性从多张表中查询数据。
原来我们查询单表数据,执行的SQL形式为:select 字段列表 from 表名;
现在我们想要执行多表查询,就只需要使用逗号分隔多张表即可,如: select 字段列表 from 表名1, 表名2;
但是我们这样使用却发现存在问题:的确同时查到了多张表的数据,但是数据形式和我们想要的并不一样,它排列组合了两张表中的所有数据项!

例如我们查询员工、部门表,本来我们预期是每个员工对应其所在的部门,但事实确实,每个员工都对应了所有部门。这种现象也称之为 笛卡尔积 。

因此,在多表查询中,我们需要根据业务情况进行连接查询,消除无效的笛卡尔积,只保留两张表关联部分的有效数据。
例如在上述示例,我们通过表名.字段名指定员工表的外键等于部门表的主键即可获得预期数据~

2.内链接探究
内连接是将两个或多个表根据指定条件连接在一起,只返回在所有连接表中都有匹配的记录。
内连接查询的是两张表交集部分的数据(也就是绿色部分的数据)。语法分为两种: 隐式内连接、显式内连接。

隐式内连接
1 | |
显式内连接
1 | |
3.外链接
外连接分为:左外连接 和 右外连接。左外连接相当于查询表1(左表)的所有数据,当然也包含表1和表2交集部分的数据。右外连接相当于查询表2(右表)的所有数据,当然也包含表1和表2交集部分的数据。

左外
1 | |

先出左表数据-右表数据拼接
右外链接
1 | |

数据在右边-然后链接左表-包括null-没对应上的也会显示这就是查询范围
4.内外区别探究
在MySQL中,多表查询常常使用内连接(INNER JOIN)和外连接(OUTER JOIN)来实现。两者的区别在于查询结果集中是否包含没有匹配记录的行。以下是它们的区别及例子说明:
1.内连接只返回两个表中满足条件的记录。如果某一行在其中一个表中没有对应的匹配行,则该行不会出现在结果集中。
2.左外连接(LEFT JOIN): 返回左表中的所有记录,即使在右表中没有匹配的记录,右表中没有匹配的地方会显示NULL。
3.右外连接(RIGHT JOIN): 返回右表中的所有记录,即使在左表中没有匹配的记录,左表中没有匹配的地方会显示NULL。
5.自链接
1 | |

6.联合查询
- 注意事项
- 对于联合查询的多张表的字段列表必须保持一致,字段类型也需要保持一致,如果不一致将会报错。
union all会将全部的数据直接合并在一起,union会对合并之后的数据去重。
1 | |

union all查询出来的结果,仅仅只对数据集进行简单的合并,查询结果中可能会存在重复数据项,使用union即可去除重复数据项。
6.子查询
子查询是指在一个 SQL 查询中嵌套的另一个查询。子查询可以用来返回单个值、多个值或一组记录。它们通常用于提供数据给外部查询的条件。
嵌套性:子查询可以嵌入在 SELECT、INSERT、UPDATE 或 DELETE 语句中,也可以作为条件使用。
独立性:子查询可以独立执行,通常会返回一个结果集,该结果集可以被外部查询使用。
可以返回多种结果:子查询可以返回单个值(标量子查询)、单列多行(列子查询)或多列多行(表子查询)。
执行顺序:子查询在外部查询执行之前先执行,外部查询使用子查询的结果。
可用于过滤条件:子查询常用在 WHERE、HAVING 和 FROM 子句中,用于动态生成条件。
1.标量子查询
- 使用示例:查询 “销售部” 的所有员工信息
- 返回单个值(例如,单个数值或字符串)。
1 | |
2.列子查询
子查询返回的结果是一列(可以是多行)。常用的操作符:IN 、NOT IN 、 ANY 、SOME 、 ALL
- 使用示例:查询比 财务部 所有人工资都高的员工信息
1 | |
3.行子查询
返回多行的结果集。
- 这个查询将返回所有薪资高于部门 ID 为 1 的任意员工薪资的员工。
1 | |
4. 表子查询
- 返回多个列和多行的结果集。
1 | |
(SELECT id, name FROM dept WHERE location = '北京')返回一个临时表,包含位于 ‘北京’ 的部门的 ID 和名称。外部查询则连接这个临时表与员工表emp,以获取相应的员工信息。
多表查询业务能实现相关需求的SQL往往会很多, 写法也多种多样,总之,能满足我们的需求,查询出符合条件的记录即可~
5.常用关键字
1.in
IN 用于检查某个值是否在一个给定的集合中,可以是多个值的列表或一个子查询的结果。
1 | |
2.any
ANY 用于与比较操作符(如 =、>、< 等)结合使用,检查一个值是否与子查询结果中的任意值满足条件。
1 | |
3.all
1 | |
**IN**:用于检查某个值是否在集合中,适用于多个值的比较。
**ANY**:检查一个值是否与子查询结果中的任意值满足条件。
**ALL**:检查一个值是否与子查询结果中的所有值满足条件。