mysql怎么使用in mysql 使用

Mysql数据查询in的时候如何排序前几天工作上遇到一个问题,在mysql数据查询的时候 , 使用的是in条件 , 而结果需要根据in来进行排序,当时尝试了几次都没成功 , 后来在度娘的帮助下 , 找到了解决办法:
select * from table_name where id in (6,2,1,10,5,7..)
查询的结果和in中的顺序并不一致 , 也就是说在批量查询时,mysql的查询并不是按照in中的值得顺序来查询的 。那怎么才能保证和in查询中的顺序相同呢?
查询了资料发现有两种方式可以对in查询的结果进行排序 。一种是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);
mysql查询 怎么使用 inin作为查询条件,一般典型有两种用法:
一是IN常量,例如下面语句查询一、三年级的学生:
SELECT * FROM student WHERE grade IN ('一','三');
二是使用子查询,也就是IN(SQL语句),例如下面的语句查询不及格的班级的所有学生:
SELECT * FROM student WHERE classno IN (
select classno from scores where score60
);
mysql存储过程 in 怎么用out 表示输出的参数,存储过程调用 代码 需要获得此参数值 。
in 表示输入参数,默认为in
例1、一个简单存储过程游标实例
复制代码代码如下:
DELIMITER $$
DROP PROCEDURE IF EXISTS getUserInfo $$
CREATE PROCEDURE getUserInfo(in date_day datetime)
--
-- 实例
-- 存储过程名为:getUserInfo
-- 参数为:date_day日期格式:2008-03-08
--
BEGIN
declare _userName varchar(12); -- 用户名
declare _chinese int ; -- 语文
declare _math int ;-- 数学
declare done int;
-- 定义游标
DECLARE rs_cursor CURSOR FOR SELECT username,chinese,math from userInfo where datediff(createDate, date_day)=0;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
-- 获取昨天的日期
if date_day is null then
set date_day = date_add(now(),interval -1 day);
end if;
open rs_cursor;
cursor_loop:loop
FETCH rs_cursor into _userName, _chinese, _math; -- 取数据
if done=1 then
leave cursor_loop;
end if;
-- 更新表
update infoSum set total=_chinese+_math where UserName=_userName;
end loop cursor_loop;
close rs_cursor;
END$$
DELIMITER ;
例2、存储过程游标循环跳出现
在MySQL的存储过程中,游标操作时,需要执行一个conitnue的操作.众所周知,MySQL中的游标循环操作常用的有三种,LOOP,REPEAT,WHILE.三种循环,方式大同小异.以前从没用过,所以记下来,方便以后查阅.
1.REPEAT
复制代码代码如下:
REPEAT
Statements;
UNTIL expression
END REPEAT
demo
DECLARE num INT;
DECLARE my_stringVARCHAR(255);
REPEAT
SETmy_string =CONCAT(my_string,num,',');
SETnum = num +1;
UNTIL num 5
END REPEAT;
2.WHILE
复制代码代码如下:
WHILE expression DO
Statements;
END WHILE
demo
DECLARE num INT;
DECLARE my_stringVARCHAR(255);
SET num =1;
SET str ='';
WHILE numspan10DO
SETmy_string =CONCAT(my_string,num,',');
SETnum = num +1;
END WHILE;
3.LOOP(这里面有非常重要的ITERATE,LEAVE)
代码如下 复制代码
DECLARE numINT;
DECLARE strVARCHAR(255);
SET num =1;
SET my_string ='';
loop_label:LOOP
IFnum 10THEN
LEAVEloop_label;
ENDIF;
SETnum = num +1;
IF(num mod3)THEN
ITERATEloop_label;
ELSE

推荐阅读