SQL中exsit和in
本週在做ETL的時候踩了個小坑
A表中資料有18條,有欄位UserID
B表與A表結構相同,但只有16條資料(手動刪除2條,更改2條UserID為不重複的其他值)
當
Select UserID from B where UserID in (Select UserID from A)
時,查到12條資料(預想為14條)
當
Select UserID from B where UserID not in (Select UserID from A)
時,查到2條資料(預想為2條)
當
Select UserID from B where UserID exsit (Select UserID from A)
時,查到14條資料
經查詢,發現表中有2條資料UserID欄位為null。
翻閱資料發現,無論in和not in,null都不成立,而exsit會成立
in的處理方式是:首先查詢子查詢內容,然後與主查詢做笛卡爾積;
exsit的處理方式是:首先查詢主查詢,然後遍歷每一條結果是否符合子查詢要求,符合則返回true並儲存結果,否則返回false不儲存結果
相關推薦
SQL中exsit和in
本週在做ETL的時候踩了個小坑 A表中資料有18條,有欄位UserID B表與A表結構相同,但只有16條資料(手動刪除2條,更改2條UserID為不重複的其他值) 當 Select UserID from B where UserID in (Select UserID from A)
SQL中exists和in的一些區別
1.exist,not exist一般都是與子查詢一起使用. In可以與子查詢一起使用,也可以直接in (a,b.....)。2.exist會針對子查詢的表使用索引. not exist會對主子查詢都會使用索引. in與子查詢一起使用的時候,只能針對主查詢使用索引. not
sql中exits和in的區別
轉:http://hi.baidu.com/delphi_relive/blog/item/d7c0034a49c4932208f7ef21.html in 和 exists也是很好區別的. in 是一個集合運算子. a in {a,c,d,s,d....} 這
SQL語句中exists和in的區別
splay 比較 server for target 空值 不存在 依次 第一個 轉自https://www.cnblogs.com/liyasong/p/sql_in_exists.html 和 http://blog.csdn.net/lick4050312/artic
SQL語句中exists和in的區別?
查詢中涉及到的兩個表,一個books和一個borrow表,具體表的內容如下: 書單(books)表: 借書表borrow IN 一、確定給定的值是否與子查詢或列表中的值相匹配。in在查詢的時候,首先查詢子查詢的表,然後將內表和外表做一個笛卡爾
sql中exists和not exists用法 容易和in 和 not in 混淆
看專案程式碼時遇到,記錄下 select * from A where id in(select id from B) 以上查詢使用了in語句,in()只執行一次,它查出B表中的所有id欄位並快取起來. 然後,檢查A表的id是否與B表中的id相等, 如果相等則將A表的記
SQL中EXCEPT和Not in的區別?
初始化兩張表: CREATE TABLE tb1(ID int) INSERT tb1SELECT NULLUNIONALLSELECT NULLUNIONALLSELECT NULLUNIONALLSELECT 1UNIONALLSELECT 2UNIONALLSELECT
SQL中EXCEPT和Not in的區別
SQL中EXCEPT和Not in的區別? 我們一起來看看。 初始化兩張表: CREATE TABLE tb1(ID int) INSERT tb1 SELECT NULL UNION ALL SELECT NULL UNION
SQL中on和where的區別
知識庫 mysq sdn pad 行數 full join sel targe 知識 這篇博客參考了網上的,具體哪一篇是原稿,不知道,特此聲明。 數據庫在通過連接兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給用戶。 下面以使用le
學習筆記11 EF查詢相當於sql 中的 where in
lec sql blog contains 學習筆記 [] HERE var sel 兩種寫法 1、 int[] Ids={1,2,3} DBContainer db=new DBContainer(); var list=db.表明.where(a=>Ids.
pl/sql中return和exit區別
經測試: 1、exit只能用於迴圈中,並且退出迴圈往下執行; 2、return可用於迴圈或非迴圈,並且退出整個程式模組不往下執行。 declare i number :=1; j number :=1; begin loop if i>3 then
sql中and和or的優先順序
首先and的優先順序大於or,通俗理解其實or查詢其實會把條件分為左右兩邊來查。 如 SELECT * FROM USER WHERE ID =
Sql中EXISTS與IN的使用及效率
in 和exists 對於以上兩種查詢條件,in是把外表和內表作hash 連線,而exists 是對外表作loop 迴圈,每次loop 迴圈再對內表進行查詢。 一直以來認為exists 比in 效率高的說法是不準確的。在不同的情況下,exists與in的效能各有優缺項,如果查詢的兩個表大小相當,那麼用in
解決mysql中limit和in不能同時使用的問題
但是 col ima 聚集 class mys mit table span 先給出數據表 CREATE TABLE `test_tb_grade` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `USER_NAME` v
mysql中exist和in的效率
如果查詢的兩個表大小相當,那麼用in和exists差別不大。 如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in: 例如:表A(小表),表B(大表) 1: select * from A where cc in (select cc from B) 效率低,用
注意SQL中使用not in 的陷阱
在MSSQL 2008中編寫SQL語句時使用到了not in 遇到了一個陷阱 select top 10 * from A where AID NOT IN (select BPID From B where BID='1' ) 在返回的BPID中存在null值的時候,即使AID滿足NOT
SQL中varchar和nvarchar的基本介紹及其區別
SQL中varchar和nvarchar的基本介紹及其區別 varchar(n) 長度為 n 個位元組的可變長度且非 Unicode 的字元資料。n 必須是一個介於 1 和 8,000 之間的數值。儲存大小為輸入資料的位元組的實際長度,而不是 n 個位元組。 nvarchar(n)
MySql中exists和in的區別
exists介紹 exists對外表用loop逐條查詢,每次查詢都會檢視exists的條件語句,當 exists裡的條件語句能夠返回記錄行時(無論記錄行是的多少,只要能返回),條件就為真,返回當前loop到的這條記錄,反之如果exists裡的條 件語句不能返回記錄行,則當前loop到的這條
Spark SQL中thriftserver和beeline的使用
使用的前提是你已經安裝好了spark,在這裡我使用的版本是spark-2.0.2-bin-hadoop2.7,建議使用該版本,因為試了幾個版本都不理想,最後找到了這個版本感覺挺好的,學習Spark SQL很方便. 1. 首先是啟動thriftserver服務端:
SQL中instr和like的使用區別
1、instr函式 instr函式是一個字串處理函式,它在Oracle/PLSQL中是返回子字串在源字串中的位置,如果在源串中沒有找到子串,則返回0。 instr函式定義如下: /* &n