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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM