🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 数据库补充 **TIP1:所有包含NULL的计算结果都是NULL** **TIP2:count函数不会计算指定列值为NULL的行** **TIP3:聚合函数都会将NULL排除在外** **TIP4:GROUP BY子句不能使用别名** **TIP5:HAVING子句必须在GROUP BY之后** 子句书写顺序: ~~~ SELECT->FROM->WHERE->GROUP BY->HAVING->ORDER BY ~~~ <br> 子句执行顺序: ~~~ FROM->WHERE->GROUP BY->聚合函数->HAVING->SELECT->ORDER BY ~~~ <br> 一个不太容易理解的规则: ~~~ WHERE子句 = 指定行所对应的条件 HAVING子句 = 指定组所对应的条件 ~~~ <br> **TIP6:WHERE和HAVING中都可以写的条件写在WHERE里更好,这是为运行速度考虑** 三类删除的不同 1. DELETE FROM <table_name> 是删除表中的所有数据但不删除表,且因为它可以加上限定谓词WHERE,所以运行速度较TRUNCATE慢 2. TRUNCATE <table_name> 是删除表中所有数据但不删除表,且因为无法加限定条件,所以它执行删除的速度要比DELETE快 3. DROP <table_name> 是直接连带表一起删除了,和上面两个命令有显著不同 <br> **TIP7:LIKE谓词中下划线代表任意一个字符** CASE的使用 CASE表达式分为简单CASE和搜索CASE两种,实际上就是switch case和if else语法的区别,如下 搜索CASE <br> ~~~ SELECT product_name, CASE WHEN product_type='衣服' THEN CONCAT('A: ', product_type) WHEN product_type='办公用品' THEN CONCAT('B: ', product_type) WHEN product_type='厨房用品' THEN CONCAT('C: ', product_type) ELSE NULL END AS abc_product_type FROM Product; ~~~ <br> 简单CASE ~~~ SELECT product_name, CASE product_type WHEN '衣服' THEN CONCAT('A: ', product_type) WHEN '办公用品' THEN CONCAT('B: ', product_type) WHEN '厨房用品' THEN CONCAT('C: ', product_type) ELSE NULL END AS abc_product_type FROM Product; ~~~ <br> **TIP8:PARTITION BY和GROUP BY的区别是GROUP BY会对指定列进行聚合,而PARTITION BY只是单纯的划分分组而已** SQL的三值逻辑,小写的unknown为第三个值,同时SQL的三值逻辑优先顺序为 <br> ~~~ AND: false > unknown > true OR: true > unknown > false ~~~ <br> 运算靠优先级高的值决定结果 **TIP9:因为SQL奇葩的三值逻辑,常理上等同的两个谓词IN和EXISTS在NOT IN和NOT EXISTS时却不一样了,NOT IN 在有NULL值时会计算出奇怪的结果,NOT EXISTS不会**