2017-03-28 9 views
1

変数 'name'を含む 'neighbors'という名前のテーブルがあり、名前を選択し、CASE文を使用して2番目の変数 'age'に値を割り当てるとします。 1はSQLでのCASEステートメントに使用できる構文は、2つの異なる形式をとります。SQLクエリでCASE文を実行

1)単純CASE式:​​

CASE name 
     WHEN 'George' THEN 36 
     WHEN 'Alfred' THEN 40 
     ELSE null 
    END as age 

2)検索CASE式:​​

CASE 
     WHEN name = 'George' THEN 36 
     WHEN name = 'Alfred' THEN 40 
     ELSE null  
    END as age 

二つの文があります同じことをやっている。私の質問は、これらのステートメントはどのようにメモリ内で扱われるのでしょうか?彼らは同じように扱われているのでしょうか、あるいはどちらか一方よりも効率的かもしれませんか?

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql

+1

どちらCASE表現のように複数の条件を評価することができます第二の方法わからない私は@JohnHCの修正に応じて構文を編集し、有効なT-SQL –

+0

です。質問は立っている。 –

答えて

1

正しい構文は、後者の利点は、複数の列を評価することを可能にすることである

CASE name 
    WHEN 'George' THEN 36 
    WHEN 'Alfred' THEN 40 
    ELSE null 
END as age 

又は

CASE 
    WHEN name = 'George' THEN 36 
    WHEN name = 'Alfred' THEN 40 
    ELSE null 
END as age 

のいずれかである:

CASE 
    WHEN name = 'George' and OtherColumn = 'Stuff' THEN 36 
    WHEN 'Alfred' THEN 40 
    ELSE null 
END as age 
+0

オリジナルの投稿を編集して、入力した正しい構文を使用しました。しかし、私の質問は残っています。 –

+0

@silent_specこのような単純なケースではパフォーマンス面で違いはありません。より複雑なシナリオについては、[here](https://sqlperformance.com/2014/06/t-sql-queries/dirty-secrets-of-the-case-expression)をお読みください – JohnHC

+0

検索されたcase式は 'name 'を2回メモリに書き込むのに対し、シンプルなケースの式は1回だけ読み込みます。 'name'が大きければ、列がメモリに読み込まれる方法/時間によってパフォーマンスの差が生じる可能性があります。それは私が把握しようとしているものです。 –

0

は、メモリ内の表現やパフォーマンスが、あなたは

case 
    when condition1 and (condition2 or condition3) then blah 
    else blah blah 
end