UNION合并结果集
要求:被合并的结果集中列数和列类型相同
//把两个表中的数据上下合并起来
select * from tableA
UNION ALL
select * from tableB;
UNION 和UNION ALL的区别
UNION去除重复行,UNION ALL不去除重复行
———————————————————————————————————————
———————————————————————————————————————
连接查询的分类
内连接、外连接与自然连接
———————————————————————————————————————
———————————————————————————————————————
内连接例子:
标准内连接适用于不同的数据库间
自然内连接会自动匹配相同列进行表的连接
———————————————————————————————————————
———————————————————————————————————————
外连接例子:
左外连接:以左表为主,无论条件是否满足,结果集中都必须出现左表的所有行,右表中没有的数据使用NULL进行补位。(右外连接同理。)
由于MySQL不支持全外连接,可以使用左外连接UNION右外连接进行结果集合并得到全外连接的效果。
自然连接同上,无需书写连接条件。
———————————————————————————————————————
———————————————————————————————————————
子查询
例子:查询员工表中工资最高的员工的详细信息
由于查询条件中不能包含函数,必须进行嵌套查询
//查询工资最高的员工的信息
select * from emp where sal=(select MAX(sal) from emp);
子查询可以应用于from关键字以及where关键字后
//用于from后的情况(一般为多行多列):
//查询部门号为30的满足条件的员工的信息
select * from (select * from emp where deptno=30)
where 条件;
//用于where后的情况(一般为单行单列或多行单列)
//查询工资高于平均的员工信息(子条件为单行单列)
select * from emp
where sal > (select AVG(sal) from emp);
//查询工资大于【经理中最低工资】的员工的信息(子条件为多行单列)
select * from emp
where sal > any (select sal from emp where job='经理');
可以看到当条件为多行单列时需要添加判断符号in、any或all
其中in的作用的与=any的效果一样,判断是否有相等的条件(等于任一)
<any的效果为查询是否存在小于子条件中最大值的数据(小于最大)
>any的效果为查询是否存在大于子条件中最小值的数据(大于最小)
<all的效果为查询是否存在大于子条件中最大值的数据(小于最小)
>all的效果为查询是否存在小于子条件中最小值的数据(大于最大)