数据库笔记——UNION关键字与多表查询(连接查询与子查询)

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的效果为查询是否存在小于子条件中最小值的数据(大于最大)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值