PostgreSQL中的数组与Any

any 操作符

where expression operator any (subquery)
where expression operator some (subquery)

其实any和some在这里是同等效的,子查询的结果集只能是一个字段,左边表达式使用operator对结果集的每一行进行一次比较运算,
如果有一个运算结果是'TRUE',则表达式结果为'TRUE',如果比较结果全部是'FALSE'表达式结果才是'FALSE'。

expression表达式一般为:字段
operator操作符为:      >, <, =, <>, >=, <=
any可以与some替换 
subquery子查询:        返回的必须是一列


> any  大于子查询结果中的某个值

< any  小于子查询结果中的某个值

>= any 大于或等于子查询结果中的某个值

<= any 小于或等于子查询结果中的某个值

= any  等于子查询结果中的某个值,相当于IN

!= any 不等于子查询结果中的某个值 



select film_id,title,length from film 
        where length >= any (
            select max(film.length) from film inner join film_category using(film_id)
        );

all 操作符

where expression operator all(subquery)

同样子查询中仍只能返回一个字段,与子查询结果集每一行进行比较结果全部是'TRUE'表达式结果才是'TRUE',否则为'FALSE'

> all  大于子查询结果中的所有值

< all  小于子查询结果中的所有值

>= all 大于或等于子查询结果中的所有值

<= all 小于或等于子查询结果中的所有值

= all  等于子查询结果中所有值(除非子查询的结果全部相等,所以实际上没什么意义)

!= all 不等于子查询结果中的任何一个值,相当于NOT IN



select film_id,title,length from film 
      where length > all (
            select round(avg(length),2) as avg_length from film group by rating
        )
        order by length desc;

 

使用in的时候,忽略为null的,不会查询出comm为null的数据

select * from emp e where e.comm in (300, 500, null);

2. 使用not in的时候,如果 not in后面的选项中没有null,只会查询从comm列不为空的列中过滤,会过滤掉comm为null的数据

select * from emp e where e.comm not in (300, 500);

3. 使用not in 的时候,如果not in后面的选项中有null,不会查询出来任何数据。sql语句本身直接返回false,所以使用not in的时候,要保证in中的条件不会出现null的情况,不然可能会出现意想不到的情况。

select * from emp e where e.comm not in (300, 500, null);

查询为  字段  course_id  null

CourseId        pq.StringArray `json:"course_id" gorm:"type:text[]"`         //课程id

 course_id  is null

 

 

 

 

 

 

 

 

 

 

转载:https://blog.csdn.net/weixin_34101229/article/details/85572936

 

posted @ 2022-04-02 16:37  hubb  阅读(3487)  评论(0编辑  收藏  举报