動(dòng)力節(jié)點(diǎn)-始于2009年,口口相傳的Java黃埔軍校 400-8080-105
Java零基礎(chǔ) Java零基礎(chǔ)項(xiàng)目 Java Web 主流框架 框架項(xiàng)目 微服務(wù)架構(gòu) 互聯(lián)網(wǎng)生態(tài) 大師必備
Java零基礎(chǔ)免費(fèi)領(lǐng)取最新技術(shù)學(xué)習(xí)路線圖 限300份畢業(yè)設(shè)計(jì) >>
文檔教程 JavaSE 教程_進(jìn)階 IntelliJ IDEA教程 Tomcat 教程 >>
API文檔 JDK1.8 CXF Apache Server >>
學(xué)習(xí)工具 EditPlus IntelliJ IDEA Eclipse >>
熱門面試 排序算法 Java基礎(chǔ) Spring 面試 >>
來源: 動(dòng)力節(jié)點(diǎn) 時(shí)間:2023-04-23 08:46:47
mysql怎樣使用in查詢
一、基礎(chǔ)用法
mysql中in常用于where表達(dá)式中,其作用是查詢某個(gè)范圍內(nèi)的數(shù)據(jù)。
select * from where field in (value1,value2,value3,…)
當(dāng) IN 前面加上 NOT 運(yùn)算符時(shí),表示與 IN 相反的意思,即不在這些列表項(xiàng)內(nèi)選擇
select * from where field not in (value1,value2,value3,…)
二、IN 子查詢
更多情況下,IN 列表項(xiàng)的值是不明確的,而可能是通過一個(gè)子查詢得到的:
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=0)
在這個(gè) SQL 例子里,我們實(shí)現(xiàn)了查出所有狀態(tài)為 0 的用戶(可能是被禁止)的所有文章。首先通過一個(gè)查詢得到所有所有 status=0 的用戶:
SELECT uid FROM user WHERE status=0
然后將查詢結(jié)果作為 IN 的列表項(xiàng)以實(shí)現(xiàn)最終的查詢結(jié)果,注意在子查詢中返回的結(jié)果必須是一個(gè)字段列表項(xiàng)。
在in的子查詢中常常會(huì)遇到查詢效率太低問題,解決方法如下:
1、仍使用in子查詢,多查詢一次
SELECT * FROM basic_zdjbxx WHERE suiji IN ( SELECT zdcode FROM ( SELECT zdcode FROM basic_h WHERE zdcode != "" ) AS h )
2、使用LEFT JOIN
SELECT zd.* FROM ( SELECT DISTINCT zdcode FROM basic_h WHERE zdcode != "" ) AS h LEFT JOIN basic_zdjbxx zd ON zd.suiji = h.zdcode
三、IN 運(yùn)算符補(bǔ)充說明
IN 列表項(xiàng)不僅支持?jǐn)?shù)字,也支持字符甚至?xí)r間日期類型等,并且可以將這些不同類型的數(shù)據(jù)項(xiàng)混合排列而無須跟 column 的類型保持一致:
SELECT * FROM user WHERE uid IN(1,2,'3','c')
一個(gè) IN 只能對(duì)一個(gè)字段進(jìn)行范圍比對(duì),如果要指定更多字段,可以使用 AND 或 OR 邏輯運(yùn)算符:
SELECT * FROM user WHERE uid IN(1,2) OR username IN('admin','manong')
使用 AND 或 OR 邏輯運(yùn)算符后,IN 還可以和其他如 LIKE、>=、= 等運(yùn)算符一起使用。
四、關(guān)于 IN 運(yùn)算符的效率問題
如果 IN 的列表項(xiàng)是確定的,那么可以用多個(gè) OR 來代替:
SELECT * FROM user WHERE uid IN (2,3,5)
// 等效為:
SELECT * FROM user WHERE (uid=2 OR aid=3 OR aid=5)
一般認(rèn)為:
1、如果是對(duì)索引字段進(jìn)行操作,使用 OR 效率高于 IN,但對(duì)于列表項(xiàng)不確定的時(shí)候(如需要子查詢得到結(jié)果),就必須使用 IN 運(yùn)算符。另外,對(duì)于子查詢表數(shù)據(jù)小于主查詢的時(shí)候,也是適用 IN 運(yùn)算符的。
in或or在字段沒有添加索引的情況下,所連接的字段越多(1 or 2 or 3 or 4 or…),or比in的查詢效率低很多
以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"mysql in查詢的方法有哪些",希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為您務(wù)。
聲明:本站稿件版均屬動(dòng)力節(jié)點(diǎn)所有,未經(jīng)允許禁止轉(zhuǎn)載
零基礎(chǔ)學(xué)Java,你有沒有下面這些困惑呢?對(duì)Java了解不深,學(xué)完不知道能做什么?想轉(zhuǎn)行,又害怕辭職培訓(xùn)就業(yè)沒保障?專業(yè)不對(duì)口,怕學(xué)完不好就業(yè)?覺得學(xué)費(fèi)貴,經(jīng)濟(jì)壓力大?沒編程經(jīng)驗(yàn),擔(dān)心不適合這個(gè)職業(yè)?想自學(xué),又怕學(xué)的不牢靠找不到工作,浪費(fèi)時(shí)間?詳情>>
2023-07-28 10:05:44動(dòng)力節(jié)點(diǎn)成立14年,目前設(shè)有10個(gè)分校,同時(shí)在校的學(xué)生人數(shù)眾多,怎樣實(shí)現(xiàn)統(tǒng)一管理?口口相傳的Java黃埔軍校,嚴(yán)格的教學(xué)管理服務(wù)制度怎樣被“復(fù)制”到各個(gè)校區(qū)呢?學(xué)員高薪就業(yè),高就業(yè)率又是怎樣在各校區(qū)得以延續(xù)?詳情>>
2023-07-28 09:55:432023年,隨著互聯(lián)網(wǎng)產(chǎn)業(yè)的蓬勃發(fā)展,程序員作為一個(gè)自帶“高薪多金”標(biāo)簽的熱門群體,被越來越多的人所關(guān)注。詳情>>
2023-07-20 16:14:40上海Java技能培訓(xùn)學(xué)校哪家好?快來圍觀!
1上海Java培訓(xùn)學(xué)校哪家好?如何判斷
2上海好的Java培訓(xùn)機(jī)構(gòu)是哪家?
3上海Java培訓(xùn)課程怎么樣?作為初學(xué)者都要學(xué)會(huì)哪些東西?
4上海Java學(xué)習(xí)難嗎?需要我們?cè)趺慈胧帜?/p>
5上海Java學(xué)習(xí)方法是什么?以動(dòng)力節(jié)點(diǎn)為例來分析
6上海哪里能學(xué)Java語言?眾多機(jī)構(gòu),你選對(duì)了嗎?
7上海學(xué)Java去哪?有沒有更高效的方式
8上海Java工資怎么樣?看完你就知道了
9在上海找Java工作難嗎?建議有需要的人收藏!
10上海Java好就業(yè)嗎?你想知道的都在這
11上海中級(jí)Java開發(fā)工資高嗎?現(xiàn)在是什么就業(yè)狀態(tài)
Java實(shí)驗(yàn)班 2024-10-26 即將報(bào)滿
Java實(shí)驗(yàn)班 2024-11-26 即將報(bào)滿
Java實(shí)驗(yàn)班 2024-12-27 即將報(bào)滿
運(yùn)營主體北京動(dòng)力節(jié)點(diǎn)教育科技有限公司,屬具備計(jì)算機(jī)技術(shù)培訓(xùn)資質(zhì)的教育培訓(xùn)機(jī)構(gòu)