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

sqlnotexist用法

發布時間: 2022-09-22 14:32:05

sql 中的not exists是什麼意思 誰能具體說一下

我的字面理解 就是「不存在」 一般多判斷表或者資料庫的存在
http://soft.zdnet.com.cn/software_zone/2009/1221/1568274.shtml

㈡ sql中 not exists的問題

那你這個查詢結果應該是為空。
not exists 的用法是 沒有返回結果 為真。
EXCEPT是指在第一個集合中存在,但是不存在於第二個集合中的數據。
你A系有沒有被學生選擇的課程。也就是說not exists是有返回值的。有返回值那表示1=0 所以為空

㈢ mysql資料庫,not exists 語句

在sql語言里"存在"exists子句是非常不好理解的。

exists子句有兩種用法,一種為獨立exists子查詢,另一種是父子關聯子查詢。前者對父查詢不構成篩選作用,子查詢若果有記錄存在的話則輸出所有的父查詢記錄集,反之則父查詢輸出空記錄集。後者會對父查詢構成篩選作用,不使用not關鍵字的情況下輸出父查詢中與子查詢的交集,而使用not時則輸出父查詢中與子查詢的非交集。至於如何判斷exists子查詢屬於獨立還是父子關聯查詢,以及為什麼父子關聯exists子查詢會對父查詢構成篩選作用,解釋起來需要很大的篇幅這里就不講了。反正我們記住父子關聯查詢的最常用功能就是它可以求出兩張表的交集或非交集(使用not關鍵字)和不使用group分組的情況下求出某張表的最大值或最小值。

現在回到題主的具體問題上,這個問題涉及到三張表,學生表student、選課表sc、課程表course。

提問要求列出選取了所有課程的學生名單。
下面是提問中給出的sql語句:

select sname from student
where not exists(
select * from course
where not exists(
select * from sc
where sno=student.sno
and cno=course.cno));

從該語句我們看到它使用了兩個嵌套父子關聯不存在判斷not exists子句,顯然是要通過求非交集的方法查出選修了所有課程的學生名單。

一個學生如果他至少有一門課程沒有選修,那麼他在課程表裡就會存在與選課表的非交集,我們姑且稱之為「未選所有課程學生名單子集」,它由內層的not exists選出
...
select * from course
where not exists(
select * from sc
sno=student.sno
and cno=course.cno) .

㈣ 資料庫語言關於not exist的用法

鹵煮你好,
答案寫法很好,我看了很久才弄明白,但我認為有漏洞,實際應用的話應該需要完善
我先說我的寫法,再解釋答案的邏輯
我的:
select st.sno, st.sname
FROM student st
where exists(
select 1 from SC a join Cource b on a.Cno=b.Cno where a.Sno=st.Sno and
a.Cno in(3,5,8) having count(*)=3
)
或者
select st.sno, st.sname
FROM student st
where exists(
select 1 from SC where Sno=st.Sno and
Cno in(3,5,8) having count(*)=3
)
/*通過和上面的比較你可以發現其實Cource其實沒有作用,但是第一種寫法更加嚴密,因為可以判斷SC中的Cno是不是有效的*/
-------分割線--------------------------
再來看看這個答案
SELECT student.sno, student.sname
FROM student
WHERE not exists(select course.cno
from course
where course.cno in (3,5,8) and not exists(select *
from sc
where student.sno=sc.sno and course.cno=sc.cno));
看起來很復雜,我們先來拆分下
因為SQL 的查詢和執行是逐條進行的,主體是從Student表中中選數據,我們假設Student中有【小明】這個人,如何判斷小明是不是該出來呢,只要
select course.cno
from course
where course.cno in (3,5,8) and not exists(select *
from sc
where 『小明』=sc.sno and course.cno=sc.cno)
這一大坨【不返回結果】即可,
這一坨
,select course.cno
from course
where course.cno in (3,5,8) and not exists(select *
from sc
where 『小明』=sc.sno and course.cno=sc.cno)
意思就比較明確了(我這兒迷糊了好一陣子)
只要小明同時選修了3,5,8那麼這段話就不返回結果,所以最終小明就出現了!

/*ps.題目有個地方我沒太看明白,「3且5且8」 是指的是同時選修3,5,8呢還是同時選修3,5,8且只選修這三個。如果是後者這3個寫法還要再加一句exists*/
----三段寫法全部測試通過,鹵煮可以盡情測試~要給分啊!!!!!!!!!!!!

㈤ 關於sql語句 (not exists)

not exits{ 是信息系 not exits(參加項目) }
為什麼是 信息系參加項目的
-- 不存在(是信息系 不存在(參加項目))
選出 不是信息系裡且不參加項目的人
選出 除過信息系裡參加項目的人和其他系的什麼什麼

㈥ 怎麼用用sql語句中的not exists來寫語句

USE pubs
GO
SELECT DISTINCT pub_name
FROM publishers
WHERE EXISTS
(SELECT *
FROM titles
WHERE pub_id = publishers.pub_id
AND type = 'business')
GO

-- Or, using the IN clause:

USE pubs
GO
SELECT distinct pub_name
FROM publishers
WHERE pub_id IN
(SELECT pub_id
FROM titles
WHERE type = 'business')
GO

下面是任一查詢的結果集:

pub_name
----------------------------------------
Algodata Infosystems
New Moon Books

㈦ 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子句不在乎返回什麼,而是在乎是不是有結果集返回。

(8)sqlnotexist用法擴展閱讀:

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中not exists用法

恩,對的,其實寫法很多

1、
select id from a where id not in (select id_no from b)

2、
select id from a
except
select id_no from b

㈩ sql語句not in 和not exist各自的用法和區別

不用那麼多解釋的 很簡單
in 表示集合是否存在
而exists 表示後面查詢結果是否存在

那麼not就是他們的反 不是嗎