在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/數(shù)據(jù)庫/ sql總exists是通過什么來評判存在與否

sql總exists是通過什么來評判存在與否

sql:
select * from employees s where not exists
(select 1 from dept_emp d where d.emp_no=s.emp_no)

內(nèi)表s:
外表d:
網(wǎng)上對exists的解釋:exists是對外表作loop循環(huán),每次loop循環(huán)再對內(nèi)表進行查詢
我的疑問:
外表是通過其中一個字段去loop內(nèi)表,只要有一個字段存在,就是存在?
還是
外表是通過整條數(shù)據(jù)去跟內(nèi)表匹配,是否存在,如果是這樣,是不是不應是select 1
總之,沒想明白,exists到底是用什么來判斷是否存在的,一行記錄,一行記錄的一個字段,還是其他?

回答
編輯回答
神經(jīng)質

exists

指定一個子查詢,檢測行的存在。遍歷循環(huán)外表,然后看外表中的記錄有沒有和內(nèi)表的數(shù)據(jù)一樣的。匹配上就將結果放入結果集中。具體sql語句如下:

SELECT
    `user`.*
FROM
    `user`
WHERE
    EXISTS (
        SELECT
            `order`.user_id
        FROM
            `order`
        WHERE
            `user`.id = `order`.user_id
    )

使用exists關鍵字進行查詢的時候,首先,我們先查詢的不是子查詢的內(nèi)容,而是查我們的主查詢的表,也就是說,我們先執(zhí)行的sql語句是:

SELECT `user`.* FROM `user` 

然后,根據(jù)表的每一條記錄,執(zhí)行以下語句,依次去判斷where后面的條件是否成立:

EXISTS (
        SELECT
            `order`.user_id
        FROM
            `order`
        WHERE
            `user`.id = `order`.user_id
    )

如果成立則返回true不成立則返回false。如果返回的是true的話,則該行結果保留,如果返回的是false的話,則刪除該行,最后將得到的結果返回。也可以和IN對比來分辯認識它們
Sql語句中IN和exists的區(qū)別及應用

2017年4月4日 02:26
編輯回答
好難瘦

where語句中有匹配條件,d.emp_no=s.emp_no

如果能找到符合條件的記錄就表示exists成立,和select中選擇的內(nèi)容沒關系,只是慣例寫數(shù)字1,換成表的id字段或其他常量值都可以。

2017年7月7日 06:56