一挠轴、關(guān)于Null
1. 存在null值的比較
如果null
參與比較運算传睹,則結(jié)果會被視為false,即會跳過null的比較運算岸晦,如>=,<=,<>,>,<,not in,in,!=
欧啤,在where中使用比較運算符時會直接忽略存在null值的行,可能造成可用數(shù)據(jù)的缺失启上。
因此在數(shù)據(jù)清洗時最好根據(jù)需求填充或刪除null值邢隧。
2. 分組鍵中存在null值
如果分組鍵中存在null值,則分組后會將所有null值行聚合為一個字段值為null的組冈在。
3. null參與算術(shù)運算
null
參與任何算術(shù)運算均返回null倒慧,類似于numpy的nan
。同理包券,聚合函數(shù)對含有null的數(shù)據(jù)進行運算的時候一般也返回null纫谅,除了count()
,它會返回非null數(shù)值個數(shù)溅固。
解決null值運算的方式有在聚合函數(shù)中嵌套ifnull
或isnull
函數(shù)
二付秕、SQL執(zhí)行順序
from —> join —> on —> where —> group by —> having —> select —> distinct —> order by —> limit
-
where
的操作對象是from或join后生成的臨時表,故其操作字段可以是全部字段 -
group by
的操作對象是where后生成的臨時表侍郭,故可操作字段是全部字段 -
having
的操作對象僅可以是groupby后接的字段或者任何聚合函數(shù)
三询吴、其他
- select與group by
select后聚合函數(shù)一定是僅能返回多個聚合函數(shù)加一個分組列掠河,其他行無法返回,謹記猛计,故求聚合數(shù)據(jù)如最大值的其他相關(guān)行數(shù)據(jù)時必須嵌套唠摹,若沒有分組,則僅返回一個值有滑,不能返回聚合值同行的其他字段。 - 外部聯(lián)結(jié)條件失效
左連接時嵌削,使用table_a left outer join table_b and table_a =xx
時毛好,后面的and條件無效,同理在右聯(lián)結(jié)時苛秕,對右表的篩選也無效肌访。 - 自聯(lián)結(jié)的作用
- 通過自聯(lián)結(jié)能夠比較列與列之間的層次或邏輯關(guān)系
- 使得跨行比較轉(zhuǎn)換為同行比較