前提
数据库:mysql
1.
功能:插入一条数据,如果存在则更新某些字段。
主要用到ON DUPLICATE KEY 这个关键字,如果存在重复的key,则执行后面的update语句。使用的关键在于表中存在主键key或唯一key,而且插入的字段中也包含一个相应的key。
举栗子:
INSERT INTO tst_table (
vgroupcode,
vscode,
vsname,
dworkdate,
namt
)
VALUES
(
"1",
"1",
"1",
"2018-10-01",
10.1
) ON DUPLICATE KEY UPDATE namt =
VALUES
(namt)
我在tst_table中给(vgroupcode,vscode,dworkdate)添加了唯一约束,那么在执行上面的sql时如果不满足这个唯一约束,就会执行更新操作。
2.
功能:格式化时间
DATE_FORMAT(
bd.return_amt_datetime,
"%Y-%m-%d %h:%i"
) as returnAmtDatetime,
使用了上面这个函数,查询出的时间想得到什么时间格式就能得到什么时间格式
3.
使用场景:
课程表 C,学生成绩表S
我需要查询出所有学号等于2017024的学生的所有的课程成绩,如果这个学生选了这门课,就取这门课的成绩,没有的话就置为0。
课程表中存了所有的课程;学生成绩表中存了所有学生的学习成绩。
这个就是需要C表左连接S表的子集(满足学号等于2017024),使用课程号来连接。必须是左连接,左表的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
举栗子 :
SELECT
c.cno,
c.cname,
IFNULL(sss.score,0) as score
FROM
c
LEFT JOIN (
SELECT
score,
cno
FROM
s
WHERE
s.sno = "2017024"
) sss
on sss.cno=c.cno
C表内容:
S表内容:
查询出的结果:
用到了左连接、嵌套查询、ifnull函数。