2016-04-22 43 views
0

下面是這個thread的例子:在MySQL中,這個簡單的嵌套SELECT子句究竟意味着什麼?

select (
    select distinct Salary from Employee order by Salary Desc limit 1 offset 1 
)as second; 

select(...) as second看起來混亂我,因爲我從來沒有見過一個查詢集列名,而不是可以被用作SELECT參數..

有沒有人有關於如何理解這樣嵌套select子句的想法?有沒有關於這個功能的任何教程?

回答

1

這是查詢的SELECT列表中的子查詢。

到那裏,讓我們來看看其他一些例子

SELECT t.id 
    , 'bar' AS foo 
    FROM mytable 
WHERE ... 
LIMIT ... 

「酒吧」僅僅是被每行中從查詢結果集返回(在一個名爲foo列)一個字符串。

此外,MySQL允許我們在不一個運行一個查詢FROM子句

SELECT 'fee' AS fum 

我們也可以把一個子查詢中查詢的SELECT列表。例如:

SELECT t.id 
    , (SELECT r.id FROM resorts r ORDER BY r.id ASC LIMIT 1) AS id 
    FROM mytable 
WHERE ... 
LIMIT ... 

你問的查詢模式是一個沒有FROM子句

並恢復只表達一個SELECT語句從一個子查詢的結果。

例如:

SELECT e.salary 
    FROM Employee e 
    GROUP BY e.salary 
    ORDER BY e.salary DESC 
    LIMIT 4,1 

如果此查詢運行時,它會返回一個列,並返回一個或零行。 (不超過一個)。這滿足在另一個查詢的SELECT列表中使用的子查詢的要求。

SELECT (subquery) AS alias 

由此,執行外部查詢。沒有FROM子句,所以MySQL返回一行。結果集將包含一列,名稱爲「別名」。

對於外部查詢返回的每一行,MySQL都會執行SELECT列表中的子查詢。如果子查詢返回一行,則子查詢的SELECT列表中的表達式的值將被分配給結果集的「別名」列。如果子查詢的執行沒有返回一行,那麼MySQL會爲「別名」列指定一個NULL值。

相關問題