MySQL中实现集合差异操作Except用法mysql中except

这就是坑。
别信子查询。
别这么干。

用Except。
2 01 8 年就支持了。
简单直接。
记住这个语法。

MySQL 8.0新特性之INTERSECT和EXCEPT

2 02 3 年,我那个朋友刚升级了MySQL8 .0.3 1 ,发现新版的SQL语句增强真不错。
INTERSECT和EXCEPT这俩集合操作符,用起来太方便了。
比如,要找2 01 8 年和2 01 9 年都优秀的员工,直接用INTERSECT,去重后一目了然。
以前得用等值内连接,麻烦多了。
EXCEPT也方便,找出2 01 9 年优秀但2 01 8 年不优秀的员工,简单几行就搞定了。
MySQL5 .7 得用左外连接加WHERE,麻烦死。
而且,这两个操作符还有ALL和DISTINCT选项,选择性更强。
对了,记得优先级比UNION和EXCEPT高哦。
官方文档里都有详细介绍,新特性确实让集合操作更灵活高效。

MySQL 多表查询 "Join"+“case when”语句总结

哎,说起MySQL的多表查询,那可真是复杂啊。
2 02 2 年,我在某个城市的一个项目里,就遇到了这个问题。
记得当时,我们用join语句连接了三个表,那个过程,我真是懵了。
首先得弄清楚,join系列里头,表加法、Crossjoin、innerjoin、leftjoin、rightjoin、fullouterjoin,每个都有啥用。

表加法,就是用union和unionall来合并表,对吧?union得去除重复,可能效率还低点。
而unionall就直接追加结果,简单粗暴。
Crossjoin,产生笛卡尔积,就是把所有表连接结果都展示出来,这个在实际应用里头,用得不多。

innerjoin,这个是根据指定列取两个表都存在的做交叉联结,这个最常用。
leftjoin,以左表为主,右表没有的信息就为空,这个适用于求差集问题。
rightjoin,跟leftjoin相反,以右表为主。
fullouterjoin,这个MySQL不支持,得通过左连接和右连接结果的UNION操作来实现。

连接后的筛选结果,还能用groupby、having等函数,这个我也后来才反应过来。
然后,还有那个casewhen语句,面试里头常见,就是条件判断,处理互斥条件,或者进行汇总分析,利用0、1 技巧增加列分组统计。

我记得有一次,有个数据量特别大的表,我们就是用casewhen来分段统计的,根据特定条件进行数据分类与计算,这个技巧真是好用。
不过,可能我偏激了,觉得这个casewhen在处理复杂查询时,有时候比if语句还方便呢。
嗯,就这样吧。