DB

SQLServerのUPDATE文でJOIN句とCASE式を使ってみた

SQL文の構文として、テーブル結合をするためのJOIN句や、条件分岐を表現するためのCASE式があるが、これらはSELECT文だけでなく、UPDATE文でも利用できる。

今回は、SQL Server上で、JOIN句とCASE式を含むSQL(SELECT文・UPDATE文)を実行してみたので、その結果を共有する。

前提条件

下記記事のように、A5M2を利用してSQL Serverに接続できていること。

A5M2を利用して各DBに接続してみたA5M2(A5:SQL Mk-2)は、SQL文の入力支援やER図作成などの機能を備えていて、Oracle、MySQL、PostgreSQ...

SQL Server上でJOIN句とCASE式を含むSQLの実行結果

SQL Server上でJOIN句とCASE式を含むSQL(SELECT文・UPDATE文)の実行結果は、以下の通り。

1) user_dataテーブル、m_sexテーブルのデータの内容は、以下の通り。

SELECT * FROM user_data
実行結果_1_1
SELECT * FROM m_sex
実行結果_1_2

2) user_dataテーブル、m_sexテーブルを結合し、CASE式を利用したSELECT文は、以下の通り。

SELECT 
     u.*
   , CASE 
     WHEN u.birth_month = 12 
       OR u.birth_month BETWEEN 1 AND 2
       THEN '冬生まれ:' + s.sex_value + '性'
     WHEN u.birth_month BETWEEN 3 AND 5
       THEN '春生まれ:' + s.sex_value + '性'
     WHEN u.birth_month BETWEEN 6 AND 8
       THEN '夏生まれ:' + s.sex_value + '性'
     WHEN u.birth_month BETWEEN 9 AND 11
       THEN '秋生まれ:' + s.sex_value + '性'
     ELSE
       '生年月日_月が不正'
     END AS memo_after
FROM user_data AS u 
    INNER JOIN m_sex AS s
        ON u.sex = s.sex_cd
ORDER BY u.id
実行結果_2

3) user_dataテーブル、m_sexテーブルを結合し、CASE式を利用したUPDATE文は、以下の通り。

UPDATE
   u
SET 
   u.memo = 
      CASE 
      WHEN u.birth_month = 12 
          OR u.birth_month BETWEEN 1 AND 2
        THEN N'冬生まれ:' + s.sex_value + N'性'
      WHEN u.birth_month BETWEEN 3 AND 5
        THEN N'春生まれ:' + s.sex_value + N'性'
      WHEN u.birth_month BETWEEN 6 AND 8
        THEN N'夏生まれ:' + s.sex_value + N'性'
      WHEN u.birth_month BETWEEN 9 AND 11
        THEN N'秋生まれ:' + s.sex_value + N'性'
      ELSE
        N'生年月日_月が不正'
      END
FROM user_data AS u
     INNER JOIN m_sex AS s
        ON u.sex = s.sex_cd
実行結果_3_1

以下の確認メッセージが表示されるので、「OK」ボタンを押下する。
実行結果_3_2

以下のように、左下に更新した件数が表示されることが確認できる。
実行結果_3_3

4)3)のUPDATE文実行後の、 user_dataテーブルの値は以下の通りで、SQLで記載通りの内容で更新されていることが確認できる。

SELECT * FROM user_data
実行結果_4

要点まとめ

  • SQL文の構文として、テーブル結合をするためのJOIN句や、条件分岐を表現するためのCASE式があるが、これらはSELECT文だけでなく、UPDATE文でも利用できる。