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)