當前位置:首頁 » 編程語言 » sqlexists原理
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlexists原理

發布時間: 2022-08-30 03:15:55

sql 中 exists 是怎麼回事啊 怎麼用啊 老師沒講懂 呵呵 高手都來幫忙啊

exists 是指:是否存在 的意思

例如你要新建一個新的資料庫 但是不知道以前SQLSERVER里是否已經存在該資料庫了 則可以使用如下語句

IF EXISTS (SELECT * FROM SYSDATABASES WHERE NAME = 'TEST')
DROP DATABASE 'TEST'

該句意思為:在資料庫總記錄中查找是否已存在名為『TEST』的資料庫,

如果存在(IF EXISTS) 則執行DROP操作,呵呵 能理解了吧

按照LZ發的題目來解答的話WHERE NOT EXISTS的意思就是為,「不存在於」子查詢返回的記錄中

❷ sql語句中exists什麼意思,怎麼用

EXISTS 運算符

EXISTS 運算符用於判斷查詢子句是否有記錄,如果有一條或多條記錄存在返回 True,否則返回 False。

具體語法參考:

-from 樹懶學堂

❸ SQL語句exists的使用

exists 後面括弧中,並不關心 SELECT 後的欄位列表,只關心 FROM 後面返回的結果。有結果就是 true,反之為false
如果不加上 e.deptno=d.deptno,exists()括弧中的結果就跟emp 無關了。

加上 e.deptno=d.deptno:表示 如果 dept 表中存在 emp表中的empno要在dept中 資料行,並且這些emp 屬於 sales 或者 research,則exists 為true。

不加上 e.deptno=d.deptno:表示 只要dept中 的dname 包含 sales 或者 research,exists結果就是true,跟emp表沒關系。

類似於表關聯,

把 dname in () 括弧中內容改成dept中不存在的值,查詢結果就是空的了。dname in ('xxx','yyy')

❹ 關於sql語句中exists的作用

exists相當於in,後面那個exists語句就是用來判斷是否滿足條件,滿足,就把它取出來 ,但是你的這個子條件查詢select * from tab1 where id <3 完全沒有主語句的條件情況下,就只需要判斷這個語句select * from tab1 where id <3 是否為真,所以你的結果只有兩種可能,全部輸出或者都沒有

❺ SQL語句中exists和not exists的用法,講得通俗易懂些。

exists : 強調的是是否返回結果集,不要求知道返回什麼, 比如:
select name from student where sex = 'm' and mark exists(select 1 from grade where ...) ,只要
exists引導的子句有結果集返回,那麼exists這個條件就算成立了,大家注意返回的欄位始終為1,如果改成「select 2 from grade where ...」,那麼返回的欄位就是2,這個數字沒有意義。所以exists子句不在乎返回什麼,而是在乎是不是有結果集返回。

而 exists 與 in 最大的區別在於 in引導的子句只能返回一個欄位,比如:
select name from student where sex = 'm' and mark in (select 1,2,3 from grade where ...)
,in子句返回了三個欄位,這是不正確的,exists子句是允許的,但in只允許有一個欄位返回,在1,2,3中隨便去了兩個欄位即可。

而not exists 和not in 分別是exists 和 in 的 對立面。
exists (sql 返回結果集為真)
not exists (sql 不返回結果集為真)
下面詳細描述not exists的過程:
如下:
表A
ID NAME
1 A1
2 A2
3 A3

表B
ID AID NAME
1 1 B1
2 2 B2
3 2 B3

表A和表B是1對多的關系 A.ID => B.AID

SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE A.ID=B.AID)
執行結果為
1 A1
2 A2
原因可以按照如下分析
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
--->SELECT * FROM B WHERE B.AID=1有值返回真所以有數據

SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2)
--->SELECT * FROM B WHERE B.AID=2有值返回真所以有數據

SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3)
--->SELECT * FROM B WHERE B.AID=3無值返回真所以沒有數據

NOT EXISTS 就是反過來
SELECT ID,NAME FROM A WHERENOT EXIST (SELECT * FROM B WHERE A.ID=B.AID)
執行結果為
3 A3
===========================================================================
EXISTS = IN,意思相同不過語法上有點點區別,好像使用IN效率要差點,應該是不會執行索引的原因
SELECT ID,NAME FROM A WHEREID IN (SELECT AID FROM B)

NOT EXISTS = NOT IN ,意思相同不過語法上有點點區別
SELECT ID,NAME FROM A WHEREIDNOT IN (SELECT AID FROM B)

