首页 > 数据库 >有用的sql

有用的sql

时间:2023-05-17 11:44:37浏览次数:24  
标签:code name -- 有用 sql id SELECT stock

转义字符

-- '_' 在mysql中是表示任一字符,下面查的是名字等于 *Aaaa 的
SELECT * FROM USER WHERE NAME = '_Aaaa';

-- 如果就要查名字是 _Aaaa 的人需要使用转移字符,把_当成普通字符
SELECT * FROM USER WHERE NAME = '\_Aaaa';

-- 或者自定义字符
SELECT * FROM USER WHERE NAME = '$_Aaaa' ESCAPE '$';

插入查询结果集

-- 查询结果字段必须和插入表字段一致,可以指定部分字段
INSERT INTO emp2
    SELECT *
    FROM employees

-- 指定字段
INSERT INTO emp2(id, code, create_time)
    SELECT id, code, create_time
    FROM employees
    WHERE department_id = 90;

时间查询

-- 获取当前系统年月是时分秒
SELECT 
    YEAR(CURDATE()),MONTH(CURDATE()),DAY(CURDATE()), 
    HOUR(CURTIME()),MINUTE(NOW()),SECOND(SYSDATE()) 
FROM DUAL

-- 查询当前是一年中第几天,是一年中第几周,月份名称等等
SELECT 
    MONTHNAME('2021-10-26'),DAYNAME('2021-10-26'),WEEKDAY(now()), 
    QUARTER(CURDATE()),WEEK(CURDATE()),
    DAYOFYEAR(NOW()), DAYOFMONTH(NOW()),DAYOFWEEK(NOW()) 
FROM DUAL;

联表更新

-- test1 的 name 设置为 test2 的 name(两表 code 相等,单字段)
update test1 
set name = (select name from test2 where test2.code=test1.code)

-- test1 的 addr 和 num 设置为 test2 的 addr 和 num(两表 name 和 age 相等,多字段)
update test1 a 
inner join (select * from test2) b on a.name = b.name and a.age = b.age 
set a.addr = b.addr, a.num = b.num

存储过程-遍历查询结果集并处理

DELIMITER $$
-- 存储过程名称,不带参数
CREATE PROCEDURE repairCurrentDayStatistics()
BEGIN
    -- 声明变量
    DECLARE rst int DEFAULT 0;
    DECLARE shopCode varchar(255);
    DECLARE stockId bigint;
    DECLARE countDate datetime;
    
    -- 声明游标:游标存储的内容为 select 结果集
    DECLARE record CURSOR FOR select shop_code, stock_id, count_date from it_stock_statistics_tob;
    -- 循环结束时,更改变量 rst 设置为1
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET rst = 1;
    -- 打开游标
    OPEN record;
    -- 游标内容赋值给变量
    FETCH record INTO shopCode, stockId, countDate;
    -- 循环开始,当 rst 不等于 1 才进入循环体
    WHILE rst <> 1 DO
      -- 具体业务操作
      update it_stock_statistics_tob a 
      inner join (
                  select 
                         r.shop_code, r.stock_id, r.countDate, 
                         r.sp, r.spw, r.ss, r.ssw 
                  from (select shop_code, stock_id, countDate, sum(purchase_size) sp, sum(purchase_weight) spw, sum(sale_size) ss, sum(sale_weight) ssw 
                        from it_stock_statistics_tob 
                        where shop_code = shopCode and stock_id = stockId and count_date <= countDate
                       ) r
                  ) b 
      on a.shop_code = b.shop_code and a.stock_id = b.stock_id and a.count_date = b.countDate 
      set a.total_purchase_size = b.sp, a.total_purchase_weight = b.spw, a.total_sale_size = b.ss, a.total_sale_weight = b.ssw;
      -- 业务操作结束,再把一个游标内容赋值给变量
      FETCH record INTO shopCode, stockId, countDate;
    -- 循环结束
    END WHILE;
    -- 关闭游标
    CLOSE record;
END$$
DELIMITER ;

