MySQL之多表

多表关系

1.概述:项目开发中,在进行数据库表结构设计时,会根据业务需求集业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在各种联系。

2.分类
①一对多:在多的一方建立外键,指向一的一方的主键
②多对多:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。
③一对一:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

多表查询

1.概述:指从多张表中查询数据
附:笛卡儿积,指在数学中,两个集合,A集合和B集合的所有组合情况(在多表查询中需要消除无效的笛卡儿积)

2.代码实现

# 未消除笛卡儿积的多表查询
SELECT * FROM 表名1,表名2;

# 消除了笛卡儿积的多表查询(可用WHERE条件消除)
SELECT * FROM 表名1,表名2 WHERE 表名1.外键 = 表名2.主键;

连接查询

内连接

1.内连接查询的是两张表交集的部分

2.语法

# 隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件……;

# 显示内连接
SELECT 字段列表 FROM 表1 [INNER] JION 表2 ON 连接条件……;

# 两个连接方式效果是一样的,区别在于语法的不同
外连接

1.外连接查询的是两个表中满足连接条件的所有行,以及左表中未找到匹配行的右表的所有行(左外连接),或右表中未找到匹配行的左表的所有行(右外连接)。外连接通常用于查找相关联的数据,即使在某些表中没有匹配的行。

2.语法

# 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件……;
相当于查询表1(左表)的所有数据,包含表1和表2交集部分的数据

# 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JION 表2 ON 条件……;
相当于查询表2(右表)的所有数据,包含表1和表2交集部分的数据

自连接

1.自连接是指使用表的别名实现表与其自身连接的查询方法。

2.语法

SELECT 字段列表 FROM 表A 别名A JION 表A 别名B ON 条件……;
# 自连接查询,可以是内连接查询,也可以是外连接查询。

联合查询-union,union all

对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集

# 将两次查询结果进行合并成一个新的查询结果集 
SELECT 字段列表 FROM 表A ……
UNION [ALL]
SELECT 字段列表 FROM 表B ……;

注意:
① 对于联合查询的多张表的列数要保持一致,字段类型也需要保持一致
② union all会将全部的数据直接合并在一起,union会将查询结果进行去重。

子查询

1. 概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。

2.代码

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
# 注意:子查询外部的语句可以是INSERT\ UPDATE\ DELETE\ SELECT的任何一个。

3.分类

A.根据子查询的结果,分为
①标量子查询(子查询结果为单个值)
②列子查询(子查询结果为一列)
③行子查询(子查询结果为一行)
④表子查询(子查询结果为多行多列)

附:

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值