Mysql学习笔记

牛客网练习题:https://www.nowcoder.com/activity/oj

行列转换:

可以看出,

# 行转列
SELECT userid,
SUM(IF(`subject`='语文',score,0)) as '语文',
SUM(IF(`subject`='数学',score,0)) as '数学',
SUM(IF(`subject`='英语',score,0)) as '英语',
SUM(IF(`subject`='政治',score,0)) as '政治' 
FROM tb_score 
GROUP BY userid;



# 列转行
SELECT userid,'语文' AS course,cn_score AS score FROM tb_score1
UNION ALL
SELECT userid,'数学' AS course,math_score AS score FROM tb_score1
UNION ALL
SELECT userid,'英语' AS course,en_score AS score FROM tb_score1
UNION ALL
SELECT userid,'政治' AS course,po_score AS score FROM tb_score1
ORDER BY userid;

附:UNION与UNION ALL的区别(摘):

1.对重复结果的处理:UNION会去掉重复记录,UNION ALL不会;

2.对排序的处理:UNION会排序,UNION ALL只是简单地将两个结果集合并;

3.效率方面的区别:因为UNION 会做去重和排序处理,因此效率比UNION ALL慢很多;

参考链接:https://blog.csdn.net/u013982921/article/details/99652485

语法:http://c.biancheng.net/view/2419.html

  • group by col1, col2、order by col1 desc, col2 asc
  • date_sub(curdate(), interval 1 day)    # 昨天
  • limit 2,5、limit 5 offset 2  都相当于python的range(2,2+5)从索引为2开始往下取5条

查询执行顺序:

  • 1. FROM 和 JOIN:
  • 2. WHERE:在数据分组前进行过滤,不能使用col的别名。
  • 3. GROUP BY:
  • 4. SELECT:对结果col简单筛选
  • 5. DISTINCT:如果数据行有重复DISTINCT 将负责排重.
  • 6. HAVING:对结果集再次筛选,可以用col的别名。
  • 7. ORDER BY:此时可以用AS别名.
  • 8. LIMIT / OFFSET:

WHERE HAVING的区别

  • WHERE 在数据分组前进行过滤,不能使用聚合函数,不能使用col的别名。
  • HAVING 对分组后的数据进行过滤,可以使用聚合函数,能使用col的别名。

三大范式:

  • 第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。
  • 第二范式(2NF):第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)
  • 第三范式(3NF):第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
  • 参考链接:https://www.cnblogs.com/wsg25/p/9615100.html

事务:https://blog.csdn.net/chuancheng_zeng/article/details/115260591

视图:

  • 参考链接:https://blog.csdn.net/HXNLYW/article/details/81669964
  • 同步视图到另一个数据库比较麻烦

# TODO:理解索引的原理过程、MYSQL锁

索引原理:https://zhuanlan.zhihu.com/p/113917726

https://www.cnblogs.com/Eva-J/articles/10126413.html#_label1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值