sql中exists,not exists的用法

2021-10-05 03:05:28 字數 1320 閱讀 7331

exists : 強調的是是否返回結果集,不要求知道返回什麼, 而是在乎是不是有結果集返回

exists 與 in 最大的區別在於

in引導的子句只能返回乙個字段, exists子句是允許的

而not exists 和not in 分別是exists 和 in 的 對立面。

exists (sql 返回結果集為真)

not exists (sql 不返回結果集為真)

ps: 就是說exists和not exists只是判斷是否存在返回值

如下:

表aid name

1 a1

2 a2

3 a3

表bid aid name

11 b1

22 b2

32 b3

可以查出兩個表中相同的資料如果存在, 則展示存在的資料, not exists則相反

select id,name from a where exists (select * from b where a.id=b.aid)

結果:1 a1

2 a2

如下面的表table:

id name class count date

1 蘋果 水果 10

2011-7

-11 桔子 水果 20

2011-7

-21 香蕉 水果 15

2011-7

-32 白菜 蔬菜 12

2011-7

-12 青菜 蔬菜 19

2011-7

-2

下面這個sql可以根據時間來判斷查詢結果, 查詢該表中某一類字段(如: id)中時間最大的資料

select id, name, class, count, date

from table t

where (not exists

(select id, name, class, count, date from table

where id = t.id and date > t.date)

)結果:

1 香蕉 水果 15

2011-7

-32 青菜 蔬菜 19

2011-7

-2

ps: 如果用distinct,得不到這個結果, 因為distinct是作用與所有列的

SQL中的作業

這幾天,一直都在做有關於 使用者的管,原本同事不想對使用者的資料進行物理刪除,但是有關聯的表有三張,查詢出來的時候會出現記錄重複的現向,所以只能對附表進行物理刪除,對主表中的資料進行暫時性的保留,但時間長了對資料的冗餘量那真是不太可觀,所以想辦法要對資料進行定期的清楚.在csdn中找到的方法,收到這...

SQL中的事務

sql中的事務 事務 begin transaction 開始事務 commit transaction 提交事務 rollboack transaction 回滾事務 set implicit ransaction on 隱式事務 update customer set nickname nick...

sql中的連線

一般基於 ansi 標準的 sql 列出了五種 join 方式 內連線 inner join 全外連線 full outer join full join 左外連線 left outer join left join 右外連線 right outer join right join 交叉連線 cro...