sql中in和exist語句的區別
兩者都能實現表功能查詢,主要區別如下:
1、適用表的類型不同。
in是子查詢為驅動表,外面的表為被驅動表,故適用于子查詢結果集小而外面的表結果集大的情況。
exists是外面的表位驅動表,子查詢里面的表為被驅動表,故適用于外面的表結果集小而子查詢結果集大的情況。
2、子查詢關聯不同。
exists一般都是關聯子查詢。對于關聯子查詢,必須先執行外層查詢,接著對所有通過過濾條件的記錄,執行內層查詢。外層查詢和內層查詢相互依賴,因為外層查詢會把數據傳遞給內層查詢。
in則一般都是非關聯子查詢,非關聯子查詢則必須先完成內層查詢之后,外層查詢才能介入。
3、執行次數不同。
IN 語句:只執行一次,確定給定的值是否與子查詢或列表中的值相匹配。in在查詢的時候,首先查詢子查詢的表,然后將內表和外表做一個笛卡爾積,然后按照條件進行篩選。所以相對內表比較小的時候,in的速度較快。
EXISTS語句:執行次數根據表的長度而定。指定一個子查詢,檢測行的存在。遍歷循環外表,然后看外表中的記錄有沒有和內表的數據一樣的。匹配上就將結果放入結果集中。
參考資料來源:搜狗百科--In操作符
參考資料來源:搜狗百科--Exists
in后面加語言、顏色嗎
in作為介詞后面可以加語言、顏色。
in相當于謂語動詞,謂語動詞后加a+形容詞以及名詞。在加語言、顏色時,固定用法in+顏色或語言,如:be dressed in colour。
表示穿什么顏色衣服的人,如:the lady in red,be dressed in red.穿紅衣的女士。 in的用法: *表地點時,指在某一立體空間范圍內;表時間時,指一段時間或與年、月、季節時間連用。
例句:The telephone was in the little study on the ground floor. 電話在底樓的小書房里。 *著重一段時間的過程,常用于重復動作或延續動作。
例句:They are having a heated argument. You'd better not wade in. 他們討論地很激烈,你最好不要介入。 3.表示“在”“在…里〔上〕”。
強調人或事物所處的位置或環境,因而常與單數名詞或著重于整體環境的集體名詞連用。 例句:He is not in at the moment. 這個時候他不在家。
擴展資料相近單詞:within 一、within讀音:英 [w??e?n] 美 [w??e?n] 釋義: prep.不出(某段時間);在(某段時間)之內;不出(某段距離);在(某段距離)之間;不出(某范圍或限度);在(某范圍)之內 adv.在里面;在內部 語法:within表示狀態時還可作“在…內心里”解; 表示環境時作“在(某組織、團體等)的成員當中”解; 表示數目時作“不超出”解。 例句:He decorated his house within and without. 他裝修房屋的里面和外面。
SQL語句中 in和exist區別
in 和 exists也是很好區別的.
in 是一個集合運算符.
a in {a,c,d,s,d。.}
這個運算中,前面是一個元素,后面是一個集合,集合中的元素類型是和前面的元素一樣的.
而exists是一個存在判斷,如果后面的查詢中有結果,則exists為真,否則為假.
in 運算用在語句中,它后面帶的select 一定是選一個字段,而不是select *.
比如說你要判斷某班是否存在一個名為"小明"的學生,你可以用in 運算:
"小明" in (select sname from student)
這樣(select sname from student) 返回的是一個全班姓名的集合,in用于判斷"小明"是否為此集合中的一個數據;
同時,你也可以用exists語句:
exists (select * from student where sname="小明")
句子中in和 at能連用嗎
如果你問題的意思是它們相連出現在句子中算不算錯,答案是不一定。它們有時可相
連出現在句子中。見下例:
但一般表示方位時,這兩個介詞不能同時用。
I've booked you in at the Grand Hotel.
我已經在格蘭大飯店為你預定了房間。Do you have any fresh salmon in at the moment?
現在有新鮮大馬哈魚賣嗎?School takes in at eight and lets out at three.
學校八點上課,下午三點放學。Robbers often breaks in at midnight.
強盜經常在半夜破門而入。He weighed in at several pounds below the limit.
他賽前量體重比規定限度少幾磅。The soldiers will rush in at the officer's command.
軍官一下命令士兵們就會沖進來。A soft breeze set in at midnight.
午夜時吹來一陣和風。
[SQL語句]關于IN的一個問題
直接寫數組名當然不行,你那個數組明顯是程序中定義的,不能在sql中使用。
sql中是不能使用數組的。只有像oracle的pl/sql一類sql擴展程序中能定義數組,但也不是你那種寫法。
如果數組是固定值,AA是數字型,這樣寫就可以了:
SELECT * FROM TABLE WHERE AA IN (1,45,375,48,98,46)
AA是字符型就加單引號:
SELECT * FROM TABLE WHERE AA IN ('1','45','375','48','98','46')
如果數組是變量,就只能構造查詢字符串:
"SELECT * FROM TABLE WHERE AA IN ("&Ary(0)&","&Ary(1)&","&Ary(2)&","&Ary(3)&","&Ary(4)&","&Ary(5)&")"
同樣,AA是字符型就在構造時加單引號。
-----------------------------------------------------------
數組元素值是未知的?不太明白你的意思。
如果是未知的就沒法查詢,必需有確定值才能用sql來查詢。
如果是變量,按上面數組變量的方式來寫不就行了嗎?當然首先要給變量賦值才行。
-----------------------------------------------------------
呵呵,是這樣啊,這個也不難啊,用UBound函數取數組最大下標,構造sql查詢串時循環最大下標次不就行了么?類似下面這樣的寫法:
sql = "SELECT * FROM TABLE WHERE AA IN (" '初始化查詢字符串
For i = 0 to UBound(Ary) '從0循環到數組最大下標
sql = sql & Ary(i) &; "," '將數組中每個值加在查詢字符串后面
Next
sql = Left(sql,Len(sql)-1) &; ")" '將最后一個逗號換為反括號
(如果用java就用*方法,同樣的效果。)