一:select 里面可以嵌套select 可以加个别名
eg:SELECT B.id sort,B.pay_name stageName, count(A.payback_stage) stageNum,A.payback_stage, (select count() from yc_payback A
where A.paid_back_amount = 0 and A.invoiced_bill_amount > 0) allnum
FROM sys_pay B
LEFT JOIN (SELECT FROM yc_payback ) A ON A.payback_stage = B.id
where A.paid_back_amount = 0 and A.invoiced_bill_amount > 0
GROUP BY B.pay_name ORDER BY B.id
二:sum count
1.sum
(1)sum()函数里面的参数是列名的时候,是计算列名的值的相加,而不是有值项的总数。
(2)sum(条件表达式),如果记录满足条件表达式就加1,统计满足条件的行数
2.count
(1)COUNT()函数里面的参数是列名的的时候,那么会计算有值项的次数。(NULL 不计入, 但是’’值计入)
(2)COUNT(*)可以计算出行数,包括null
(3)COUNT(1)也可以计算出行数,1在这里代表一行
(4)COUNT(column)对特定的列的值具有的行数进行计算,不包含NULL值
(5)COUNT(条件表达式),不管记录是否满足条件表达式,只要非NULL就加1
例子:要求:查询出2门及2门以上不及格者的平均成绩。
select name,sum(score < 60) ,avg(score) from result group by name having sum(score<60) >=2;
三:
mysql随机插入日期时间
随机插入2016-01-01 00:00:00之后两年内的时间
UPDATE rpt_adhoc_demo
SET
date =
DATE_ADD(
DATE_ADD(‘2016-01-01 00:00:00’, INTERVAL FLOOR(1 + (RAND() 86400)) SECOND ),
INTERVAL FLOOR(1 + (RAND() 730)) DAY)
其中86400为一天的秒数,如果需要特定时间段区间,则需要修改起始时间值以及其后多少秒的数值
其中730为起始时间之后的天数,同上,如果需要特定的天数区间,则在起始时间后加上你要的区间天数即可
————————————————
原文链接:https://blog.csdn.net/lining0728/article/details/78800612
四:
打开sql文件,将文件中的所有utf8mb4_0900_ai_ci替换为utf8_general_ciutf8mb4替换为utf8
保存后再次运行sql文件,运行成功
五:
同步表结构:https://www.cnblogs.com/chenqs/p/8465499.html
六:
删除表数据有两种方法:delete和truncate。具体语句如下:
(2)、RUNCATE TABLE name :
删除表中的所有行,而不记录单个行删除操作。 在这个指令之下,表格中的资料会完全消失,可是表格本身会继续存在。
TRUNCATE TABLE 的语法:TRUNCATE TABLE name ,参数 name 是要截断的表的名称或要删除其全部行的表的名称。
(2)、Delete from tablename where 1=1
1、delete语法:
DELETE FROM 表名称 WHERE 列名称 = 值。
2、删除所有行:
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:DELETE FROM table_name。
[
](https://iknow-pic.cdn.bcebos.com/78310a55b319ebc4ba53a1398f26cffc1e171662)
1、 truncate和 delete只删除数据不删除表的结构(定义) 。
2、delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发。
truncate是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。
3、delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 。truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始)。
4、速度,一般来说: truncate >delete 。
七:数据库备份
自动运行创建的是批处理作业 然后每个批处理作业里面可以有多个任务计划。任务计划就是定时执行”备份”这个动作。批处理的目的时为了批量处理这些任务计划。设定好了任务计划以后要开始执行批处理作业。
七:mysql运行数据结构
https://www.cnblogs.com/detectiveHLH/p/15155696.html
八:
delimiter
CREATE PROCEDURE update_name(IN uid INT)
BEGIN
update test_user C set C.user_name =(SELECT t.contract_name FROM (select contract_name from yc_operation A INNER JOIN test_user B on A.id = B.id where A.id = uid ) t) where C.id = uid;
END
call update_name(1);
DROP PROCEDURE update_name
需要重复执行某个sql的话可以写个存储过程。在定义过程时,使用DELIMITER 命令将语句的结束符号从分号 ; 临时改为两个,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。 IN uid是传进来的参数 INT是参数类型。call 表示执行这个存储过程。drop procedure 表示删除这个存储过程。
还可以用循环批量调用这个存储过程
delimiter
CREATE PROCEDURE repeat_update_name()
BEGIN
DECLARE i int(11);
set i = 0;
myLoop:LOOP
set i = i+1;
if i<10 THEN
CALL update_name(i);
END if;
END LOOP myLoop;
END
call repeat_update_name
九: like模糊查询时为什么使用concat函数
https://blog.csdn.net/weixin_39315827/article/details/102887843
可以防止sql注入
十:mysql中给查询结果添加序号列
列出数学成绩排名 (要求显示字段:排名,姓名 , 课程名称, 分数 , 学号)
用于排名的字段,查询时此处将其用 pm表示
select (@i:=@i+1)pm,s.* from stuscore s,(select @i:=0)t where s.subject=’数学’
order by score desc;
思想:事先定义一个变量,通过变量的递加以及虚拟表的联查达到生成序列号的目的。
