sql中的exists
A. sql中EXISTS怎麼用
EXISTS 指定一個子查詢,檢測 行 的存在。
select * from TABLE where
exists (SELECT 1)
exists中的語句SELECT 1返回有一行 為1,存在行,返回true,因此可查出TABLE中所有單據
select * from TABLE where
exists (SELECT 1 WHERE 1=0)
exists中的語句SELECT 1 WHERE 1=0返回0行,不存在行返回false,因此查出單據為空
B. sql查詢語句中EXISTS怎麼使用
EXISTS 運算符
EXISTS 運算符用於判斷查詢子句是否有記錄,如果有一條或多條記錄存在返回 True,否則返回 False。
SQL EXISTS 語法
-from shulanxt
如果樓主還不夠理解,可以到 一個叫 樹懶學堂 的站點去看看,那裡面有很多相關的教程,exsists那一節還有具體的例子,可以跟著做做,因為實例的內容比較多我就不幫忙整理了哈~
回答不易,望樓主採納~
C. 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))
D. sql中exists是什麼意思,怎麼講解
SQL EXISTS:
EXISTS 運算符用於判斷查詢子句是否有記錄,如果有一條或多條記錄存在返回 True,否則返回 False。
具體語法參考:
-from shulanxt
回答不易,望樓主採納哦~
E. 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')
F. 關於sql語句中exists的作用
exists相當於in,後面那個exists語句就是用來判斷是否滿足條件,滿足,就把它取出來 ,但是你的這個子條件查詢select * from tab1 where id <3 完全沒有主語句的條件情況下,就只需要判斷這個語句select * from tab1 where id <3 是否為真,所以你的結果只有兩種可能,全部輸出或者都沒有
G. sql 中exists 在where中怎樣用
1、select a.* from tb a where exists(select 1 from tb where name = a.name ) ,exists返回真假,即exists括弧中的判斷是真,則返回1,否則返回0。
2、例如EXISTS的執行流程:select * from t1 whereexists( select null from t2 where y = x )可以理解為: for xin( select * from t1 ) loop if (exists( select null from t2 where y = x.x ) then OUTPUT THE RECORD end if end loop。
拓展資料:
1、SQL語言,是結構化查詢語言(StructuredQueryLanguage)的簡稱。SQL語言是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。
2、SQL語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統可以使用相同的結構化查詢語言作為數據輸入與管理的介面。SQL語言語句可以嵌套,這使他具有極大的靈活性和強大的功能。
3、結構化查詢語言SQL(STRUCTURED QUERY LANGUAGE)是最重要的關系資料庫操作語言,並且它的影響已經超出資料庫領域,得到其他領域的重視和採用,如人工智慧領域的數據檢索,第四代軟體開發工具中嵌入SQL的語言等。
4、SQL 是1986年10 月由美國國家標准局(ANSI)通過的資料庫語言美國標准,接著,國際標准化組織(ISO)頒布了SQL正式國際標准。1989年4月,ISO提出了具有完整性特徵的SQL89標准,1992年11月又公布了SQL92標准,在此標准中,把資料庫分為三個級別:基本集、標准集和完全集。