MySQL day7

连接查询

含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询

笛卡尔乘积现象:表1 有m行 ,表2有n行,结果=m*n行
在这里插入图片描述

在这里插入图片描述

发生原因:没有有效的连接条件
如何避免:添加有效的连接条件

分类:
按年代分类:
sql92标准 仅仅支持内连接
sql99标准【推荐】 支持内连接+外连接(左外、右外) +交叉连接

  按功能分类:
          内连接:
                        等值连接
                        非等值连接
                        自连接
          外连接:
                        左外连接
                        右外连接
                        全外连接
          交叉连接

sql92语法
#一、内连接
#一) 等值连接
语法:
select 查询列表
from 表名1 别名1,表名2 别名2 …
where 等值连接的连接条件
特点:
1、为了解决多表中的字段名重名问题,往往为表起别名,提高语义性
2、表的顺序无要求
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


#2、非等值连接

在这里插入图片描述
#3、自连接

在这里插入图片描述
-------sql99语法

一、内连接

语法:
select 查询列表 from 表名1 别名1
[inner] join 表名2 别名2 (inner可省略)
on 连接条件
where 筛选条件
group by分组列表
having 分组后筛选
order by 排序列表

sql92和sql99的区别:
sql99 使用join关键字代替了之前的逗号,并且将连接条件和筛选条件进行了分离,提高阅读性

#1.等值连接
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
#2.非等值连接
在这里插入图片描述

#3.自连接
在这里插入图片描述
sql99 多表相连
在这里插入图片描述
外连接

说明:查询结果为主表中所有的记录,如果从表有匹配项,则显示匹配项,如果从表没有匹配项,则显示null

应用场景: 一般用于查询主表中有但从表没有的记录

特点:
1、外连接分主从表,两表的顺序不能任意调换
2、左连接的话,左边为主表
右连接的话,右边为主表

##就相当于 用连接条件 从主表 去 从表依次每行匹配
匹配不到就全为null 匹配到了 就查到

语法:
select 查询列表

from 表1 别名
left|right [outer] join 表2 别名
on 连接条件
where 筛选条件
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

子查询

说明: 当一个查询语句中又嵌套了另一个完整的select语句,则被嵌套的select语句称为子查询或内查询
外面的select语句成为主查询或外查询

分类:

按子查询出现的位置进行分类:
1、select后面
要求:子查询的结果为单行单列(标量子查询)
2、from后面
要求:子查询的结果可以为多行多列
3、where或having后面
要求:子查询的结果必须为单列
单行子查询
多行子查询
4、exists后面
要求:子查询结果必须为单列(相关子查询)

按结果集的行列数不同:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集只有一行多列)
表子查询(结果集一般为多行多列)
特点:
1、子查询放在条件中,要求必须放在条件的右侧
2、子查询一般放在小括号中
3、子查询的执行优先于主查询
4、单行子查询对应了 单行操作符:> < >= <= = <>
多行子查询对应了 多行操作符:any/some all in

#一、where后面

#标量子查询

#案例一:谁的工资比Abel高?
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
#列子查询(多行子查询 一列多行)

在这里插入图片描述

在这里插入图片描述

#行子查询(结果集一行多列或 多行多列)
注:有条件限制 子查询的where 筛选条件都为 = 或者相同时
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
#二、select后面
仅仅支持标量子查询

在这里插入图片描述
#三、from后面
将子查询结果充当一张表,要求必须起别名

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
#四、exists后面(相关子查询)
语法:
exists(完整的查询语句)
结果:
1或0

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值