sql执行顺序
其中有一个很重要的思想就是想group by 实现分组之后再分组的基础上进行having num 等操作进行聚合来达到想要的效果。
一、添加索引:
组合索引要都进行查询才有效,如果是两个索引拼成的组合索引仅仅使用一个是没有效果的。
1.添加PRIMARY KEY(主键索引):
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.添加UNIQUE(唯一索引) :
ALTER TABLE `table_name` ADD UNIQUE ( `column` )
3.添加INDEX(普通索引) :
写法一:ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
写法二:CREATE INDEX index_name ON `table_name`(`column1`,`column2`,`column3`)
4.添加FULLTEXT(全文索引) :
ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
5.添加多列索引:
写法一:ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
写法二:CREATE INDEX index_name ON `table_name`(`column1`,`column2`,`column3`)
SHOW INDEX FROM `table_name`;-- 查询表索引
DROP INDEX index_name ON `table_name`;-- 删除索引
二、常用函数的整理
mysql的拼接和Oracle的字符串拼接方法
mysql:SELECT * FROM course WHERE c_name = CONCAT('语','文')
oracle: select id_num||'--'||user_name from t_ssouser where user_name =('周'|| '亮')
或者直接使用都支持的函数:concat('周','亮')来进行拼接字符串
替换操作:
select replace('www.163.com','w','Ww')--->WwWwWw.163.com
大概意思就是将www.163.com这个字符串中的所有的w都替换成Ww
交叉表的查询方法
得到bgb_sync中的数据,如果==2则将内容变成1,否则变成0,最后统计计算的和数。
sum(case v.gb_sync
when 2 then
1
else
0
end) as waitSync
case v.status
when '0' then
'申报未受理'
when '9' then
'确认未通过'
end status,
三元表达式
AND IF('${开始时间}' !='',ym.time>='${开始时间}' AND ym.time<='${结束时间}',1=1)
或者用like和replace进行替换拼接操作来实心三元表达式,但是有点麻烦。
举例:ureport2报表工具中的方法(Oracle)
(emptyparam("user_id") == false ? " and us.name Like REPLACE(:user_id,:user_id,\\'%\\'||:user_id||\\'%\\')" : "")