MySQL—B站学习总结—连接查询
连接查询
说明:又被称为多表查询,当查询字段来自多个表时,就会用到连接查询
笛卡尔乘积:
出现原因:没有有效的连接条件
解决办法:添加有效的连接条件
按照功能划分:
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接:
右外链接:
全外连接:
交叉连接:
内连接语法:
select 查询列表 from 表1 别名
【inner】 join 表2 别名 on 连接条件
【inner】 join 表3 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 排序列表
特点:
1.为了解决多表中的字段名重复问题,往往为表起别名,提高语义性
2.表的顺序无要求
子查询
含义:
一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询
在外面的查询语句,称为主查询或外查询
特点:
1、子查询都放在小括号内
2、子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
3、子查询优先于主查询执行,主查询使用了子查询的执行结果
4、子查询根据查询结果的行数不同分为以下两类:
① 单行子查询
结果集只有一行
一般搭配单行操作符使用:> < = <> >= <=
非法使用子查询的情况:
a、子查询的结果为一组值
b、子查询的结果为空
② 多行子查询
结果集有多行
一般搭配多行操作符使用:any、all、in、not in
in: 属于子查询结果中的任意一个就行
any和all往往可以用其他查询代替
外连接
说明:
查询结果为主表中所有记录,如果从表有匹配项,则显示匹配项,如果没有,则显示null
特点:
1.外连接分主从表,两个表的顺序不能调换
2.左连接的话,左边是主表,右连接,右边是主表
语法:
select 查询列表 from 表1 别名
left / right outer join 表2 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 排序列表