iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Mysql 常用 SQL 语句大全
  • 679
分享到

Mysql 常用 SQL 语句大全

mysqlsql 2022-05-24 13:05:24 679人浏览 安东尼
摘要

基础篇 //查询时间,友好提示 $sql = "select date_fORMat(create_time, '%Y-%m-%d') as day from table_name"; //

基础篇

//查询时间,友好提示 $sql = "select date_fORMat(create_time, '%Y-%m-%d') as day from table_name";
//int 时间戳类型 $sql = "select from_unixtime(create_time, '%Y-%m-%d') as day from table_name";
//一个sql返回多个总数 $sql = "select count(*) all, " ;
$sql .= " count(case when status = 1 then status end) status_1_num, ";
$sql .= " count(case when status = 2 then status end) status_2_num ";
$sql .= " from table_name";
//Update Join / Delete Join $sql = "update table_name_1 ";
$sql .= " inner join table_name_2 on table_name_1.id = table_name_2.uid ";
$sql .= " inner join table_name_3 on table_name_3.id = table_name_1.tid ";
$sql .= " set *** = *** ";
$sql .= " where *** "; //delete join 同上。
//替换某字段的内容的语句 $sql = "update table_name set content = REPLACE(content, 'aaa', 'bbb') ";
$sql .= " where (content like '%aaa%')";
//获取表中某字段包含某字符串的数据 $sql = "SELECT * FROM `表名` WHERE LOCATE('关键字', 字段名) ";
//获取字段中的前4位 $sql = "SELECT SUBSTRING(字段名,1,4) FROM 表名 ";
//查找表中多余的重复记录 //单个字段 $sql = "select * from 表名 where 字段名 in ";
$sql .= "(select 字段名 from 表名 group by 字段名 having count(字段名) > 1 )"; //多个字段 $sql = "select * from 表名 别名 where (别名.字段1,别名.字段2) in ";
$sql .= "(select 字段1,字段2 from 表名 group by 字段1,字段2 having count(*) > 1 )";
//删除表中多余的重复记录(留id最小) //单个字段 $sql = "delete from 表名 where 字段名 in ";
$sql .= "(select 字段名 from 表名 group by 字段名 having count(字段名) > 1)  ";
$sql .= "and 主键ID not in ";
$sql .= "(select min(主键ID) from 表名 group by 字段名 having count(字段名 )>1) "; //多个字段 $sql = "delete from 表名 别名 where (别名.字段1,别名.字段2) in ";
$sql .= "(select 字段1,字段2 from 表名 group by 字段1,字段2 having count(*) > 1) ";
$sql .= "and 主键ID not in ";
$sql .= "(select min(主键ID) from 表名 group by 字段1,字段2 having count(*)>1) ";

业务篇

  • 连续范围问题
//创建测试表 CREATE TABLE `test_number` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `number` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '数字',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
//创建测试数据 insert into test_number values(1,1);
insert into test_number values(2,2);
insert into test_number values(3,3);
insert into test_number values(4,5);
insert into test_number values(5,7);
insert into test_number values(6,8);
insert into test_number values(7,10);
insert into test_number values(8,11);

实验目标:求数字的连续范围。

根据上面的数据,应该得到的范围。

1-3 5-5 7-8 10-11
//执行Sql select min(number) start_range,max(number) end_range from (
    select number,rn,number-rn diff from (
        select number,@number:=@number+1 rn from test_number,(select @number:=0) as number
    ) b
) c group by diff;

数字的连续范围

  • 签到问题
//创建参考表(模拟数据需要用到) CREATE TABLE `test_nums` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='参考表'; //模拟数据,插入 1-10000 连续数据.
//创建测试表 CREATE TABLE `test_sign_history` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `uid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '用户ID', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '签到时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='签到历史表';
//创建测试数据 insert into test_sign_history(uid,create_time)
select ceil(rand()*10000),str_to_date('2016-12-11','%Y-%m-%d')+interval ceil(rand()*10000) minute from test_nums where id<31;
//统计每天的每小时用户签到情况 select
    h,
    sum(case when create_time='2016-12-11' then c else 0 end) 11Sign,
    sum(case when create_time='2016-12-12' then c else 0 end) 12Sign,
    sum(case when create_time='2016-12-13' then c else 0 end) 13Sign,
    sum(case when create_time='2016-12-14' then c else 0 end) 14Sign,
    sum(case when create_time='2016-12-15' then c else 0 end) 15Sign,
    sum(case when create_time='2016-12-16' then c else 0 end) 16Sign,
    sum(case when create_time='2016-12-17' then c else 0 end) 17Sign from (
    select
        date_format(create_time,'%Y-%m-%d') create_time,
        hour(create_time) h,
        count(*) c from test_sign_history
    group by
        date_format(create_time,'%Y-%m-%d'),
        hour(create_time)
) a
group by h with rollup;

统计每天的每小时用户签到情况

