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テーブルのデータの内容は、以下の通り。
1 | SELECT * FROM user_data |
1 | SELECT * FROM m_sex |
2) user_dataテーブル、m_sexテーブルを結合し、CASE式を利用したSELECT文は、以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 |
3) user_dataテーブル、m_sexテーブルを結合し、CASE式を利用したUPDATE文は、以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 |
以下の確認メッセージが表示されるので、「OK」ボタンを押下する。
以下のように、左下に更新した件数が表示されることが確認できる。
4)3)のUPDATE文実行後の、 user_dataテーブルの値は以下の通りで、SQLで記載通りの内容で更新されていることが確認できる。
1 | SELECT * FROM user_data |
要点まとめ
- SQL文の構文として、テーブル結合をするためのJOIN句や、条件分岐を表現するためのCASE式があるが、これらはSELECT文だけでなく、UPDATE文でも利用できる。