1樓:
用途不同,寫法不同,一般in 用於單個欄位為條件。而exists 用於多欄位為條件。
下列兩個結果相同:
select * from t1 where t1.id not in(select t2.id from t2)
select * from t1 where not exists (select * from t2 where t1.id=t2.id)
2樓:翼帆
exists如果結果集為空,返回一個false,否則返回true.
而not in的意思是包含這些值.有某些時候(比如查詢不包含某些id值的時候)兩種寫法差不多,
比如從news中排除news1表中的id值select * from news n where not exists(select * from news1 id = n.id)
等價於select * from news n where not in(select id from news1)
sql語句not in 和not exist各自的用法和區別
3樓:匿名使用者
不用那麼多解釋的 很簡單
in 表示集合是否存在
而exists 表示後面查詢結果是否存在
那麼not就是他們的反 不是嗎
4樓:匿名使用者
exist 返回的是true or false 他的效率比in 高很多
所以好的sql裡面一定不用用in
5樓:匿名使用者
in 和 exists也是很好區別的.
in 是一個集合運算子.
a in
這個運算中,前面是一個元素,後面是一個集合,集合中的元素型別是和前面的元素一樣的.
而exists是一個存在判斷,如果後面的查詢中有結果,則exists為真,否則為假.
in 運算用在語句中,它後面帶的select 一定是選一個欄位,而不是select *.
比如說你要判斷某班是否存在一個名為"小明"的學生,你可以用in 運算:
"小明" in (select sname from student)
這樣(select sname from student) 返回的是一個全班姓名的集合,in用於判斷"小明"是否為此集合中的一個資料;
同時,你也可以用exists語句:
exists (select * from student where sname="小明")
關於查詢語句中的in和exists的區別
6樓:汽車影老師
1、適用表的型別不同。
in是子查詢為驅動表,外面的表為被驅動表,故適用於子查詢結果集小而外面的表結果集大的情況。
exists是外面的表位驅動表,子查詢裡面的表為被驅動表,故適用於外面的表結果集小而子查詢結果集大的情況。
2、子查詢關聯不同。
exists一般都是關聯子查詢。對於關聯子查詢,必須先執行外層查詢,接著對所有通過過濾條件的記錄,執行內層查詢。外層查詢和內層查詢相互依賴,因為外層查詢會把資料傳遞給內層查詢。
in則一般都是非關聯子查詢,非關聯子查詢則必須先完成內層查詢之後,外層查詢才能介入。
3、執行次數不同。
in 語句:只執行一次,確定給定的值是否與子查詢或列表中的值相匹配。in在查詢的時候,首先查詢子查詢的表,然後將內表和外表做一個笛卡爾積,然後按照條件進行篩選。
所以相對內表比較小的時候,in的速度較快。
exists語句:執行次數根據表的長度而定。指定一個子查詢,檢測行的存在。遍歷迴圈外表,然後看外表中的記錄有沒有和內表的資料一樣的。匹配上就將結果放入結果集中。
sql語句語言特點:
1、sql風格統一
sql可以獨立完成資料庫生命週期中的全部活動,包括定義關係模式、錄人資料、建立資料庫、査詢、更新、維護、資料庫重構、資料庫安全性控制等一系列操作,這就為資料庫應用系統開發提供了良好的環境,在資料庫投入執行後,還可根據需要隨時逐步修改模式,且不影響資料庫的執行,從而使系統具有良好的可擴充性。
2、高度非過程化
非關係資料模型的資料操縱語言是程序導向的語言,用其完成使用者請求時,必須指定存取路徑。而用sql進行資料操作,使用者只需提出「做什麼」,而不必指明「怎麼做」,因此使用者無須瞭解存取路徑,存取路徑的選擇以及sql語句的操作過程由系統自動完成。這不但大大減輕了使用者負擔,而且有利於提高資料獨立性。
7樓:幹啥幹啥幹
in和exists區別in 是把外表和內表作hash 連線,而exists是對外表作loop迴圈,每次loop迴圈再對內表進行查詢。一直以來認為exists比in效率高的說法是不準確的。如果查詢的兩個表大小相當,那麼用in和exists差別不大。
如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in。not exists,exists的用法跟in不一樣,一般都需要和子表進行關聯,而且關聯時,需要用索引,這樣就可以加快速度。 exists 相當於存在量詞:
表示集合存在,也就是集合不為空只作用一個集合。例如 exist p 表示p不空時為真; not exist p表示p為空時為真。 in表示一個標量和一元關係的關係。
例如:s in p表示當s與p中的某個值相等時 為真; s not in p 表示s與p中的每一個值都不相等時為真: not in 和not exists的區別如果查詢語句使用了not in 那麼內外表都進行全表掃描,沒有用到索引;而not extsts 的子查詢依然能用到表上的索引。
所以無論那個表大,用not exists都比not in要快
8樓:隨o天
區別:in是關係運算子,exists是相關子查詢。
exists的效率比in高的說法不正確,要看具體情況,儘可能利用索引。
例:設有兩個表td(大表)和tx(小表),看下面的查詢:
1、select * from td where col in (select col from tx); --利用了td的索引
select * from td where exists (select col from tx where col=td.col); --利用tab2的索引
結果:第一句效率高。
2、select * from tx where col in (select col from td); --利用了tx的索引
select * from tx where exists (select col from td where col=tx.col); --利用了td的索引
結果:第二句效率高。
9樓:匿名使用者
in與exists的作用基本相同,效率也基本相同,通過檢視查詢計劃可以看到in與exists會產生相同的查詢計劃,但是not in與not exists就有區別了,not exists會處理null值,優化過程,而not in沒有此優化,所以效率要不如exists,而且一旦有null值,not in的結果集會不準確
10樓:流浪雲風
類似問題以前也給其他朋友回答過,「exists的效率比in的高」的說法不完全正確,要視情況而定。
「exists」和「in」是oracle中,都是查詢某集合的值是否存在在另一個集合,但對不同的資料有不同的用法,主要是在效率問題上存在很大的差別,以下有兩個簡單例子,以說明 「exists」和「in」的效率問題。
1、 select * from table1 where exists(select 1 from table2 where table1.a=table2.a) ;
table1資料量小而table2資料量非常大時,table1<>table2 時,in的查詢效率高。
通過使用exists,oracle會首先檢查主查詢,然後執行子查詢直到它找到第一個匹配項,
這就節省了時間。
oracle在執行in子查詢時,首先執行子查詢,並將獲得的結果列表存放在一個加了索引的臨時表中。在執行子查詢之前,系統先將主查詢掛起,待子查詢執行完畢,存放在臨時表中以後再執行主查詢。
sql查詢中in和exists的區別分析
mysql查詢語句in和exists二者的區別和效能影響
11樓:max的深林
如果查詢的兩個表大小相當,那麼用in和exists差別不大。
如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in:
例如:表a(小表),表b(大表)
1:select * from a where cc in (select cc from b) 效率低,用到了a表上cc列的索引;
select * from a where exists(select cc from b where cc=a.cc) 效率高,用到了b表上cc列的索引。
相反的2:
select * from b where cc in (select cc from a) 效率高,用到了b表上cc列的索引;
select * from b where exists(select cc from a where cc=b.cc) 效率低,用到了a表上cc列的索引。
not in 和not exists如果查詢語句使用了not in 那麼內外表都進行全表掃描,沒有用到索引;而not extsts 的子查詢依然能用到表上的索引。所以無論那個表大,用not exists都比not in要快。
in 與 =的區別
select name from student where name in ('zhang','wang','li','zhao');
與 select name from student where name='zhang' or name='li' or name='wang' or name='zhao'
的結果是相同的。
sql語句中where not exists ; where title not in; where title in 這些語句是什麼意思 這些語句後接子查詢
12樓:時空來電
exists 英文存在
復的意思,父查制
詢baiwhere not exists(子
du查詢)---不存在子查詢則滿zhi足父查詢出發條件dao, where 欄位 not in(子查詢)。操作方法如下:
1、開啟sql server management studio管理工具,連線上sql server資料庫,開啟sql語句書寫介面。
2、然後使用sql語句建立一張測試表test,用於測試where條件。
3、然後往測試表中插入幾行測試資料。
4、查詢表中的所有測試資料select * from test;。
5、接著使用and條件查詢:col2=張三,同時col1=第1行的記錄。
6、最後同時使用and和or查詢:col2=張三同時col1=第1行,或者,col2=李四同時col1=第5行的記錄,需要使用括號分隔,就完成了。
微信上怎麼查和人的轉賬記錄,微信上怎麼查和一個人的轉賬記錄
2 進入介面後,回點選列表中的 支付答 選項。3 然後點選支付介面中的 錢包 4 再點選錢包介面右上角的 賬單 按鈕。5 點選賬單下面的 全部交易型別 6 再點選介面下方彈出選項中的 轉賬 微信轉賬記bai錄的查詢流程是 du 1 進入手機微信,zhi點選 我 dao 支付 錢包 版 只能檢視所有的...
如何查車出險和理賠記錄,怎麼查汽車出險理賠記錄
機動車輛保險即 車險 是以機動車輛本身及其第三者責任等為保險標誌的一種運輸工具保險。其保險客戶,主要是擁有各種機動交通工具的法人團體和個人 其保險標的,主要是各種型別的汽車,但也包括電車 電瓶車等專用車輛及摩托車等。機動車輛是指汽車 電車 電瓶車 摩托車 拖拉機 各種專用機械車 特種車。查車險的方法...
怎麼查自己的幸運號碼和顏色,怎麼查自己的幸運數字和顏色?
首先弄清楚他 她 的星座 白羊座 3月21日 4月20日 aries金牛座 4月21日 5月21日 taurus雙子座 5月22日 6月21日 geminis巨蟹座 6月22日 7月22日 cancer獅子座 7月23日 8月23日 leo 座 8月24日 9月23日 virgo天秤座 9月24日 ...