一、all any some
表:
all大于所有的值:
any some:大于任意一个即可
例题:
大于50部门所有员工工资的人:
等价于:
二、exists关键字
1、exists查询
exists(子查询) 如果有满足条件的记录,那么exists的结果为true,外层查询语句执行
如果没有满足条件的记录,那么exists的结果为false,外层查询语句不执行
有满足条件的记录:
没有满足条件的记录:
有满足条件的记录:
没有满足条件的记录:
例题:
2、not exists查询
内部没有结果,外部查询不执行:
但是如果加上not not exists 取反,就有结果了
3、exists查询与not exists查询
三、union
将两个结果向下的方向进行拼接
1、union
将上面两个查询union:
产生的结果是向下拼接的:
2、union 与 union all的使用
四、匹配正则查询
正则的规则:
1、开头^
2、结尾$
3、任意.
(1)l与x之间有任意字符:
(2)以l开头,x结尾,中间有任意字符
(3)以d开头,n结尾,中间有任意字符
4、* *前面的字符可以出现0~多次
(1)d开头,d可出现0~多次,n
(2)d开头,n结尾,中间有任意字符 任意字符出现0~多次
(3)d开头,n结尾,中间有任意字符 任意字符出现1次
(4)d开头,n结尾,中间有任意字符 任意字符出现0~1次
5、^[ ] 不能是[ ]中的字符开头
(1)开头不是d a的
(2)开头不能是d的 (有a了)
五、伪列
假的列,如果相对伪列作限制,请使用子查询
1、row_number()
语法:
想展示出来自己加上去的一列,而且这一列以什么排序,就会以此字段排序
按照 1 2 3 4,即使数据相同,还是一直按顺序往下排
2、rank()
有相同的标同一个数字,下一个数字从 从此数字+相同数据出现的个数开始
3、dense_rank()
有相同的标同一个数字,下一个数字从从此数字的下一个开始
例题:
查找工资前3的员工信息
1、
row_number():limit 3
2、rank
原因:row_number()是我们自己加进去的,是伪列,没有在employee表中,所以无法对rownum进行操作,不能直接用where作条件限制。此时需要借助子查询
3、dense_rank
同样的dense_rank也是如此,需要借助子查询
子查询: