sql中的not
1. 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
2. vf中sql語句where not和where not in什麼區別
not是將判斷結果取反,not in 是將判斷是否包含的結果取反,not in 更具體點
3. 【急】SQL語句中否定的用法
簡單的說就是「符號+符號」「單詞+單詞」
比如,你要不屬於,也就是not in,你不可能寫! in.
再比如不等於,不可能寫not =,肯定是!=或者<>.
大概就是這個意思,用字母表達的時候就用not,用符號表達的時候,一般不用not
4. sql server 2008關鍵字not用法
Select * From Procts Where ProctID Not In (1, 3, 5, 7, 9)
-- 找出產品編號不是 1, 3, 5, 7, 9 的產品
Select * From Procts Where Proct_Name Is Not NULL
-- 找出產品名稱不為 NULL 值的產品
5. 請教sql語句中not like的用法
標准SQL中用like進行模糊查詢,有兩個通配符:%百分號代表任意個字元,_下劃線代表一個字元。
1、like'Mc%' 將搜索以字母 Mc 開頭的所有字元串。
2、like'%inger' 將搜索以字母 inger 結尾的所有字元串。
3、like'%en%' 將搜索在任何位置包含字母 en 的所有字元串。
SQL LIKE 操作符語法
『_':下劃線,表示1個任意字元;如 ... where name like '_am',表示僅第一位任意,並以'am'結尾,結果如"Tam","Mam","Pam"等。
'%』: 百分號,表示任意個任意字元;如 ... where name like 『%am',表示前面可以有任意位,只要以'am'結尾,結果如"abcam",「bcdefgham","qwertyuiopam","am"等等。
以上內容參考:網路-SQL LIKE
6. 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))
7. 關於SQL中的NOT EXITS關鍵字
NOT EXITS 沒有什麼用法
就是not exits(select .. from tables)
如果select .. from tables 有結果的話,這個結果就返回false,否則返回true
8. SQL中的not between and 包括等號嗎
between
and是包括等號的,如果是not的話就應該是不包括的。這個很容易驗證。可以進行如下驗證:between
2
and
5看看包不包括2和5,然後再加上not進行檢索即可驗證
9. sql2008 not,and, or 的作用
or意思是:其中一個條件滿足就返回結果,
and 意思是:二者滿足時就返回結果
not 是取反的意思,如not in() 等有好多地方用not