mysql开发技巧
来源:互联网 发布:c语言多线程实例 编辑:程序博客网 时间:2024/06/11 15:26
开发技巧一
使用join从句
1.内连接–INNER JOIN—-取得表中公共的记录
select m.id,m.username,f.id as fid,f.username as fname FROM mokey AS m INNER JOIN mokey_friends AS f ON m.username = f.username;- 左外连接–LEFT OUTER JOIN – 取左边表全部,右边不存在为null
select M.,F. FROM mokey AS m LEFT OUTER JOIN mokey_friends AS f ON m.id = f.id; - 右外连接 –RIGHT OUTER JOIN–取右边表全部,左边不存在为null
select M.,F. FROM mokey AS m RIGHT OUTER JOIN mokey_friends AS f ON m.id = f.id where m.id IS NOT NULL;- 全连接 – FULL join – 左连接 union all 右连接
select M.* FROM mokey AS m left JOIN mokey_friends AS f ON m.id = f.id UNION ALL select M.* FROM mokey AS m right JOIN mokey_friends AS f ON m.id = f.id; - 笛卡尔连接 –cross join
select M.,F. FROM mokey AS m CROSS JOIN mokey_friends AS f ;
- 全连接 – FULL join – 左连接 union all 右连接
- 左外连接–LEFT OUTER JOIN – 取左边表全部,右边不存在为null
子查询
- 优化子查询
- 优化聚合查询
- 分组选择
开发技巧二
- 行列转化
SELECT m.username,k.timestr,SUM(k.kills) FROM kills k INNER JOIN mokey m ON k.userid = m.id GROUP BY m.username ORDER BY m.username ASC;
————-行转列 case ————
SELECT SUM(CASE WHEN username =param1 THEN kills END) AS ‘param1 ‘,
SUM(CASE WHEN username =’param2 ’ THEN kills END) AS ‘param2 ‘,
SUM(CASE WHEN username =’param3 ’ THEN kills END) AS ‘param3 ’ FROM mokey m INNER JOIN kills k ON m.id = k.userid;
—–修改表名:RENAME TABLE mokey_friends to user111;
—序列化表
SELECT username ,REPLACE(SUBSTRING(SUBSTRING_INDEX(mobile,’,’,a.id),CHAR_LENGTH(SUBSTRING_INDEX(mobile,’,’,a.id-1))+1),’,’,”)AS mobile FROM tb_sequence a
CROSS JOIN(SELECT username,CONCAT(mobile,’,’) AS mobile,LENGTH(mobile)-LENGTH(REPLACE(mobile,’,’,”))+1 size FROM user11 b)b ON a.id <=b.size;
—–列转行
用case when then end 进行改造
- 生成唯一序列号
I.自动生成
II.sql生成序列号 - 处理重复数据
- 用group by having 判断是否重复
delete from table1 as a inner join (select username ,count(),max(id) as id from a group by username having count()>1 ) b on a.username = b.username where a.id
- 用group by having 判断是否重复
开发技巧三
- 子查询匹配多个值
SELECT a.username ,b.timestr,kills FROM user11 a INNER JOIN kills b ON a.id = b.userid
JOIN (SELECT userid ,max(kills) AS cnt FROM kills GROUP BY userid) c ON b.userid = c.userid and b.kills =c.cnt;
等价余
SELECT a.username ,b.timestr,kills FROM user11 a INNER JOIN kills b ON a.id = b.userid
WHERE (b.userid,b.kills) in( SELECT userid,MAX(kills) FROM kills GROUP BY userid)
2. 多值过滤
3.累计税类
- MYSQL开发技巧
- 33.mysql 开发技巧
- Mysql开发技巧
- mysql开发技巧
- 开发技巧-MYSQL
- mysql开发技巧笔记
- mysql开发技巧1
- mysql开发技巧2
- 《MySQL开发技巧》笔记
- MySQL和PHP开发技巧
- Mysql之sql开发技巧
- mysql开发技巧(一)
- MySQL开发规范与使用技巧总结
- 开发小技巧-移除mysql服务
- 学自慕课网:MySQL开发技巧
- MySQL开发规范与使用技巧总结
- Mysql开发技巧之Join从句
- MySQL开发规范与使用技巧总结
- Java网页数据采集器[中篇-数据存储]
- udt的java实现
- 【数据结构和算法】Day 12
- CentOS 7 磁盘分区
- spring管理事务的配置文件
- mysql开发技巧
- 官方jdbc方式访问hive服务器
- 柏林曼の蓝色的泪
- LightOJ-1001-Opposite Task
- RGB和HSV的关系
- HTML之JavaScript自学笔记(4)
- 二分搜索及其变形应用
- (三)泛型学习笔记—通配符
- 【网络流24题】数字梯形(二分图+最大费用流)