常用sql技巧总结_持续更新
2015-02-07 12:04
585 查看
更新中。。。。。
=================
SELECT TOP 300 * FROM talbleA;
Mysql不同,不支持TOP,不过Mysql可以用LIMIT
SELECT * FROM tableA LIMIT 300;
--------------------------------------
想或许linux的时间,一种方法是传入给数据库就用linux的1970到现在的描述,int型,到时候直接取出
第二种方法就是不传入,继续用now()获取时间(当然只限于用当前时间的情况),用datetime存储时间,不过读取的时候用unix_timestamp()转换一下就完了。
--------------------------------------
select * from user group by user_id having count(*) > 1;
select new_id,user,count(*) from leiren.circle group by new_id having count(*)>1;
衍生出看表中是否有符合条件的数据:大于1是重复数据,大于0就是有数据咯,不过有数据就不用这个条件了,直接搜。
--------------------------------------
嵌套内部只能搜出一个结果,等于把结果当成一个数值
例子:
select sex,(select user_id from user where user_id = 15911086638)c from user where user_id = 15911086638;
----------------------------------------------------
难的是如何
稍微麻烦的个例:
SELECT user_feeling.user_id,user_feeling.picture_url,user_feeling.update_time,friend_list.feeling_praise_type,user_feeling.praise_1,user_feeling.praise_2,user_feeling.praise_3
FROM user_feeling LEFT JOIN friend_list
ON friend_list.friend_id = user_feeling.user_id #联结,关键不是一对一关系,在friend_list中friend_id不是唯一,是每个好友用user_id向你friend_id辐射一个关系
WHERE friend_list.user_id = 15911086638 AND state = 0;
------------------------------------------------
尤其注意多分支时用的不是ELSE IF,是ELSEIF,没空格!!!
而且END IF不是ENDIF,是有空格的~!!!!
案例:奖励ordinary数量,正常奖励iMines(10),奖励又不能超100,但是人家已有的你不能剥夺,比如500,所以最后要判断一下。知道这个写的不是最简化,没用变量做判断,奖励数额变了还得更改,但是奇葩需求太多变更太快,还是快速实现为主:
好吧我还是改改吧:
-----------------------------
=================
基本:
-----------------------------
限制数量:
TOP 或者TOP 50 PERCENT的方法,前者是数量,后者是百分比SELECT TOP 300 * FROM talbleA;
Mysql不同,不支持TOP,不过Mysql可以用LIMIT
SELECT * FROM tableA LIMIT 300;
用途:
限制数量,减少开销吧,自己用着手动查东西也可以少查点,免得乱或者慢。--------------------------------------
获取时间:
直接获取当前时间的sql函数——now()——不过类型是datetime想或许linux的时间,一种方法是传入给数据库就用linux的1970到现在的描述,int型,到时候直接取出
第二种方法就是不传入,继续用now()获取时间(当然只限于用当前时间的情况),用datetime存储时间,不过读取的时候用unix_timestamp()转换一下就完了。
用途:
对于需求秒数的,前端就不用再费力转换了。--------------------------------------
查重:
看表中是否有重复数据:比如用户表select * from user group by user_id having count(*) > 1;
select new_id,user,count(*) from leiren.circle group by new_id having count(*)>1;
衍生出看表中是否有符合条件的数据:大于1是重复数据,大于0就是有数据咯,不过有数据就不用这个条件了,直接搜。
用途:
比如mysql-front某些版本不好用或者网络不好,某些需要唯一的数据,初始化时候插了两边,全都重了,查重比较方便确认数据表是否有问题。--------------------------------------
嵌套:
select a,b(select b from table1)c from table2;嵌套内部只能搜出一个结果,等于把结果当成一个数值
例子:
select sex,(select user_id from user where user_id = 15911086638)c from user where user_id = 15911086638;
----------------------------------------------------
跨表:
-------------------------------------------难的是如何
跨表又嵌套,还查多条数据
(因为嵌套里边的条件和外边的难协调),目前没办到,只能从其他方向简化操作。稍微麻烦的个例:
SELECT user_feeling.user_id,user_feeling.picture_url,user_feeling.update_time,friend_list.feeling_praise_type,user_feeling.praise_1,user_feeling.praise_2,user_feeling.praise_3
FROM user_feeling LEFT JOIN friend_list
ON friend_list.friend_id = user_feeling.user_id #联结,关键不是一对一关系,在friend_list中friend_id不是唯一,是每个好友用user_id向你friend_id辐射一个关系
WHERE friend_list.user_id = 15911086638 AND state = 0;
------------------------------------------------
条件控制:IF ELSE
需要针对多种条件做不同操作时,还是很有用的尤其注意多分支时用的不是ELSE IF,是ELSEIF,没空格!!!
而且END IF不是ENDIF,是有空格的~!!!!
案例:奖励ordinary数量,正常奖励iMines(10),奖励又不能超100,但是人家已有的你不能剥夺,比如500,所以最后要判断一下。知道这个写的不是最简化,没用变量做判断,奖励数额变了还得更改,但是奇葩需求太多变更太快,还是快速实现为主:
BEGIN SELECT ordinary from lib_mines where user_id = _lluser INTO iTotalMines; #查出来当前数量 IF (iTotalMines < 100 AND iTotalMines >90) THEN BEGIN SET iTotalMines = 100; END; ELSEIF iTotalMines < 91 THEN BEGIN SET iTotalMines = iTotalMines + iMines; END; ELSE BEGIN SET iTotalMines = iTotalMines; END; END IF; # 更新雷库 UPDATE lib_mines SET ordinary = iTotalMines WHERE user_id = _lluser;# CALL p_add_mines_record(_lluser, 1, iMines);#加记录,可有可无,以前的功能 RETURN iTotalMines; END;
好吧我还是改改吧:
DECLARE iMaxRewardTo int DEFAULT 100;#最大奖励到100 #。。。。。。。 #一些前提判断
SET iMines = 10;
BEGIN SELECT ordinary from lib_mines where user_id = _lluser INTO iTotalMines; #查出来当前数量 IF (iTotalMines < iMaxRewardTo AND iTotalMines > iMaxRewardTo - iMines) THEN BEGIN SET iTotalMines = iMaxRewardTo; END; ELSEIF iTotalMines < iMaxRewardTo - iMines + 1 THEN BEGIN SET iTotalMines = iTotalMines + iMines; END; ELSEIF iTotalMines > iMaxRewardTo THEN BEGIN SET iTotalMines = iTotalMines; END; END IF; # 更新雷库 UPDATE lib_mines SET ordinary = iTotalMines WHERE user_id = _lluser;# CALL p_add_mines_record(_lluser, 1, iMines);#加记录,可有可无,以前的功能 RETURN iTotalMines; END;
-----------------------------
相关文章推荐
- jsf几个常用取值方法和技巧总结(持续更新)
- MySql常用命令及sql 技巧 (持续更新)
- 总结js常用函数和常用技巧(持续更新)
- 总结js常用函数和常用技巧(持续更新)
- 总结js常用函数和常用技巧(持续更新)
- MySql常用命令及sql 技巧 (持续更新)
- 【数据库】oracle常用sql总结(持续更新中)
- SQl常用语句总结(持续更新……)
- 总结js常用函数和常用技巧(持续更新)
- 使用JFreeChart-技巧总结(持续更新中。。。)
- SQL语句常见问题的总结(持续更新)
- ORACLE 常用技巧(持续更新ing)
- T-SQL查询语句常用优化技巧总结
- linux常用命令使用技巧(持续更新)
- 常用数据库sql总结(不断总结更新中)
- Altium Designer 常用快捷方式总结(持续更新)
- Java常用方法总结(持续更新中)
- 总结Swing中常用的方法,持续更新
- SQL语句常见问题的总结(持续更新)
- 总结Swing中常用的方法,持续更新