sqlin范圍
㈠ 「sql」語句中「in」怎麼用
你這樣構造in的范圍不對。你這樣是把in後面處理成一個字元串了。而in後面跟的應該是一個范圍。
你可以自己寫一個返回數據集的函數來將aa.ddid值處理成in的范圍, 類似於:
假設函數: ft01(nvarchar(1000)) returns table tb (val int)。
那麼, 這樣更新裡面子查詢的in條件:
where id in (select val from ft01(aa.ddid))。
另外, 此解決方法只是從in條件上來說。
㈡ sql中 in的用法
你現在的這個要求一般不用in.
假如你說的大類C是指大類的名稱是"C", 則用下面的語句:
select c.*
from category a,category b, proct c
where a.name='C' and a.pid=0
and b.pid=a.cid
and c.cid=b.cid
首先從category中取出name為'C'且pid為0的數據(得到cid), 表映射到a;
然後以自聯,再從category中取得pid為a的cid的數據(也就是大類C中的所有小類,表映射到b;
最後再關聯產品表proct, 取得cid為b的cid的所有產品,表映射到c.
當然, 如果你所說的C大類, 直接就知道其id號, 就像你給的例子中直接知道了10, 那麼"自聯"這步就不需要了.
-------------------------------
如果非要用in, 則按下面的方式:
select * from proct where cid in (
select b.cid
from category a,category b
where a.name='C' and a.pid=0
and b.pid=a.cid
)
-------------------------------
另外, in 還用在下面這種情況, 比如:
你想取得1,3,8,9這四個小類的所有產品, 則可以用:
select * from proct where cid in (1,3,8,9)
㈢ sql中in條件過多會報錯嗎
會,因為sql是有長度限制的。
㈣ in在sql中是什麼意思
select * from table where id in (1,3,5)
查詢表裡 id 是1 或者3 或者5 的記錄
select * from table where name in ('小明','小紅','小麗')
查詢表裡 name 等於 小明 或者小紅 或者 小麗的記錄
還有not in
㈤ sql語句中in內為什麼不能超過1000個值
是的,起碼Oracle中就是這樣的,我就in過一個1100多個的
你改一下sql就好了,900個in一下,然後用or連接
in(900個) or in(900個)。。。。
㈥ SQL語句怎樣查詢一個范圍
SQL方法完成數值區間查詢
要求:根據獎金等級表的數值區間,返回獎金對應的等級。
1、鏈接外部數據:數據--現有鏈接--瀏覽更多,在路徑中選擇數據Excel文件和目標工作表,建立數據鏈接。
詳細步驟參考前面所發的SQL相關文章。
2、編寫sql語句。
2.1、使用switch函數,SQL語句為:
select 姓名,獎金,switch(獎金<200,"D級",獎金<300,"C級",獎金<500,"B級",獎金>=500,"A級") as 獎金等級 from [獎金$a1:b11]
switch函數直接判斷數值,若數值小於200,返回D級;數值小於300返回C級;數值小於500,返回B級;餘下的數值條件要變化為>=500返回A級而不是<=700。
2.2、使用iif函數,SQL語句為:
select 姓名,獎金,iif(獎金<200,"D級",iif(獎金<300,"C級",iif(獎金<500,"B級","A級"))) as 獎金等級 from [獎金$a1:b11]
其基本思路和switch函數相同,類似工作表函數if的嵌套。
2.3、使用betweent...and,SQ語句為:
select a.姓名,a.獎金,b.等級 from [獎金$a1:b11] a,[獎金等級$] b where a.獎金 between b.最小值 and b.最大值
以戴蘇明同學為例子,在SQL代碼運行的時候,將戴蘇明同學的獎金一一和獎金等級表中的數值進行對比,符合區間的就返回區間等級。其他同學亦然。
但是,當獎金超出最大值700的時候就會取不到該條數據。
如劉平的獎金701並不在betweent...and的區間內,返回的結果中沒有劉平的數據。
2.4、使用Where比較大小,sql語句為:
select a.姓名,a.獎金,b.等級 from [獎金$a1:b11] a,[獎金等級$] b where a.獎金 >=b.最小值 and a.獎金<=b.最大值
此方法原理和betweent...and一樣,當獎金超過最大值700時,數據將有遺漏(劉平)。
當獎金的最大值為700的時候,以上四種方法都得出同樣的結果。
當獎金最大值超過700的時候,3、4兩個方法將遺漏獎金大於700的數據。
因此,可在設計獎金等級表的時候,可以將最大值700改為一個比較大的數值,使獎金再高也不會超過,則四種方位皆可。
如更改獎金等級表的最大值700為70000,這么大的一個范圍,則四種方法都適用。
㈦ sql語句,"in" 選擇范圍問題
你是什麼資料庫啊?一般的都支持not in,你試試看!
㈧ sql中 in可以放多少
理論上in是可以放無數個,但考慮到資料庫性能的問題,根據很多血的教訓,肯定不能超過太多。
其次,如果有其他方式(如:exists)則盡量不要用in。
㈨ sql語句中in的用法
IN 操作符允許我們在 WHERE 子句中規定多個值。
SQL IN 語法:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
(9)sqlin范圍擴展閱讀:
1、IN 與 = ANY 等價,均表示,變數在(子查詢)列表之中,即 a IN (table B) 表示 a = ANY B.b
2、NOT IN 與 <> ALL 等價,而不等於<> ANY,前兩者均表示,變數不在(子查詢)列表之中,即 a NOT IN (table B) 表示 a <> ALL B.b。而如果a <> ANY B.b,則只要任意一個b<>a就true了。
3、IN 與 EXISTS 的性能區別主要來自,IN 會編列子查詢的每行記錄,然後再返回,而EXISTS 則只要遇到第一個滿足條件的記錄就馬上返回。
㈩ sql in()語句
你這樣構造in的范圍不對。你這樣是把in後面處理成一個字元串了。而in後面跟的應該是一個范圍。
你可以自己寫一個返回數據集的函數來將aa.ddid值處理成in的范圍,
類似於:
假設函數:
ft01(nvarchar(1000))
returns
table
tb
(val
int)。
那麼,
這樣更新裡面子查詢的in條件:
where
id
in
(select
val
from
ft01(aa.ddid))。
另外,
此解決方法只是從in條件上來說。
如果子查詢只有1條記錄,in和=是沒有區別,如果子查詢有多條記錄,用=會出錯的,所以in是無論只查詢有多少條記錄都可以使用,而=只有當子查詢只有1條記錄的時候才能使用。
in和exists理解上其實是差不多,但對資料庫而言,in的執行順序是先執行只查詢條件,然後把記錄和外查詢核對,找符合條件的。
而exists是先執行外查詢,再執行子查詢,找到外查詢記錄後和只查詢對比符合條件的,如果外查詢和子查詢的條目數差異很大,那麼效率相差很明顯的。