前回記事:MySQLでインデックスの追加・確認・削除を行う方法ではMySQLにおけるインデックスの追加・削除方法についてご紹介しました。今回は、MySQLで使用可能な文字列結合の方法についてご紹介したいと思います。
目次
1.1 「CONCAT」で結合する場合の基本構文
1.2 実行例と実行結果
1.3 「CONCAT」でNULLを扱う際の欠点と対策方法
1.4 「IFNULL」の使用方法
1.CONCATで結合する
1.1 「CONCAT」で結合する場合の基本構文
MySQLで文字列を結合する場合は、基本的に「CONCAT」を使用します。
CONCAT ([文字列1], [文字列2], [文字列3],...)
このように、カンマで区切ることで繋げたい文字列を複数並べることができます。
このCONCATは、色々なSQLの中で使用することができます。例えばSELECT文の中で使用する場合、カラム名を指定することも可能です。
SELECT CONCAT ([カラム1], [カラム2], [カラム3],...) FROM [テーブル名];
1.2 実行例と実行結果
例として、データベース名「db_01」にある「USER_DATA」というテーブルに対して、「ユーザID」と「ユーザ名」を結合して出力するSQLを実行してみます。
SELECT CONCAT (USER_ID, USER_NAME) FROM db_01.USER_DATA;
さらにCONCATは、通常のカラムと並べて出力することもできます。
SELECT CONCAT (USER_ID, USER_NAME), USER_ADD FROM db_01.USER_DATA;
また、次のようにカラムの指定と文字列の直接入力を取り混ぜることも可能です。
SELECT CONCAT(USER_NAME, 'の住所は、', USER_ADD, 'です。') FROM db_01.USER_DATA;
1.3 「CONCAT」でNULLを扱う際の欠点と対策方法
CONCATで連結したカラムの中に一つでもNULLが含まれていると、結果は全てNULLになってしまいます。例えば次のように「USER_ADD」がNULLとなっているユーザCのデータについては、「USER_ID」や「USER_NAME」にどんな値が入っていたとしても、常に結果はNULLとなります。
連結対象にNULLが含まれている場合も結果をNULLにしてしまわずにNULL以外の部分を連結して出力したいという場合は、「IFNULL」を使用することで解決することができます。
1.4 「IFNULL」の使用方法
「IFNULL」は、2つの引数を渡し、1番目がNULLでなければ1番目の値を、1番目がNULLであれば2番目の値を返す関数です。なお共にNULLの場合は、NULLを返します。
IFNULL([値1], [値2])
これをCONCATに応用することで、NULLを空文字に変換して連結すると、次のようになります。
SELECT CONCAT (IFNULL(USER_ID, ''), IFNULL(USER_NAME, ''),
IFNULL(USER_ADD, '')) FROM db_01.USER_DATA;
このように、単にCONCATした場合はNULLになってしまったユーザCの行について、NULL以外の文字列は出力できるようになりました。
2.||(ダブルパイプ)演算子で結合する
2.1 デフォルトでは「||」での結合は不可能
「||(ダブルパイプ)」はOracleでよく見かける文字列結合の書式ですが、MySQLでは「||」は「OR」に相当するため、「CONCAT」としては使用することができません。
しかしどうしても移植の都合などでCONCATの代わりに「||」を使用したい場合は、使用することも可能です。
2.2 「||」を使えるようにするコマンド
MySQLで「||」をORではなくCONCATとして使用するためには、次のコマンドを入力します。
SET @@session.sql_mode='PIPES_AS_CONCAT';
SETコマンド実行後は、「||」は「OR」ではなく「CONCAT」と同じ結果を返すようになりました。
なおこのコマンドは、コマンドラインから入力しただけではMySQLを再起動すると無効になります。設定ファイル(my.iniなど)に記載しておくと、常時使用可能となります。
3.+(プラス)演算子で結合する
3.1 MySQLでは「+」での結合は不可能
「+」はSQL Serverで使用される書式ですが、現時点でMySQLで使う方法はないようです。移植や流用の際には、忘れずにCONCATに置き換えてご利用下さい。
4.まとめ
SQLはどれも同じように見えますが、今回ご紹介した文字列結合のようにRDBMSにより方言がいろいろと存在します。SQLの流用などの際には、忘れずにチェックしてみて下さい。
次回はSQLでも使用する機会の多いSELECT文について、基本の構文から便利な応用まで、詳しくご紹介したいと思います。
よければ合わせてご覧下さい。
当サイトプロエンジニアのコンサルタントが厳選したおすすめのフリーランス案件特集はこちら
特集ページから案件への応募も可能です!
実際にフリーランスエンジニアとして活躍されている方のインタビューはこちら