练习:
1、外连接
说明:
查询结果为主表中所有的记录;如果从表中有匹配项,则显示匹配项,如果从表中没有匹配项,则显示null;
应用场景:
一般多用于查询主表中有但从表中没有的记录。
特点:
1、外连接分主从表,两个表的顺序不能随意调换
2、左连接,左边为主表
右连接,右边为主表
语法
select 查询列表
from 表1 别名(主表)
left / right / full outer join 表2 别名 (outer 可不写) //左外 右外 全连接
on 连接条件(表一的某个列等于表二的某个列)
where 筛选条件
group by 分组
having 分组后筛选条件
order by 排序
其实 from后面紧跟的表 就是主表 left outer join 后边跟的表就是从表
两个表的位置不可以互换,互换位置之后 就变成了 右连接了。
常见连接(重要)
全连接(mysql不支持)
2、子查询
说明:
当一个查询语句里又嵌套了另一个完整的select语句,则被嵌套的的select语句称为子查询或内查询。
外面的select语句称为外查询,或者主查询语句
分类:(按子查询出现的位置分)
1、select后面,
要求:子查询结果为单行单列(标量子查询)
2、from 后面
要求:子查询结果可以为多行多列
3、where或者having后面(重要)
要求:子查询结果必须为单列 (分为单行子查询 、多行子查询)
4、exists 后面:
要求:子查询结果必须为单列(相关子查询)
特点:
1、子查询放在条件中,一般放在条件的右侧
2、子查询一般放在小括号中
3、子查询的执行优先于主查询
4、单行子查询对应了单行操作符< > <= >= <>
多行子查询对应了多行操作符 any in some
非法使用标量子查询的情况:
它里面只能是一个数字,不可是一列数字
标量子查询的结果 只能是一行一列。
多行子查询
IN: x in(30,40,50),,判断某个字段是否在其中一个列表内
any /some :判断某字段的值是否满足其中任意一个
x>any(10,30,50) 等价于 x>min()
x=any(10,30,50) 等价于 x in (10,30,50)
all:判断某字段的值是否满足所有的
x>all(10,30,50) 等价于 x >max()
放在其他位置的子查询
1、放在select后面
2、放在from
3、放在 exists后面
分页查询
应用场景:当页面上的数据,一页显示不全的时候,则需要分页显示
分页查询的sql命令请求数据库服务器-》 服务器相应查询到多条数据-》前台分页
limit 关键字 放在所有执行子句之后
起始条目索引从0开始如果不写,就是默认从零开始显示。
联合查询
当查询结果来自多张表,但是多张表之间没有联系,这个时候往往使用联合查询,也称为UNION查询
多表查询列数一致