SQLZOO習題挑戰中,常常迷糊的知識點
來自專欄猴子聊數據分析
通配符
在搜索資料庫中的數據時,SQL 通配符可以替代一個或多個字元,通配符必須與 LIKE 運算符一起使用。常見的通配符如下:
具體使用方法建議參考SQL 通配符
Concat
concat函數可以連接一個或者多個字元串,若其中一個為null,則返回null。
Germany (population 80 million)
has the largest population of the countries in Europe. Austria (population 8.5
million) has 11% of the population of Germany.ANY、SOME、ALL、IN
子查詢語句的過程中經常使用ANY、SOME、ALL、IN關鍵字作為篩選條件。
由於列子查詢返回的結果集是 N 行一列,因此不能直接使用 =、 >、 <、 >=、 <=、 <> 這些比較標量結果的操作符。在列子查詢中可以使用 IN、ANY、SOME 和 ALL 操作符:
- IN:在指定項內,同 IN(項1,項2,…)。
- ANY:與比較操作符聯合使用,表示與子查詢返回的任何值比較為 TRUE ,則返回 TRUE 。
- SOME:ANY 的別名,較少使用。
- ALL:與比較操作符聯合使用,表示與子查詢返回的所有值比較都為 TRUE ,則返回 TRUE。
Find the continents where all countries have a population <= 25000000. Then find
the names of the countries associated with these continents. Show name, continent and population
Null
NULL 的條件比較運算是比較特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。在 MySQL 中,NULL 值與任何其它值的比較(即使是 NULL)永遠返回 false,即 NULL = NULL 返回false 。MySQL 中處理 NULL 使用 IS NULL 和 IS NOT NULL 運算符。
List the teachers who have NULL for their department.
IFNULL
IFNULL函數是MySQL控制流函數之一,它接受兩個參數,如果不是NULL,則返回第一個參數。 否則,IFNULL函數返回第二個參數。
IFNULL(expression_1,expression_2);
如果expression_1不為NULL,則IFNULL函數返回expression_1; 否則返回expression_2的結果。
示例中的語句是運行的原理:
IFNULL(1,0)返回1,因為1不為NULL。
IFNULL(,1)返回,因為字元串不為NULL。
IFNULL(NULL,IFNULL function)返回IFNULL函數字元串,因為第一個參數為NULL。
Coalesce
COALESCE是一個函數, (expression_1, expression_2, ...,expression_n)依次參考各參數表達式,遇到非null值即停止並返回該值。如果所有參數均為 NULL,則 COALESCE 返回 NULL。
Use the COALESCE function and a LEFT JOIN to print the teacher name and department name. Use the string None where there is no department
Case When Then
流程式控制制語句或條件控制語句。對已知的資料庫中數據,按照自己的邏輯,進行自定義分組和數據分析(用此條件控制語句,實現自定義條件分組)
Use CASE to show the name of each teacher followed by Sci if the teacher is in dept 1 or 2, show Art if the teachers dept is 3 and None otherwise.
注意:1,case when then是條件後得到的結果並在列名中展現,如其他select挑選出的列一樣,列名之間逗號隔開,位於from 之前;
子查詢(subquery)
子查詢-是嵌套在其他查詢中的查詢;
相關子查詢(correlated subsquery)-涉及外部查詢的子查詢,注意在多表查詢中,請使用table_name.column_name的方式表達,避免列名表達模糊。
連接(join)
鏈接-將多個表中的欄位根據匹配條件進行橫向的拼接。
內連接(inner join)
左連接(left join)
將左表作為主表,用主表中的每一條記錄,去匹配從表(右表)中的所有記錄,根據匹配的條件,如果成功則將主表的記錄中的欄位與從表的記錄中的記錄,拼接成一條完整的記錄,放到結果集;如果不成功則將從表中的記錄中的欄位全部置為null,保留主表中的欄位。
右連接(right join)
將右表作為主表,用主表中的每一條記錄,匹配從左表中的所有記錄,根據匹配的條件,如果成功則將主表的記錄中的欄位與從左表的記錄中的記錄,拼接成一條完整的記錄,放到結果集。如果不成功則將從左表中的記錄中的欄位全部置為null,保留主表中的欄位。
Which were the busiest years for John Travolta, show the year and the number of movies he made each year for any year in which he made more than 2 movies.
其他知識點:
當WHERE子句、GROUP BY子句和HAVING子句同時出現在一個查詢中時,SQL的執行順序如下:
(1) 執行WHERE子句,從表中選取行。
(2) 由GROUP BY 子句對選取的行進行分組。
(3) 執行聚合函數。
(4) 執行HAVING 子句選取滿足條件的分組。
自連接(self join)
將表中行與同一表中的其他行組合時,可以使用自連接。執行自聯接操作必須使用表別名來幫助MySQL在單個查詢中區分左表與同一張表的右表。
推薦閱讀:
※解決阿里雲VPS伺服器mysql自動關閉的問題
※django鏈接mysql資料庫
※你的工作開始了
※比CRUD多一點兒(一):MySQL常用命令