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