2014-03-13 57 views

回答

0

要理解這兩者之間的區別,你必須考慮SQL語句的經典結構:

SELECT ... 
FROM ... 
WHERE ... 
ORDER BY ...; 

例如,如果你認爲所謂的「襯衫」 500行表,讓我們通過選擇它們的所有500開始:

-- first example: all rows as stored 
SELECT 
    name, 
    color, 
    size, 
    maker 
FROM shirts 
ORDER BY name; 

接下來,讓我們添加一個WHERE子句。這用於將最終結果集中返回的行限制爲僅匹配某些指定條件的行。例如,你可以說「WHERE顏色=‘白色’」返回一組小的(比方說)80行:

-- second example: only some rows 
SELECT 
    name, 
    color, 
    size, 
    maker 
FROM shirts 
WHERE color = 'white' 
ORDER BY name; 

CASE語句提供完全不同的功能:它通常是SELECT子句的一部分 - 它本身不是一個單獨的條款 - 並用於以某種方式重新格式化您收到的輸出。因此,與一個case語句,你仍然會得到所有500行回來,但因爲他們在我的第一個例子您的結果不會看起來是一樣的:

-- third example: all rows, but color field is tweaked 
SELECT 
    name, 
    (CASE WHEN color = 'white' THEN 'white' ELSE 'other' END) AS tweaked_color, 
    size, 
    maker 
FROM shirts 
ORDER BY name; 

在我的第一個例子,你會看到各種在這第三個例子中,您將看到80行「白色」,420行「其他」,其中「白色」,「黑色」,「棕色」,「黃色」 。

希望能幫助我們弄清楚區別。

P.S.請注意,爲了清晰起見,我在示例中以一種不尋常的方式排列了空白。你如何排列空白對語法沒有任何影響。我還在CASE聲明中添加了一對不必要的括號,以幫助增加視覺清晰度;這些也通常會被省略。