我真的不明白CASE WHEN和WHERE之间的区别,它们可以用来实现同样的东西吗?请有人澄清一下吗?
谢谢!
答案 0 :(得分: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 color ='white'”返回一组较小的(例如)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语句周围添加了一对不必要的括号,以帮助增加一些视觉清晰度;通常也会省略这些。