MySQL教程4 MySQL8運算符、函數(shù)、存儲過程及新增數(shù)據(jù)類型 17.之創(chuàng)建帶有IN和OUT參數(shù)的存儲過程 學(xué)習(xí)猿地
創(chuàng)新互聯(lián)建站基于成都重慶香港及美國等地區(qū)分布式IDC機房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)四川電信機房托管報價,主機托管價格性價比高,為金融證券行業(yè)服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨享,G口帶寬及機柜租用的專業(yè)成都idc公司。
前幾天工作上遇到一個問題,在mysql數(shù)據(jù)查詢的時候,使用的是in條件,而結(jié)果需要根據(jù)in來進行排序,當(dāng)時嘗試了幾次都沒成功,后來在度娘的幫助下,找到了解決辦法:
select * from table_name where id in (6,2,1,10,5,7..)
查詢的結(jié)果和in中的順序并不一致,也就是說在批量查詢時,mysql的查詢并不是按照in中的值得順序來查詢的。那怎么才能保證和in查詢中的順序相同呢?
查詢了資料發(fā)現(xiàn)有兩種方式可以對in查詢的結(jié)果進行排序。一種是order by find_in_set,另外一種是order by substring_index
1、select * from table_name where id in (6,2,1,10,5,7..) order by find_in_set(id,'6,2,1,10,5,7');
2、select * from table_name where id in (6,2,1,10,5,7..)?order by substring_index('6,2,1,10,5,7',id,1);
比如我要查找用戶表id為1,5,6的用戶信息:
SELECT?*?FROM?tbl_user?WHERE?id?IN(1,5,6);
mysql的in條件查詢,是括號里拼接逗號相隔的字串,這個字長里的個數(shù)還有限制,網(wǎng)上的說法是1000個,為了避免超出該范圍,可專門封裝一個方法
1.使用exists寫法替代in寫法,exists寫法是使用條件查詢替代in寫法里的一長串字串,這個有時候沒法使用,比如使用第三方接口查學(xué)校一年級2千個學(xué)生的考試成績,你只知道這些學(xué)生的id,沒有更多的關(guān)聯(lián)條件
2.使用or的寫法,將in條件過長的字串拆開,mysql支持以下寫法:
方法封裝:
測試效果:
Where查詢條件,on內(nèi)外連接時候用,as作為別名,in查詢某值是否在某條件里
1、創(chuàng)建mysql測試表,create table test_city(cityid varchar(20));
2、插入測試數(shù)據(jù),
insert into test_city values(1);
insert into test_city values('1,2,3');
insert into test_city values('1,2,3,4');
insert into test_city values(2);
insert into test_city values(3);
3、編寫sql,查詢cityid為3的記錄,
select * from test_city where cityid in ('1','2','3','4','5','6')
4、編寫sql,查詢cityid為'1,2,3'的記錄,
select * from test_city where cityid in ('1,2,3')