常用 SQL 语句汇总

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 常用 SQL 汇总 使用索引注意事项 使用like关键字时,前置%会导致索引失效。 使用null值会被自动从索引中排除,索引一般不会建立在有空值的列上。 使用or关键字时,or左右字段如果存在一个没有索引,有索引字段也会失效。

常用 SQL 汇总

使用索引注意事项

  • 使用like关键字时,前置%会导致索引失效。
  • 使用null值会被自动从索引中排除,索引一般不会建立在有空值的列上。
  • 使用or关键字时,or左右字段如果存在一个没有索引,有索引字段也会失效。
  • 使用!=操作符时,将放弃使用索引。因为范围不确定,使用索引效率不高,会被引擎自动改为全表扫描。
  • 不要在索引字段进行运算。
  • 在使用复合索引时,最左前缀原则,查询时必须使用索引的第一个字段,否则索引失效;并且应尽量让字段顺序与索引顺序一致。
  • 避免隐式转换,定义的数据类型与传入的数据类型保持一致。
  • 使用多列字段排序的时候,应当尽量使用同样的排序规则,否则会导致索引失效。
  • 使用 lower 函数进行不区分大小写比较时,应当先检查字段的排序规则是否已经为 utf8_general_ci 不区分大小写排序,如果已经是,则避免使用 lower 转小写进行比较,因为 lower 会导致索引失效。

【事务】

mysql的MyISAM引擎是不支持事务的,需要更改为Innodb

alter table table_name engine=InnoDB;

参考:http://www.linuxidc.com/Linux/2012-10/72884.htm

【复杂统计】

insert into web_statis(user,create_time,stone,dirt,orecoal,ironore,goldore,diamond,allore) select al.*,(stone+dirt+orecoal+ironore+goldore+diamond) as allore from (select cu.user,
'2015-2-9 10:09:18' as create_time,(case when c1 is null then 0 else c1 end) as stone,(case when c2 is null then 0 else c2 end) as dirt,(case when c3 is null then 0 else c3 end) as orecoal
,(case when c4 is null then 0 else c4 end) as ironore,(case when c5 is null then 0 else c5 end) as goldore,(case when c6 is null then 0 else c6 end) as diamond from co_user cu
 left join (select count(*) c1,user from co_block where type in(1,4) and time >=1423353600 and time < 1423440000 group by user) tc1 on cu.rowid = tc1.user
 left join (select count(*) c2,user from co_block where type in(2,3) and time >=1423353600 and time < 1423440000 group by user) tc2 on cu.rowid = tc2.user
 left join (select count(*) c3,user from co_block where type = 16 and time >=1423353600 and time < 1423440000 group by user) tc3 on cu.rowid = tc3.user
 left join (select count(*) c4,user from co_block where type = 15 and time >=1423353600 and time < 1423440000 group by user) tc4 on cu.rowid = tc4.user
 left join (select count(*) c5,user from co_block where type = 14 and time >=1423353600 and time < 1423440000 group by user) tc5 on cu.rowid = tc5.user
 left join (select count(*) c6,user from co_block where type = 56 and time >=1423353600 and time < 1423440000 group by user) tc6 on cu.rowid = tc6.user) al

【根据查询结果update】

update A表 a INNER JOIN(select 字段1,字段2 from B表 b)t on t.字段2 = a.字段2 set a.字段3 = "XXX";

格式:update table_a inner join table_b on xxx = xxx set table_a.xxx = "xxx"

【反向like查询】

SELECT id,keywords FROM wx_keywords WHERE '百度一下'  LIKE CONCAT('%',keywords,'%');

【字段数据转移】

update Devices as A left join Devices as B on A.ParentCode = B.Code set A.ParentID = B.ID;

【区分大小写查询】

select * from wx_news where url like binary("%appid%");

【时间偏移】

时间字段 <= date_add(now(), interval - 6 MONTH)

参考:http://www.w3school.com.cn/sql/func_date_add.asp

MySQL 添加索引

1.添加PRIMARY KEY(主键索引)   www.2cto.com  
 
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
 
2.添加UNIQUE(唯一索引)
 
mysql>ALTER TABLE `table_name` ADD UNIQUE (
 
`column`
)
 
3.添加INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
 
 
4.添加FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
 
5.添加多列索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

【从小到大排序,0在最后】

select * from test order by seq=0,seq;

【MySQL计算时间差】

SELECT TIMESTAMPDIFF(MONTH,'2009-10-01','2009-09-01');

interval可是:SECOND 秒、MINUTE 分钟、HOUR、DAY 天、MONTH 月、YEAR 年

【按月统计数据】

select DATE_FORMAT(create_date,'%Y年%m月') months,sum(amount) amount from p2p_investment where transfer is null group by months;

参考网址:http://linkyou.blog.51cto.com/1332494/751980/

【替换URL域名】

update p2p_ad set url = concat("https://www.51checai.com/", substr(url,LENGTH("http://test.51checai.com/")+1)) where url like "http://test.51checai.com/%";
update `p2p_borrowing_material`  set large = concat("https://img-51checai.b0.upaiyun.com/", substr(large,LENGTH("https://img.51checai.com/")+1)) where large like "https://img.51checai.com/%";

【推荐数据修复】

查询:

select id,create_date,`referral_setting`,date_add(create_date, interval +180 day),
CONCAT("{\"referralAmount\":10000,\"referralGift\":\"31\",\"referralGiftTwo\":\"32,33\",\"paymentTime\":\"2016-04-01\",\"finishTime\":\""
       ,DATE_FORMAT(date_add(create_date, interval +180 day),'%Y-%m-%d')
       ,"\",\"feeRate\":0.01}")
from p2p_member where create_date >= "2016-04-01" and create_date < "2016-09-22" and `referrer` is not null order by id desc;

更新:

update p2p_member set `referral_setting` = 
 CONCAT("{\"referralAmount\":10000,\"referralGift\":\"31,38\",\"referralGiftTwo\":\"32,33,39\",\"paymentTime\":\"2016-04-01\",\"finishTime\":\""
       ,DATE_FORMAT(date_add(create_date, interval +180 day),'%Y-%m-%d'),"\",\"feeRate\":0.01}")
where create_date >= "2016-09-22" and `referrer` is not null;

【指定数据互换】

update test t1 
left join test t2 on t1.id = ((select 1+2)-t2.id )
set t1.position = t2.position 
where t1.id in (1,2);
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL XML Oracle
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
583 0
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
|
1月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
239 11
|
8月前
|
SQL Oracle 关系型数据库
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
99 0
|
SQL 存储 缓存
一文搞懂MySQL中一条SQL语句是如何执行的
一文搞懂MySQL中一条SQL语句是如何执行的
|
SQL 存储 关系型数据库
MySQL的第一篇文章——了解数据库、简单的SQL语句
MySQL的第一篇文章——了解数据库、简单的SQL语句
|
SQL Python
Pandas与SQL的数据操作语句对照
Pandas与SQL的数据操作语句对照
179 0
Pandas与SQL的数据操作语句对照
|
SQL 程序员 开发工具
【Sql Server】基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用
基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用
572 0
【Sql Server】基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
|
SQL 数据库 数据安全/隐私保护
使用SQL语句 查询电话号码 加密显示
使用SQL语句 查询电话号码 加密显示
358 0
使用SQL语句 查询电话号码 加密显示
|
SQL 存储 安全
MYSQL数据库初窥门径, SQL语句地熟练使用, 图形化界面提高效率
MYSQL数据库初窥门径, SQL语句地熟练使用, 图形化界面提高效率
MYSQL数据库初窥门径, SQL语句地熟练使用, 图形化界面提高效率