//统计每天的每小时用户签到情况(当某个小时没有数据时,显示0) select
    h ,
    sum(case when create_time='2016-12-11' then c else 0 end) 11Sign,
    sum(case when create_time='2016-12-12' then c else 0 end) 12Sign,
    sum(case when create_time='2016-12-13' then c else 0 end) 13Sign,
    sum(case when create_time='2016-12-14' then c else 0 end) 14Sign,
    sum(case when create_time='2016-12-15' then c else 0 end) 15Sign,
    sum(case when create_time='2016-12-16' then c else 0 end) 16Sign,
    sum(case when create_time='2016-12-17' then c else 0 end) 17Sign from (
    select b.h h,c.create_time,c.c from (
        select id-1 h from test_nums where id<=24 ) b
     left join
     (
        select
         date_format(create_time,'%Y-%m-%d') create_time,
         hour(create_time) h,
         count(*) c from test_sign_history
        group by
         date_format(create_time,'%Y-%m-%d'),
         hour(create_time)
      ) c on (b.h=c.h)
) a
group by h with rollup;
统计每天的每小时用户签到情况(当某个小时没有数据时,显示0)
//统计每天的用户签到数据和每天的增量数据 select
        type,
        sum(case when create_time='2016-12-11' then c else 0 end) 11Sign,
        sum(case when create_time='2016-12-12' then c else 0 end) 12Sign,
        sum(case when create_time='2016-12-13' then c else 0 end) 13Sign,
        sum(case when create_time='2016-12-14' then c else 0 end) 14Sign,
        sum(case when create_time='2016-12-15' then c else 0 end) 15Sign,
        sum(case when create_time='2016-12-16' then c else 0 end) 16Sign,
        sum(case when create_time='2016-12-17' then c else 0 end) 17Sign from (
        select b.create_time,ifnull(b.c-c.c,0) c,'Increment' type from (
            select
             date_format(create_time,'%Y-%m-%d') create_time,
             count(*) c from test_sign_history
            group by
             date_format(create_time,'%Y-%m-%d')
        ) b
        left join
        (
            select
             date_format(create_time,'%Y-%m-%d') create_time,
             count(*) c from test_sign_history
            group by
             date_format(create_time,'%Y-%m-%d')
        ) c on(b.create_time=c.create_time+ interval 1 day)
    uNIOn all
        select
         date_format(create_time,'%Y-%m-%d') create_time,
         count(*) c, 'Current' from test_sign_history
        group by
         date_format(create_time,'%Y-%m-%d')
) a
group by type
order by case when type='Current' then 1 else 0 end desc;
统计每天的用户签到数据和每天的增量数据
//模拟不同的用户签到了不同的天数 insert into test_sign_history(uid,create_time)
select uid,create_time + interval ceil(rand()*10) day from test_sign_history,test_nums
where test_nums.id <10 order by rand() limit 150;
//统计签到天数相同的用户数量 select
    sum(case when day=1 then cn else 0 end) 1Day,
    sum(case when day=2 then cn else 0 end) 2Day,
    sum(case when day=3 then cn else 0 end) 3Day,
    sum(case when day=4 then cn else 0 end) 4Day,
    sum(case when day=5 then cn else 0 end) 5Day,
    sum(case when day=6 then cn else 0 end) 6Day,
    sum(case when day=7 then cn else 0 end) 7Day,
    sum(case when day=8 then cn else 0 end) 8Day,
    sum(case when day=9 then cn else 0 end) 9Day,
    sum(case when day=10 then cn else 0 end) 10Day from (
    select c day,count(*) cn from (
        select uid,count(*) c from test_sign_history group by uid
    ) a
    group by c
) b;
统计签到天数相同的用户数量
//统计每个用户的连续签到时间 select * from (
    select d.*,
    @ggid := @cggid,
    @cggid := d.uid, if(@ggid = @cggid, @grank := @grank + 1, @grank := 1) grank from (
        select uid,min(c.create_time) begin_date ,max(c.create_time) end_date,count(*) count from (
            select
            b.*,
            @gid := @cgid,
            @cgid := b.uid, if(@gid = @cgid, @rank := @rank + 1, @rank := 1) rank,
            b.diff-@rank flag from (
                select
                distinct
                uid,
                date_format(create_time,'%Y-%m-%d') create_time,
                datediff(create_time,now()) diff from test_sign_history order by uid,create_time
            ) b, (SELECT @gid := 1, @cgid := 1, @rank := 1) as a
        ) c group by uid,flag
        order by uid,count(*) desc
    ) d,(SELECT @ggid := 1, @cggid := 1, @grank := 1) as e
)f
where grank=1;
统计每个用户的连续签到时间
您可能感兴趣的文档:

--结束END--

本文标题: Mysql 常用 SQL 语句大全