-- 调用存储过程
CALL repairCurrentDayStatistics();

标签:code,name,--,有用,sql,id,SELECT,stock
From: https://www.cnblogs.com/hangychn/p/17408144.html

相关文章

  • 面试官:MySQL 日期时间类型怎么选?
    构建数据库写程序避免不了使用日期和时间,对于数据库来说,有多种日期时间字段可供选择,如timestamp和datetime以及使用int来存储unixtimestamp。不仅新手,包括一些有经验的程序员还是比较迷茫,究竟我该用哪种类型来存储日期时间呢?那我们就一步一步来分析他们的特点,这样我们根据......
  • mysql 基础知识
    --_在mysql中是表示任一字符,下面查的是名字等于*Aaaa的SELECT*FROMUSERWHERENAME='_Aaaa';--如果就要查名字是_Aaaa的人需要使用转移字符,把_当成普通字符SELECT*FROMUSERWHERENAME='\_Aaaa';--或者自定义字符SELECT*FROMUSERWHERENAME='$_Aaaa'......
  • 一个好用的命令行mysql客户端 mycli
    官网:https://www.mycli.net/支持自动补全,高亮提示,非常好用;查看表结构\dtsys_menu;有点遗憾的是没有展示注释信息,不可也可以用其它语句查看:showfullcolumnsfromsys_menu;showcreatetablesys_menu;查询结果导出\Tcsv;\o~/export.csv;SELECT*FROMt_t......
  • MySQL触发器Trigger加载以及目前局限
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:亮文章来源:GreatSQL社区原创概念介绍首先需要知道MySQL中触发器特点,以及表table相关触发器加载方式MySQL中单个trigger仅支持单事件触发即单......
  • java 连接 sqlserver 报错
    使用最新的sqlserver驱动报错:com.zaxxer.hikari.pool.HikariPool$PoolInitializationException:Failedtoinitializepool:"encrypt"propertyissetto"true"and"trustServerCertificate"propertyissetto"false"butthedri......
  • 通俗易懂!像使用SQL一样使用Pandas进行数据筛选等复杂操作
    相对于学习Pandas各种数据筛选操作,SQL语法显得更加简洁清晰,若能够将SQL语法与Pandas中对应的函数的使用方法关联起来,对于我们应用Pandas进行数据筛选来讲无疑是一个福音。本文通过Pandas实现SQL语法中条件过滤、排序、关联、合并、更新、删除等简单及复杂操作,使得我们对方法的理......
  • MYSQL因IN的范围太大导致索引失效问题
    背景最近发现有个用于统计的门店串码激活数量的SQL特别慢,将其摘出来大致如下SELECTa.sku_idasskuId,a.store_idasstoreId,count(*)assaleQtyFROMall_imei_infoawherea.activated_time>=1675530000000anda.activated_time<=1675616399999anda.stor......
  • mysql从5.7升级到8.0的注意事项
    ####################################(1)sql_mode全局变量:在升级MySQL版本到8.0的过程中,需要关注sql_mode参数默认值的变化,8.0版本sql_mode不支持NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有NO_AUTO_CREATE_USER(2)mysql_native_password插件:MySQL8.0.4开始,默认身份认证开始改变......
  • Oracle版面本的MySQL8.0的配置文件 my.cnf
    ##############################创建用户和用户组:groupaddworkuseraddwork  准备目录:mkdir-p/home/work/mysql_3306mkdir-p/home/work/mysql_3306/datamkdir-p/home/work/mysql_3306/etcmkdir-p/home/work/mysql_3306/tmpmkdir-p/home/work/mysql_3306/logmkd......
  • ChatGPT 提高工作效率-一例SQL编写的过程
    ChatGPT提高工作效率-一例SQL编写的过程前言遇到一个问题,怀疑是有一些补丁没有被依赖.导致第一次更新时没有更新这些没依赖的补丁.后面更新时又更新了这些游离态的补丁.导致出现old文件覆盖new文件出现程序问题.一个补丁还好着,但是所有的补丁去检查就比较麻......