SQLZOO習題挑戰中,常常迷糊的知識點

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 NULLIS 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常用命令

TAG:學習方法 | MySQL |