❶ sql except 語句
except 語法
SQL2000不支持 SQL2005和以上版本才支持
附贈:
Except
查找兩個集合之間不同的項,可以選擇保留重復項。
語法
Except(«Set1», «Set2»[, ALL])
注釋
在查找不同的項之前先消除兩個集合中的重復項。可選的 ALL 標志保留重復項。清除 «Set1» 中的匹配重復項並保留非匹配重復項。
在SQL200中可以使用Union
例如:
1、
123select * from aexceptselect * form b
應書寫為:
123select * from aunionselect * form b
2、
123select * from aexcept allselect * form b
應書寫為:
123select * from aunion allselect * form b
❷ Sql查詢兩張表的異同數據
假設兩個表都有唯一鍵UserID
可以這么寫(使用全連接【full outer join】:完整外部聯接返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的數據值。)
select *from RCSA_UserInfoDEL a full outer join RCSA_UserInfo b on a.UserID=b.UserIDwhere a.UserID is null or b.UserID is null
❸ sql 一條語句 顯示 第5條~10條的數據
舉個例子, student 表,查詢按name排序後的第5到第10個name
SQL Server
SELECTnameFROM()s
EXCEPT
SELECTnameFROM()s
❹ 在sql查詢中except為什麼比not in效率高
我來普及一下知識
這里的SQL,使用以下的測試表,與測試數據
CREATE TABLE union_tab_1 (
id INT,
val VARCHAR(10)
);
CREATE TABLE union_tab_2 (
id INT,
val VARCHAR(10)
);
INSERT INTO union_tab_1 VALUES(1, 'A');
INSERT INTO union_tab_1 VALUES(2, 'B');
INSERT INTO union_tab_1 VALUES(3, 'C');
INSERT INTO union_tab_2 VALUES(1, 'A');
INSERT INTO union_tab_2 VALUES(1, 'A');
INSERT INTO union_tab_2 VALUES(2, 'B');
INSERT INTO union_tab_2 VALUES(4, 'D');
MINUS / EXCEPT– 返回第一個表中有、第二個表中沒有的數據
Oracle
SQL> SELECT * FROM union_tab_1
2 MINUS
3 SELECT * FROM union_tab_2;
ID VAL
---------- --------------------
3 C
SQL> SELECT * FROM union_tab_2
2 MINUS
3 SELECT * FROM union_tab_1;
ID VAL
---------- --------------------
4 D
SQL Server
1> SELECT * FROM union_tab_1
2> EXCEPT
3> SELECT * FROM union_tab_2;
4> go
id val
----------- ----------
3 C
(1 行受影響)
1> SELECT * FROM union_tab_2
2> EXCEPT
3> SELECT * FROM union_tab_1;
4> go
id val
----------- ----------
4 D
(1 行受影響)
通過 SET SHOWPLAN_TEXT ON 查看 查詢計劃.
我這里的測試表記錄數量很小, 還沒有索引, 因此沒有參考價值.
1> SET SHOWPLAN_TEXT ON
2> go
1> SELECT * FROM union_tab_1
2> WHERE
3> id NOT IN
4> (SELECT id FROM union_tab_2)
5> go
StmtText
--------------------------------------------------------------------------------
-
SELECT * FROM union_tab_1
WHERE
id NOT IN
(SELECT id FROM union_tab_2)
(1 行受影響)
StmtText
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------
|--Nested Loops(Left Anti Semi Join, WHERE:([Test].[dbo].[union_tab_1].[id] IS
NULL OR [Test].[dbo].[union_tab_2].[id] IS NULL OR [Test].[dbo].[union_tab_1].[
id]=[Test].[dbo].[union_tab_2].[id]))
|--Table Scan(OBJECT:([Test].[dbo].[union_tab_1]))
|--Table Scan(OBJECT:([Test].[dbo].[union_tab_2]))
(3 行受影響)
1> SELECT * FROM union_tab_1
2> EXCEPT
3> SELECT * FROM union_tab_2;
4> go
StmtText
----------------------------------------------------------------
SELECT * FROM union_tab_1
EXCEPT
SELECT * FROM union_tab_2;
(1 行受影響)
StmtText
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------
|--Nested Loops(Left Anti Semi Join, OUTER REFERENCES:([Test].[dbo].[union_tab
_1].[id], [Test].[dbo].[union_tab_1].[val]))
|--Sort(DISTINCT ORDER BY:([Test].[dbo].[union_tab_1].[id] ASC, [Test].[d
bo].[union_tab_1].[val] ASC))
| |--Table Scan(OBJECT:([Test].[dbo].[union_tab_1]))
|--Top(TOP EXPRESSION:((1)))
|--Table Scan(OBJECT:([Test].[dbo].[union_tab_2]), WHERE:([Test].[db
o].[union_tab_1].[id] = [Test].[dbo].[union_tab_2].[id] AND [Test].[dbo].[union_
tab_1].[val] = [Test].[dbo].[union_tab_2].[val]))
(5 行受影響)
1> SET SHOWPLAN_TEXT OFF
2> go
1>
❺ sql投影操作
SQL語言中的"投影"的含義是指對 列的操作,從表裡選擇你所要的列 ,就是投影.比如:Select 姓名,性別這里就是對列的選擇 ,這個就叫投影From 表。
select是查詢的意思。但查詢操作可以分為:選擇(select),投影(project ),連接 (join),除(divide),並(union),差(except),交(intersection),笛卡兒積等。其中投影是從關系中選擇出若干屬性列組成新的關系。
高度非過程化:
非關系數據模型的數據操縱語言是面向過程的語言,用其完成用戶請求時,必須指定存取路徑。而用SQL進行數據操作。
用戶只需提出「做什麼」,而不必指明「怎麼做」,因此用戶無須了解存取路徑,存取路徑的選擇以及SQL語句的操作過程由系統自動完成。這不但大大減輕了用戶負擔,而且有利於提高數據獨立性。
❻ SQL 查找兩表中不同的數據
使用except函數,select * from B where (select count(1) from A where A.ID = B.ID) = 0.
方法一(推薦)
WITH C AS ( SELECT Name
FROM ConsumerCouponApply A
WHERE NOT EXISTS ( SELECT 1
FROM ConsumerCouponApply B
WHERE B.Name = A.Name
GROUP BY B.Name )
GROUP BY A.Name
)
SELECT COUNT(1)
FROM C
方法二
WITH C AS ( SELECT A.Name
FROM ConsumerCouponApply A
GROUP BY A.Name
EXCEPT
SELECT B.Name
FROM ConsumerCouponApply B
GROUP BY B.Name
)
SELECT COUNT(1)
FROM C
方法三
SELECT COUNT(A.Name)
FROM ConsumerCouponApply A
LEFT JOIN ConsumerCouponApply B ON A.Name = B.Name
WHERE B.ID IS NULL
(6)sqlexcept用法擴展閱讀:
高級查詢運算詞:
A: UNION 運算符:
UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重復行而派生出一個
結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行
不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重復行而派生出一個結果表。當
ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。
註:使用運算詞的幾個查詢結果行必須是一致的。
❼ 關於SQL中的集合查詢
比較兩個查詢的結果,返回非重復值。
EXCEPT 從左查詢中返回右查詢沒有找到的所有非重復值。
INTERSECT 返回 INTERSECT 操作數左右兩邊的兩個查詢都返回的所有非重復值。
以下是將使用 EXCEPT 或 INTERSECT 的兩個查詢的結果集組合起來的基本規則:
所有查詢中的列數和列的順序必須相同。
數據類型必須兼容。
Transact-SQL 語法約定
語法
{ <query_specification> | ( <query_expression> ) }
{ EXCEPT | INTERSECT }
{ <query_specification> | ( <query_expression> ) }
參數
<query_specification> | ( <query_expression> )
查詢規范或查詢表達式返回與來自另一個查詢規范或查詢表達式的數據相比較的數據。在 EXCEPT 或 INTERSECT 運算中,列的定義可以不同,但它們必須在隱式轉換後進行比較。如果數據類型不同,則用於執行比較並返回結果的類型是基於數據類型優先順序的規則確定的。
如果類型相同,但精度、小數位數或長度不同,則根據用於合並表達式的相同規則來確定結果。有關詳細信息,請參閱 精度、小數位數和長度 (Transact-SQL)。
查詢規范或表達式不能返回 xml、text、ntext、image 或非二進制 CLR 用戶定義類型列,因為這些數據類型不可比較。
EXCEPT
從 EXCEPT 操作數左邊的查詢中返回右邊的查詢未返回的所有非重復值。
INTERSECT
返回 INTERSECT 操作數左右兩邊的兩個查詢均返回的所有非重復值。
備注
如果 EXCEPT 或 INTERSECT 操作數左邊和右邊的查詢返回的可比較列的數據類型是具有不同排序規則的字元數據類型,則根據排序規則優先順序的規則執行所需的比較。如果無法執行此轉換,Microsoft SQL Server 2005 資料庫引擎將返回錯誤。
通過比較行來確定非重復值時,兩個 NULL 值被視為相等。
EXCEPT 或 INTERSECT 返回的結果集的列名與操作數左側的查詢返回的列名相同。
ORDER BY 子句中的列名或別名必須引用左側查詢返回的列名。
EXCEPT 或 INTERSECT 返回的結果集中的任何列的為空性與操作數左側的查詢返回的對應列的為空性相同。
如果 EXCEPT 或 INTERSECT 與表達式中的其他運算符一起使用,則在以下優先順序的上下文中對其進行評估:
括弧中的表達式
INTERSECT 操作數
基於在表達式中的位置從左到右求值的 EXCEPT 和 UNION
如果 EXCEPT 或 INTERSECT 用於比較兩個以上的查詢集,則數據類型轉換是通過一次比較兩個查詢來確定的,並遵循前面提到的表達式求值規則。
EXCEPT 和 INTERSECT 不能在分布式分區視圖定義、查詢通知中使用,也不能與 COMPUTE 和 COMPUTE BY 子句一起使用。
EXCEPT 和 INTERSECT 可在分布式查詢中使用,但只在本地伺服器上執行,不會被推送到鏈接伺服器。因此,在分布式查詢中使用 EXCEPT 和 INTERSECT 可能會影響性能。
快速只進游標和靜態游標與 EXCEPT 或 INTERSECT 運算一起使用時,在結果集中完全受支持。如果由鍵集驅動的游標或動態游標與 EXCEPT 或 INTERSECT 運算一起使用,則運算的結果集的游標轉換為靜態游標。
使用 SQL Server Management Studio 中的圖形顯示計劃功能顯示 EXCEPT 運算時,該運算顯示為 left anti semi join,INTERSECT 運算顯示為 left semi join。