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 排序列表