關於exists運算子的理解

2022-03-14 17:13:01 字數 1362 閱讀 7467

exists運算子是用來檢查每一行是否匹配子查詢,也可以這麼認為exists就是用來測試子查詢的結果是否為空,如果結果集為空則匹配結果為false,否則匹配結果為true。

下面我通過oracle表舉幾個例子,下面我給出三張表,t_book,t_category,t_reader。

t_book的字段: fid,fname,fyearpublished,fcategoryid

t_category的字段: fid,fname

t_reader的字段: fid,fname,fyearofbirth,fcity,fprovince,fyearofjoin

查詢條件:測試是否存在山東省的讀者

select * from t_book where exists

( select * from t_reader where fprovince='shandong'

)

這句sql語句對t_book表中的每行資料進行匹配,測試是否存在山東省的讀者!如果匹配則返回資料,不過不匹配則不返還資料!

執行結果如下:

其實上面這個列子在實際中並不常用,exists運算子只有和相關子查詢一起使用才更有意義,在相關的子查詢中引用外部查詢中的這個字段,這樣在匹配外部

子查詢中的每行資料的時候,相關子查詢就會根據當前行的資訊來進行匹配判讀,這樣就可以實現豐富的功能。

條件:檢索在2023年以前出版的圖書的圖書類別:

select

*from t_category a where

exists

(

select

*from t_book where a.fid=

t_book.fcategoryid

and t_book.fyearpublished<

1950

)

這句sql對t_category表中的每一行資料進行匹配,測試t_book表中是否在fcategoryid字段值等於當前類別主鍵值且出版年份在2023年之前的書籍。

結果:

關於邏輯運算子的理解

int i 0 int n 0 1 n i printf i d n i printf n d n n 0 n i printf i d n i printf n d n n return 0 在網上看到這樣一段 執行結果如下 輸出 i 1 n 1i 2 n 1經過仔細思量,終於理解,現將其記錄下來...

關於運算子

運算子 根據運算元的個數將運算子分為 一元運算子 二元運算子 三元運算子 根據功能可以分為如下 1 算術運算子 自增運算子 自增1 自減運算子 自減1 自增 自減運算子不參與賦值時,前置和後置一樣 賦值時 後置運算子 先賦值,後運算 前置運算子 先運算,後賦值 注意 當 運算子兩邊有乙個運算元為字串...

關於運算子

運算子包括 not div mod and shl shr as or xor in is 其中 not 是一元運算子 有時是一元,有時是二元 其他都是二元運算子.一元運算子在運算數的前面,例外,也可以在後面,如 p 二元運算子在運算數中間.運算子的行為隨運算數的型別而變,譬如 not 面對整數是對...