有時候我們會遇到要選出某一列不重復,某一列作為選擇條件,其他列正常輸出的情況.
如下面的表table:
Id Name Class Count Date
1 蘋果 水果 10 2011-7-1
1 桔子 水果 20 2011-7-2
1 香蕉 水果 15 2011-7-3
2 白菜 蔬菜 12 2011-7-1
2 青菜 蔬菜 19 2011-7-2
如果想要得到下面的結果:(Id唯一,Date選最近的一次)
1 香蕉 水果 15 2011-7-3
2 青菜 蔬菜 19 2011-7-2
正確的SQL語句是:
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))
如果用distinct,得不到這個結果, 因為distinct是作用與所有列的
SELECT DISTINCT Id, Name, Class, Count, Date FROM table
結果是表table的所有不同列都顯示出來,如下所示:
1 蘋果 水果 10 2011-7-1
1 桔子 水果 20 2011-7-2
1 香蕉 水果 15 2011-7-3
2 白菜 蔬菜 12 2011-7-1
2 青菜 蔬菜 19 2011-7-2
如果用Group by也得不到需要的結果,因為Group by 要和聚合函數共同使用,所以對於Name,Class和Count列要麼使用Group by,要麼使用聚合函數. 如果寫成
SELECT Id, Name, Class, Count, MAX(Date)
FROM table
GROUP BY Id, Name, Class, Count
得到的結果是
1 蘋果 水果 10 2011-7-1
1 桔子 水果 20 2011-7-2
1 香蕉 水果 15 2011-7-3
2 白菜 蔬菜 12 2011-7-1
2 青菜 蔬菜 19 2011-7-2
如果寫成
SELECT Id, MAX(Name), MAX(Class), MAX(Count), MAX(Date)
FROM table
GROUP BY Id
得到的結果是:
1 香蕉 水果 20 2011-7-3
2 青菜 蔬菜 19 2011-7-2
如果用in有時候也得不到結果,(有的時候可以得到,如果Date都不相同(沒有重復數據),或者是下面得到的Max(Date)只有一個值)
SELECT DISTINCT Id, Name, Class, Count, Date FROM table
WHERE (Date IN
(SELECT MAX(Date)
FROM table
GROUP BY Id))
得到的結果是:(因為MAX(Date)有兩個值2011-7-2,2011-7-3)
1 桔子 水果 20 2011-7-2
1 香蕉 水果 15 2011-7-3
2 青菜 蔬菜 19 2011-7-2
注意in只允許有一個欄位返回
有一種方法可以實現:
SELECT Id, Name, Class, COUNT, Date
FROM table1 t
WHERE (Date =
(SELECT MAX(Date)
FROM table1
WHERE Id = t .Id))

❻ SQL中EXISTS怎麼用

EXISTS在SQL中的作用是:檢驗查詢是否返回數據。

select a.* from tb a where exists(select 1 from tb where name =a.name)返回真假,當 where 後面的條件成立,則列出數據,否則為空。

exists強調的是是否返回結果集,不要求知道返回什麼。比如:select name from student where sex = 'm' and mark exists(select 1 from grade where ...)

只要exists引導的子句有結果集返回,那麼exists這個條件就算成立了,大家注意返回的欄位始終為1

如果改成「select 2 from grade where ...」,那麼返回的欄位就是2,這個數字沒有意義。所以exists子句不在乎返回什麼,而是在乎是不是有結果集返回。

(6)sqlexists原理擴展閱讀:

Exists 方法描述如果在 Dictionary對象中指定的關鍵字存在,返回True,若不存在,返回False。

語法object.Exists(key)Exists 方法語法有如下幾部分:部分描述Object必需的。始終是一個 Dictionary對象的名字。Key必需的,在 Dictionary對象中搜索的Key值。

exist相當於存在量詞:表示集合存在,也就是集合不為空只作用一個集合.

例如 exist P表示P不空時為真; not exist P表示p為空時為真in表示一個標量和一元關系的關系。

例如:s in P表示當s與P中的某個值相等時為真; s not in P 表示s與P中的每一個值都不相等時為真。

exits與not exits

exists(sql 返回結果集為真)

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

如果not exists子查詢只有自己本身的查詢條件,這樣只要子查詢中有數據返回,就證明是false,結果在整體執行就無返回值;一旦跟外面的查詢關聯上,就能准確查出數據。

❼ sql中exists是什麼意思,怎麼講解

SQL EXISTS:

EXISTS 運算符用於判斷查詢子句是否有記錄,如果有一條或多條記錄存在返回 True,否則返回 False。

具體語法參考:

-from shulanxt

回答不易,望樓主採納哦~

❽ sql中in和exist語句的區別

兩者都能實現表功能查詢,主要區別如下:

1、適用表的類型不同。

in是子查詢為驅動表,外面的表為被驅動表,故適用於子查詢結果集小而外面的表結果集大的情況。

exists是外面的表位驅動表,子查詢裡面的表為被驅動表,故適用於外面的表結果集小而子查詢結果集大的情況。

2、子查詢關聯不同。

exists一般都是關聯子查詢。對於關聯子查詢,必須先執行外層查詢,接著對所有通過過濾條件的記錄,執行內層查詢。外層查詢和內層查詢相互依賴,因為外層查詢會把數據傳遞給內層查詢。

in則一般都是非關聯子查詢,非關聯子查詢則必須先完成內層查詢之後,外層查詢才能介入。

3、執行次數不同。

IN 語句:只執行一次,確定給定的值是否與子查詢或列表中的值相匹配。in在查詢的時候,首先查詢子查詢的表,然後將內表和外表做一個笛卡爾積,然後按照條件進行篩選。所以相對內表比較小的時候,in的速度較快。

EXISTS語句:執行次數根據表的長度而定。指定一個子查詢,檢測行的存在。遍歷循環外表,然後看外表中的記錄有沒有和內表的數據一樣的。匹配上就將結果放入結果集中。

❾ 資料庫sql語句中為什麼exists關鍵字 要比 in 關鍵字執行效率高

exists是根據子查詢有無記錄返回確定條件是否成立,如果有記錄返回,條件成立,如果子查詢未返回記錄,條件不成立,不對子查詢結果進行匹配,所以速度較快;in要對子查詢返回的結果用in關鍵字前面的值逐個進行匹配,如果匹配成功條件成立,匹配不成功條件不成立,所以速度較慢。