coalesce---一个很有用的函数,作用是将返回传入的参数中第一个非null的值,比如
SELECT COALESCE(NULL, NULL, 1);
-- Return 1
SELECT COALESCE(NULL, NULL);
-- Return NULL
mysql加减乘除
SELECT e.empno,e.ENAME,e.DEPTNO,e.SAL*case when eb.TYPE=1 THEN .1
WHEN eb.type=2 THEN .2
ELSE .3 end as bonus from emp e,emp_bonus eb WHERE e.EMPNO=eb.EMPNO AND
e.DEPTNO=10
IFNULL(expr1,expr2)
假如 expr1 不为 NULL,则 IFNULL() 的返回值为 expr1 ;否则其返回值为 expr2 。IFNIULL() 的返回值是数字或是字符串,具体情况取决于其所使用的语境。
IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL), 则 IF() 的返回值为 expr2;否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
select if(sva=1,"男","女") as ssva from taname where id = '111'
IF search_condition THEN
statement_list
[ELSEIF search_condition THEN]
statement_list ...
[ELSE statement_list]
END IF
DROP PROCEDURE IF EXISTS init_count;
DELIMITER //
create PROCEDURE init_count()
begin
set @count=0;
while @count<1000 do
set @count=@count+1;
END WHILE;
end;
//
DELIMITER ;
call init_count();
select @count;
https://blog.youkuaiyun.com/yanluandai1985/article/details/89632265
触发器
语法:create trigger 触发器名 before|after 事件 on 表名 for each row 触发器语句;
触发器名建议为trigger_xxx,这样便于区分,触发器名不能重复。
before|after 代表触发器语句执行时间,如果是before,就是在insert delete update操作之前执行触发器语句;after就是之后。
事件就是insert delete update操作中的一个。
for each row 是代表任何记录执行对应操作都会触发器。
触发器语句就是触发器触发时要执行的语句。
比如:下面是一个当插入新用户时,在用户创建时间表中插入一条新数据,是当前时间。
create trigger trigger_addUserTime
before
insert
on user_info
for each row
insert into usercreatetime(create_time) values(now());
DISTINCT删除重复项
SELECT DEPTNO,sum(DISTINCT SAL) as total,sum(bonus) from(
SELECT e.empno,e.ENAME,e.SAL,e.DEPTNO,e.SAL*case when eb.TYPE=1 THEN .1
WHEN eb.type=2 THEN .2
ELSE .3 end as bonus from emp e,emp_bonus eb WHERE e.EMPNO=eb.EMPNO AND
e.DEPTNO=10
)x
GROUP BY deptno