SQL架構mysql
編寫一個 SQL 查詢,獲取 Employee
表中第二高的薪水(Salary) 。sql
+----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+
例如上述 Employee
表,SQL查詢應該返回 200
做爲第二高的薪水。若是不存在第二高的薪水,那麼查詢應返回 null
。express
+---------------------+ | SecondHighestSalary | +---------------------+ | 200 | +---------------------+
# Write your MySQL query statement below SELECT (SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1) AS SecondHighestSalary ; /*法二 SELECT IFNULL( (SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1), NULL) AS SecondHighestSalary; */
在表中,一個列可能會包含多個重複值,有時您也許但願僅僅列出不一樣(distinct)的值。DISTINCT 關鍵詞用於返回惟一不一樣的值。架構
語法:函數
SELECT DISTINCT column_name FROM table_name;
ORDER BY 關鍵字用於對結果集按照一個列或者多個列進行排序。測試
ORDER BY 關鍵字默認按照升序對記錄進行排序。若是須要按照降序對記錄進行排序,您可使用 DESC 關鍵字。code
語法:blog
SELECT column_name1,column_name2 FROM table_name ORDER BY column_name1,column_name2 ASC|DESC;
要檢索查詢返回的行的一部分,請使用LIMIT
和OFFSET
子句。 如下說明了這些子句的語法:排序
SELECT column_list FROM table1 ORDER BY column_list LIMIT row_count OFFSET offsetColumnNumber;
在這個語法中,it
row_count
肯定將返回的行數。
OFFSET
子句在開始返回行以前跳過偏移行。 OFFSET
子句是可選的。 若是同時使用LIMIT
和OFFSET
子句,OFFSET
會在LIMIT
約束行數以前先跳過偏移行。
as 可理解爲:用做、當成,做爲;通常是重命名列名或者表名。
1.例若有表table, 列 column_1,column_2
你能夠寫成
select column_1 as 列1, column_2 as 列2 from table as 表
上面的語句就能夠解釋爲,選擇 column_1 做爲列1,column_2 做爲列2 , 把 table 當成表
SELECT * FROM Employee AS emp
這句意思是查找全部Employee 表裏面的數據,並把Employee表格命名爲 emp。
當你命名一個表以後,你能夠在下面用 emp 代替 Employee.
例如 SELECT * FROM emp.
3.把查詢對像起個別名的做用。
select ID as 用戶ID,Name as 用戶名 from Table_user
IFNULL() 函數用於判斷第一個表達式是否爲 NULL,若是爲 NULL 則返回第二個參數的值,若是不爲 NULL 則返回第一個參數的值。
IFNULL() 函數語法格式爲:
IFNULL(expression, alt_value)
若是第一個參數的表達式 expression 爲 NULL,則返回第二個參數的備用值。
參數說明:
參數 | 描述 |
---|---|
expression | 必須,要測試的值 |
alt_value | 必須,expression 表達式爲 NULL 時返回的值 |
SELECT DISTINCT Salary AS SecondHighestSalary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1 ;//若Salary只有一個值,則爲NULL,SecondHighestSalary的值不存在,也不爲空
爲空時,正確結果應爲:(null)