NOT IN/NOT EXISTS/EXCEPT 使用注意事項
#SQL
【SQL Tips】之【 NULL處理技巧,使用NOT IN /NOT EXISTS/EXCEPT】
許多時候,兩個資料表要找出差異值的時候,許多人第一直覺就是使用【NOT IN】,當然大部分時候都不會有狀況,但是碰到NOT IN的子查詢資料值,如果有NULL,就全盤皆輸,意思就是找不出任何差異。這樣在小量資料可以藉由眼力觀察的狀況下,還可以找出這樣寫法NOT IN的危險地方,但是碰到背景程式,或是資料量多的時候,幾乎無法觀察到這樣危險。所以,告訴自己不要再用【NOT IN】去找出兩邊資料差異。
反倒是要使用【NOT EXISTS】寫法,雖然是複雜一點,但是跨越SQL Server與Oracle兩種資料庫,都是可以正常找出兩邊資料差異值,不擔心NOT EXISTS的基礎資料表有NULL值狀況。另外值得一提就是,需多人會直接使用SQL Server的【EXCEPT】與Oracle的【MINUS】方式,要留意再留意,這樣的方式雖然可以找出差異值,但是針對回傳值,會自動進行重複資料列移除。
【SQL Server Code】
if object_id('x') is not null
drop table x
go
--建立比對基礎資料
create table x(a int)
go
insert into x values(1)
insert into x values(1) --注意重複
insert into x values(NULL) --注意NULL
go
if object_id('y') is not null
drop table y
go
--建立簡單比對來源資料
create table y(b int not null)
go
insert into y values(1)
insert into y values(1)
insert into y values(2)
insert into y values(2)
insert into y values(2) --注意三個2
go
--三種找出y資料表中(1,1,2,2,2) 然後不存在於 x資料表中的(1,1,null)
--【預期要回傳三個2】
--第一種 使用NOT IN 注意(子查詢有NULL值)
--無法處理對比資料表有NULL狀況
SELECT b
FROM y
WHERE b NOT IN(SELECT a from x)
GO
--第二種 使用NOT EXISTS 注意(SELECT 需要 JOIN)
--忠實回傳三個2
SELECT b
FROM y
WHERE NOT EXISTS (SELECT * FROM x WHERE x.a = y.b)
GO
--第三種 使用EXCEPT (僅回傳一個2)
SELECT b FROM y
EXCEPT
SELECT a FROM x
GO
【Oracle Code】
drop table x purge;
--建立比對基礎資料
create table x(a int);
insert into x values(1);
insert into x values(1); --注意重複
insert into x values(NULL); --注意NULL
drop table y purge;
--建立簡單比對來源資料
create table y(b int not null);
insert into y values(1);
insert into y values(1);
insert into y values(2);
insert into y values(2);
insert into y values(2); --注意三個2
--三種找出y資料表中(1,1,2,2,2) 然後不存在於 x資料表中的(1,1,null)
--第一種 使用NOT IN 注意(子查詢有NULL值)
--無法處理對比資料表有NULL狀況
SELECT b
FROM y
WHERE b NOT IN(SELECT a from x);
--第二種 使用NOT EXISTS 注意(SELECT 需要 JOIN)
--忠實回傳三個2
SELECT b
FROM y
WHERE NOT EXISTS (SELECT * FROM x WHERE x.a = y.b);
--第三種 使用EXCEPT (僅回傳一個2)
SELECT b FROM y
MINUS
SELECT a FROM x;
同時也有2部Youtube影片,追蹤數超過4萬的網紅吳老師教學部落格,也在其Youtube影片中提到,如何用EXCEL VBA匯整12個月資料到總表 這是在東吳大學進修推廣部的VBA進階課上課的範例, 先學會如何將大量工作表整合在一個工作表 [連結] 接下來補充網路學員問到如何匯整12個月資料捐款明細到總表的問題, 他是先用錄製巨集之後再來修改為迴圈, 給1到12月工作表範圍,於是就可以自動將資料...
sql 兩個select 在 吳老師教學部落格 Youtube 的評價
如何用EXCEL VBA匯整12個月資料到總表
這是在東吳大學進修推廣部的VBA進階課上課的範例,
先學會如何將大量工作表整合在一個工作表 [連結]
接下來補充網路學員問到如何匯整12個月資料捐款明細到總表的問題,
他是先用錄製巨集之後再來修改為迴圈,
給1到12月工作表範圍,於是就可以自動將資料"貼到"總表之中。
但是,
最大的問題是:
1.如何錄製巨集,可以參考:如何學會EXCEL VBA錄製與修改巨集系列之一[連結]
2.解決三個邏輯問題,就是如果1.沒有資料 2.只有一筆 3.有一筆以上
就需要用多重邏輯判斷
VBA裡有兩種陳述式:If 與ElseIf,另一種是Select Case
我比較建議用前者,因為可以比較容易學習,和IF也很接近,無需多學一種。
結果畫面:
上課內容:
程式碼:
教學影音完整版在論壇:
https://groups.google.com/forum/#!forum/scu_excel_vba2_86
課程特色:
1.如何將函數轉成VBA2.VBA與資料庫快速結合
EXCEL函數、 VBA程式設計與資料庫是分別屬於三個領域的知識,
但卻是目前大家都需要的一項專業技能,要把三者融合的很好實在非常不容易,
剛好我有近20年的VB程式設計與資料庫設計的經驗,
教EXCEL函數與相關課程也有多年,因此清楚如何把最重要的知識教給大家,
ADO資料庫設計的知識非常多,但根據我多年的設計實務經驗,
覺得最重要的是掌握SQL語言,就可以輕易的完成查詢、新增、修改與刪除等功能,
就可以輕易的完成自己想處理的大量資料,大大提高工作效率了!
上課用書是:
Excel函數&VBA其實很簡單(http://www.books.com.tw/exep/prod/booksfile.php?item=0010457292)
Excel VBA 與資料庫整合大活用(http://www.books.com.tw/exep/prod/booksfile.php?item=0010463634)
完整教學影音DVD申請:http://goo.gl/ZlBZE
論壇:http://groups.google.com/group/labor_excel_vba?hl=zh-TW
相關教學連結:
如何設計VBA表單與EXCEL當資料庫用(85期)
提高效率VBA入門班第1次上課心得分享
EXCEL VBA處理股票分析自動最佳化範例
如何在EXCEL VBA中快速刪除空白列
定存範例轉VBA與只能輸入數字的InputBox
如何學會EXCEL VBA資料庫系列之一
EXCEL VBA入門:如何撰寫自動格式化的VBA程式
EXCEL VBA入門之一:如何函數轉VBA
VB.NET設計(九九乘法表&小狗動畫&撲克牌&字幕)
回覆Excel VBA入門與進階課的差異?
如何批次下載股市資料到EXCEL中之2
如何用VBA快速取得期貨交易資料(開收高低量)
如何在EXCEL VBA隱藏與顯示工作表
如何移動工作表與排序之1
如何批次下載股市資料到EXCEL中之1
如何批次下載股市資料到EXCEL中
如何建立表單與將EXCEL當成資料庫
如何讓用ACCESS將EXCEL的資料
如何排序工作表
如何將單次查詢改為批次查詢(EXCEL VBA自動化)
如何在EXCEL VBA的工作表隨機上顏色
如何快速在EXCEL中建立查詢系統(免資料庫)之2
如何精簡VBA程式與傳遞引數
如何快速在EXCEL中建立查詢系統(免資料庫)之1
如何將大量工作表整合在一個工作表
如何在EXCEL VBA新增沒有重複名稱工作表
如何自動下載YAHOO股市資料到EXCEL中
如何建立表單與將EXCEL當成資料庫使用
如何在EXCE VBA中複製工作表
如何在EXCEL VBA如何保護工作表
如何在EXCEL VBA新增沒有重複名稱工作表
如何在EXCEL工作表中移動
EXCEL VBA辦公自動化_如何建立查詢系統
如何當下拉清單改變時自動抓取資料之一
如何將數學函數轉EXCEL VBA設計之二
如何增加EXCEL VBA按鈕
如何設定EXCEL VBA開發環境設定說明
如何將EXCEL函數轉成VBA
如何再VBA中建立EXCEL的自訂函數讓公式變簡單
1.EXCEL VBA設計(自強基金會2012)第4次上課
http://terry55wu.blogspot.tw/2012/03/excel-vba20124.html
2.如何把EXCEL"函數"變為 "VBA"?自強基金會2012第5次上課
http://terry55wu.blogspot.tw/2012/04/excel-vba.html
3.自強基金會2012第8次上課
http://terry55wu.blogspot.tw/2012/05/excel-vba20128.html
4.自強基金會2012第9次上課
http://terry55wu.blogspot.tw/2012/05/excel-vba20129.html
5.EXCEL_VBA與資料庫--自強基金會2012(Ending)
http://terry55wu.blogspot.tw/2012/07/excelvba-2012ending.html
EXCEL,VBA,函數東吳進修推廣部,EXCEL VBA 函數 程式設計 線上教學 excel vba 教學 excel vba指令教學 vba範例教學excel excel vba教學視頻 excel函數教學 excel函數

sql 兩個select 在 吳老師教學部落格 Youtube 的評價
如何用EXCEL VBA匯整12個月資料到總表
這是在東吳大學進修推廣部的VBA進階課上課的範例,
先學會如何將大量工作表整合在一個工作表 [連結]
接下來補充網路學員問到如何匯整12個月資料捐款明細到總表的問題,
他是先用錄製巨集之後再來修改為迴圈,
給1到12月工作表範圍,於是就可以自動將資料"貼到"總表之中。
但是,
最大的問題是:
1.如何錄製巨集,可以參考:如何學會EXCEL VBA錄製與修改巨集系列之一[連結]
2.解決三個邏輯問題,就是如果1.沒有資料 2.只有一筆 3.有一筆以上
就需要用多重邏輯判斷
VBA裡有兩種陳述式:If 與ElseIf,另一種是Select Case
我比較建議用前者,因為可以比較容易學習,和IF也很接近,無需多學一種。
結果畫面:
上課內容:
程式碼:
教學影音完整版在論壇:
https://groups.google.com/forum/#!forum/scu_excel_vba2_86
課程特色:
1.如何將函數轉成VBA2.VBA與資料庫快速結合
EXCEL函數、 VBA程式設計與資料庫是分別屬於三個領域的知識,
但卻是目前大家都需要的一項專業技能,要把三者融合的很好實在非常不容易,
剛好我有近20年的VB程式設計與資料庫設計的經驗,
教EXCEL函數與相關課程也有多年,因此清楚如何把最重要的知識教給大家,
ADO資料庫設計的知識非常多,但根據我多年的設計實務經驗,
覺得最重要的是掌握SQL語言,就可以輕易的完成查詢、新增、修改與刪除等功能,
就可以輕易的完成自己想處理的大量資料,大大提高工作效率了!
上課用書是:
Excel函數&VBA其實很簡單(http://www.books.com.tw/exep/prod/booksfile.php?item=0010457292)
Excel VBA 與資料庫整合大活用(http://www.books.com.tw/exep/prod/booksfile.php?item=0010463634)
完整教學影音DVD申請:http://goo.gl/ZlBZE
論壇:http://groups.google.com/group/labor_excel_vba?hl=zh-TW
相關教學連結:
如何設計VBA表單與EXCEL當資料庫用(85期)
提高效率VBA入門班第1次上課心得分享
EXCEL VBA處理股票分析自動最佳化範例
如何在EXCEL VBA中快速刪除空白列
定存範例轉VBA與只能輸入數字的InputBox
如何學會EXCEL VBA資料庫系列之一
EXCEL VBA入門:如何撰寫自動格式化的VBA程式
EXCEL VBA入門之一:如何函數轉VBA
VB.NET設計(九九乘法表&小狗動畫&撲克牌&字幕)
回覆Excel VBA入門與進階課的差異?
如何批次下載股市資料到EXCEL中之2
如何用VBA快速取得期貨交易資料(開收高低量)
如何在EXCEL VBA隱藏與顯示工作表
如何移動工作表與排序之1
如何批次下載股市資料到EXCEL中之1
如何批次下載股市資料到EXCEL中
如何建立表單與將EXCEL當成資料庫
如何讓用ACCESS將EXCEL的資料
如何排序工作表
如何將單次查詢改為批次查詢(EXCEL VBA自動化)
如何在EXCEL VBA的工作表隨機上顏色
如何快速在EXCEL中建立查詢系統(免資料庫)之2
如何精簡VBA程式與傳遞引數
如何快速在EXCEL中建立查詢系統(免資料庫)之1
如何將大量工作表整合在一個工作表
如何在EXCEL VBA新增沒有重複名稱工作表
如何自動下載YAHOO股市資料到EXCEL中
如何建立表單與將EXCEL當成資料庫使用
如何在EXCE VBA中複製工作表
如何在EXCEL VBA如何保護工作表
如何在EXCEL VBA新增沒有重複名稱工作表
如何在EXCEL工作表中移動
EXCEL VBA辦公自動化_如何建立查詢系統
如何當下拉清單改變時自動抓取資料之一
如何將數學函數轉EXCEL VBA設計之二
如何增加EXCEL VBA按鈕
如何設定EXCEL VBA開發環境設定說明
如何將EXCEL函數轉成VBA
如何再VBA中建立EXCEL的自訂函數讓公式變簡單
1.EXCEL VBA設計(自強基金會2012)第4次上課
http://terry55wu.blogspot.tw/2012/03/excel-vba20124.html
2.如何把EXCEL"函數"變為 "VBA"?自強基金會2012第5次上課
http://terry55wu.blogspot.tw/2012/04/excel-vba.html
3.自強基金會2012第8次上課
http://terry55wu.blogspot.tw/2012/05/excel-vba20128.html
4.自強基金會2012第9次上課
http://terry55wu.blogspot.tw/2012/05/excel-vba20129.html
5.EXCEL_VBA與資料庫--自強基金會2012(Ending)
http://terry55wu.blogspot.tw/2012/07/excelvba-2012ending.html
EXCEL,VBA,函數東吳進修推廣部,EXCEL VBA 函數 程式設計 線上教學 excel vba 教學 excel vba指令教學 vba範例教學excel excel vba教學視頻 excel函數教學 excel函數