本文链接: https://www.lsjlt.com/news/9464.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL常用语句大全
    我们在进行开发工作时,对数据库的操作是必不可少的,熟练掌握SQL语句可以让我们对数据库的数据处理变得非常简单,所以学习SQL语句是非常有必要的,下面汇总了一些常用的SQL语句 SQL语句的类型 DDL(Data Definition Lan...
    99+
    2023-08-31
    sql 数据库
  • 常用的SQL查询语句大全
    这篇文章主要讲解了“常用的SQL查询语句大全”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“常用的SQL查询语句大全”吧!一、基础1、说明:创建数据库CREA...
    99+
    2024-04-02
  • 史上超强最常用SQL语句大全
    目录DDL(Data Definition Language)数据定义语言一、操作库二、操作表一、增加 insert into二、删除 delete三、修改 updateD...
    99+
    2023-02-10
    最常用SQL语句 SQL语句大全
  • SQL语句大全(3)
    1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部    “where 1=2”全部不选, 如: if @strWhere !=''  begin set @strSQ...
    99+
    2023-01-31
    语句 大全 SQL
  • SQL语句大全(详解)
    SQL 前言1 DDL1.1 显示所包含的数据库1.2 创建数据库1.3 删除数据库1.4 使用数据库1.4.1 创建表1.4.2 查看表的结构1.4.3 查看当前数据库下的所有表1.4.4 ...
    99+
    2023-10-26
    sql 数据库 mysql
  • SQL数据库语句大全
    目录基础创建数据库删除数据库备份sql server创建 备份数据的 device开始 备份创建新表根据已有的表创建新表:删除新表增加一个列添加主键删除主键创建索引删除索引创建视图删...
    99+
    2024-04-02
  • MySQL高级进阶sql语句总结大全
    目录SELECTDISTINCTWHEREAND ORINBETWEEN通配符LIkeORDER BY函数city表格字符串函数常用函数实例:concatsubstr...
    99+
    2024-04-02
  • 【MySQL】MySQL基本语句大全
    个人主页:【😊个人主页】 系列专栏:【❤️MySQL】 文章目录 前言结构化查询语句分类MySQL语句大全📚DDL(对数据库和表的操作)🤖DQL(查询语句)💻...
    99+
    2023-08-17
    mysql 数据库
  • MySQL 查询语句大全
    目录 基础查询 直接查询 AS起别名 去重(复)查询 条件查询 算术运算符查询 逻辑运算符查询 正则表达式查询⭐ 模糊查询 范围查询 是否非空判断查询 排序查询  限制查询(分页查询) 随机查询 分组查询 HAVING 高级查询 子...
    99+
    2023-08-31
    mysql 数据库 sql
  • mysql数据库操作_高手进阶常用的sql命令语句大全
    mysql数据库操作sql命令语句大全:三表连表查询、更新时批量替换字段部分字符、判断某一张表是否存在、自动增长恢复从1开始、查询重复记录、更新时字段值等于原值加上一个字符串、更新某字段为随机值、复制表数据到另一个表、创...
    99+
    2022-11-20
    mysql sql语句 sql命令
  • Mysql查询语句大全
    简单查询 ## 直接查询语法:select 字段 from 表名;举例:select name, age from student;解析:从 student 表中查询 name 与 age ## 条件查询语法:selec...
    99+
    2023-08-16
    mysql sql 数据库
  • MYSQL常用sql语句有哪些呢
    这篇文章给大家介绍MYSQL常用sql语句有哪些呢,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 SQL分类: DDL—数据定义语言(CREAT...
    99+
    2024-04-02
  • MongoDB中的常用语句总结大全
    前言 MongoDB与MySQL基本语句还是有很大区别的,今天再介绍一下MongoDB的一些常用的基本语句,下面话不多说了,来一起看看详细的介绍吧 MOngoDB  删除语句 delete()删...
    99+
    2024-04-02
  • MySQL常见的sql优化语句
    本篇内容介绍了“MySQL常见的sql优化语句”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!大批量插入数据...
    99+
    2024-04-02
  • MySQL中有哪些常用的SQL语句
    MySQL中有哪些常用的SQL语句,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、复杂SQL查询1.1、单表查询(1)选择指定的列[例]查询...
    99+
    2024-04-02
  • mysql数据库操作_高手进阶常用的sql命令语句大全 原创
    mysql数据库操作sql命令语句大全:三表连表查询、更新时批量替换字段部分字符、判断某一张表是否存在、自动增长恢复从1开始、查询重复记录、更新时字段值等于原值加上一个字符串、更新某...
    99+
    2022-11-21
    mysql sql语句 sql命令
  • 常用SQL语句整理
    -----表空间使用率----- ...
    99+
    2024-04-02
  • Mybatis超级强大的动态SQL语句大全
    目录1. If 语句2. Where语句2.1 和 where 元素等价的自定义 trim 元素3. Set语句3.1 与 set 元素等价的自定义 trim 元...
    99+
    2024-04-02
  • mysql:增删改查语句大全
    一、插入 法一 insert into 表名(列名1,列名2,……)values(值1,值2,……); insert into bbms.users (userid,username) values (‘123’,’张三一’); 法二 ...
    99+
    2023-09-02
    mysql 数据库 sql
  • MYSQL常用的基本SQL语句有哪些
    这篇文章主要讲解了“MYSQL常用的基本SQL语句有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MYSQL常用的基本SQL语句有哪些”吧!mysql服...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作