一、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也是如此,需要借助子查询

子查询:













)](https://img-blog.csdnimg.cn/eaafd1ccf9f344ff91b965c6c8b83e16.png)






