MySQLのCONCATは文字列などを結合させる際にとても便利なコマンドです。SELECTステートメントを使用することができるのであれば、ぜひ覚えておきたい機能ですね。そこで今回の記事では、MySQLのCONCATの主な機能をご紹介しつつ、実際に使用する方法をハンズオンで体験していきましょう。
- MySQLのCONCATは、文字列やカラムを結合させるコマンド
- MySQLを使ったCONCATのハンズオン
MySQL CONCATとは
MySQLのCONCATは、指定した文字列や数値、カラムなどを結合させて表示する機能を持っています。SELECTステートメントでは、複数のカラムに分かれたデータを分けて表示することしかできません。そこで、CONCATを使用することで1つのマスに指定した文字列や数値、カラムを結合させた結果を表示させることができるのです。
MySQL CONCATの構文を以下で見てみましょう。
文字列を結合させる場合のコマンド
SELECT CONCAT(‘文字列1’, ‘文字列2’, ‘文字列3’, ...);
文字列を結合させる場合のコマンド
SELECT CONCAT(数値1, 数値2, 数値3, ...);
カラムを結合させる場合のコマンド
SELECT CONCAT(カラム1, カラム2, カラム3, ...) FROM テーブル名;
基本的には、「SELECT CONCAT」の後に結合させたい文字列や数値、カラムを指定することで、指定したデータを結合させた結果が表示できます。
結合させた際、指定した文字列やカラム内に「NULL」が含まれている場合には、結果が「NULL」となってしまいます。もし「NULL」を含む文字列・カラムをCONCATで結合させるのであれば、注意しておきましょう。
MySQL CONCATを使用した例
MySQL CONCATを使用した例を以下にご紹介していきましょう。
文字列・数値の結合
文字列・数値の結合を見ていきます。
CONCATを含むSELECTステートメント
SELECT CONCAT('このコラム', 'では', 'MySQLの', 'CONCATについて', '学びます。');
出力結果
+------------------------------------------------------------------------------------------+ | CONCAT('このコラム', 'では', 'MySQLの', 'CONCATについて', '学びます。') | +------------------------------------------------------------------------------------------+ | このコラムではMySQLのCONCATについて学びます。 | +------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
上記では、文字列を結合させることができました。次に数値の結合を試してみましょう。
CONCATを含むSELECTステートメント
SELECT CONCAT(1, 2, 3);
出力結果
+-----------------+ | CONCAT(1, 2, 3) | +-----------------+ | 123 | +-----------------+ 1 row in set (0.00 sec)
結合させる際の文字列と数値の違いは、「’(シングルクォーテーション)」の有無です。文字列・数値の扱いに気をつけましょう。
カラム内のデータ結合
次にカラム内のデータ結合を見ていきます。
以下のようなテーブルがある前提で説明を進めます。
animalsテーブル
+---------+-------+------+ | animal | name | age | +---------+-------+------+ | cat | Tom | 5 | | dog | Pochi | 8 | | tiger | Shima | 10 | | bird | Piyo | 9 | | lion | Gao | 17 | | hamster | Jiro | 3 | +---------+-------+------+
上記のテーブルのanimalカラムとnameカラムを結合させて出力してみましょう。
CONCATを含むSELECTステートメント
SELECT CONCAT(animal, name) FROM animals;
出力結果
+———————-+ | CONCAT(animal, name) | +———————-+ | catTom | | dogPochi | | tigerShima | | birdPiyo | | lionGao | | hamsterJiro | +———————-+ 6 rows in set (0.00 sec)
上記のように、CONCATを使えば別のカラムのデータ同士を結合させることも可能です。
【関連記事】
▶︎【初心者から一歩先へ】MySQLのWHERE BETWEEN句で範囲検索!
▶︎【テーブル編集】MySQLのALTER TABLEの使い方まとめ
MySQLでCONCATハンズオンにトライ
こちらでは、実際にMySQLというデータベースを使用してCONCATを使ってみましょう。
準備
まずはMySQLを使用するための準備をしていきます。
MySQLのインストール・接続
まだMySQLをインストールしていない場合は、インストールしましょう。
$ brew install mysql
MySQLのインストールが終了したら、接続します。
$ sudo mysql -u root -p
データベースの作成
次にデータベースをMySQL上に作成し、使用するデータベースを指定しましょう。
mysql> CREATE DATABASE potepan; Query OK, 1 row affected (0.00 sec) mysql> USE potepan;
これでMySQLを使用する準備は完了しました。
ベースとなるテーブルの作成
次にベースとなるテーブルを作成しましょう。
mysql> CREATE TABLE students(familyName VARCHAR(50), firstName VARCHAR(50), bornYear INT, bornMonth INT, bornDay INT); Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO students VALUES('Tanaka', 'Taro', 2007, 12, 20),('Hamano', 'Yoko', 2001, 01, 12),('Tada', 'Tsuyoshi', 2004, 05, 04),('Kotani', 'Saeko', 1996, 11, 28),('Rokuta', 'Hajime', 2010, 10, 23),('Sato', 'Yuka', 1993, 06, 18); Query OK, 6 rows affected (0.01 sec)
テーブルの状態
mysql> SELECT * FROM students; +------------+-----------+----------+-----------+---------+ | familyName | firstName | bornYear | bornMonth | bornDay | +------------+-----------+----------+-----------+---------+ | Tanaka | Taro | 2007 | 12 | 20 | | Hamano | Yoko | 2001 | 1 | 12 | | Tada | Tsuyoshi | 2004 | 5 | 4 | | Kotani | Saeko | 1996 | 11 | 28 | | Rokuta | Hajime | 2010 | 10 | 23 | | Sato | Yuka | 1993 | 6 | 18 | +------------+-----------+----------+-----------+---------+ 6 rows in set (0.00 sec)
MySQL CONCATで2つのカラムを結合
まずはCONCATを使って2つのカラムを結合させてみましょう。
CONCATを含むSELECTステートメント
mysql> SELECT CONCAT(familyName, firstName) FROM students;
出力結果
+-------------------------------+ | CONCAT(familyName, firstName) | +-------------------------------+ | TanakaTaro | | HamanoYoko | | TadaTsuyoshi | | KotaniSaeko | | RokutaHajime | | SatoYuka | +-------------------------------+ 6 rows in set (0.00 sec)
このように「familyName」カラムと「firstName」カラムを結合させることができました。
MySQL CONCATで3つのカラムを結合
次にCONCATを使って3つのカラムを結合させてみましょう。ただし今回は、カラムの間に文字列を挟んでみます。
CONCATを含むSELECTステートメント
mysql> SELECT CONCAT(bornYear, '-', bornMonth, '-', bornDay) FROM students;
出力結果
+------------------------------------------------+ | CONCAT(bornYear, '-', bornMonth, '-', bornDay) | +------------------------------------------------+ | 2007-12-20 | | 2001-1-12 | | 2004-5-4 | | 1996-11-28 | | 2010-10-23 | | 1993-6-18 | +------------------------------------------------+ 6 rows in set (0.01 sec)
3つのカラム「bornYear」「bornMonth」「bornDay」の間に「-(ハイフン)」を挟むことができました。
MySQL CONCATで3つのカラムを結合し、比較演算子を使って結果を抽出
先ほどの応用で「bornYear」「bornMonth」「bornDay」を結合させ、比較演算子の使用でさらに結果を抽出してみましょう。
CONCATを含むSELECTステートメント
mysql> SELECT * FROM students WHERE CONCAT(bornYear, bornMonth, bornDay) > 20050101;
出力結果
+------------+-----------+----------+-----------+---------+ | familyName | firstName | bornYear | bornMonth | bornDay | +------------+-----------+----------+-----------+---------+ | Tanaka | Taro | 2007 | 12 | 20 | | Rokuta | Hajime | 2010 | 10 | 23 | +------------+-----------+----------+-----------+---------+ 2 rows in set (0.01 sec)
上記のSELECTステートメントでは、「bornYear」「bornMonth」「bornDay」を結合させた結果が「20050101」より大きい数値のレコードのみを抽出しました。
CONCATはWHEREのあとの条件などでも使用することができるということを覚えておきましょう。
まとめ
今回の記事では、MySQL CONCATの主な機能をご紹介しつつ、実際に使用する方法をハンズオンで体験していきました。使ってみると非常に簡単なCONCATですが、2つのカラムを結合させたい時などにとても便利です。ぜひ、活用していきましょう。
【関連記事】
▶︎MySQLのcreate tableサンプルコード集 カラム定義を自動出力する方法は?
▶︎MySQL初心者にマスターしてほしいコマンドラインからの使用方法