列と列の文字列を結合して表示しよう!SQL超初心者の勉強

SELECT文でデータを表示する際にカラムAとBを結合させて出したい時があります。

わかりやすく例えるならば、タイトルが「魔女の宅急便」サブタイトルが「キキ初めての配達」だとしてSELECT文で表示させる時は「魔女の宅急便 ~キキ初めての配達~」としたい時です。

そんな時の書き方について学んでいきたいと思います。

動作環境

SQL FIDDLEでMySQL5.6、PostgreSQL9.6で動作確認しています。

準備

以下のテーブルを使用し解説します。

itemidtittleepisode
1アンナチュラル第1話
2アンナチュラル第2話
3アンナチュラル第3話
4アンナチュラル(null)

テーブルを作成するコードです。

-- CREATE文
CREATE TABLE item (
ItemID numeric(8, 0) unique not null,
Tittle character varying (20) not null,
episode character varying (20),
primary key(ItemID)
);
-- INSERT文
insert into item
values(0001, 'アンナチュラル', '第1話'),
(0002, 'アンナチュラル', '第2話'),
(0003, 'アンナチュラル', '第3話'),
(0004, 'アンナチュラル', null)

それでは文字列の結合をしてみましょう。

「 || 」を使って文字結合

「 || 」を使って文字を結合してみます。

SELECT
Tittle || episode as タイトル
FROM
item

■ 結果

タイトル
アンナチュラル第1話
アンナチュラル第2話
アンナチュラル第3話
(null)

※ 連結要素にNullが含まれる場合、表示結果はnull になります。

「 || 」を使って文字結合(間にスペース)

上記方法だと間にスペースがなく少し窮屈なのでスペースを入れようと思います。

SELECT
Tittle || ' ' || episode as タイトル
FROM
item

■ 結果

タイトル
アンナチュラル 第1話
アンナチュラル 第2話
アンナチュラル 第3話
(null)

||を利用して好きな文字を足すことができます。

concat()を使って文字結合

「 concat()」を使って文字を結合してみます。

SELECT
concat(Tittle, episode) as タイトル
FROM
item

■ 結果

タイトル
アンナチュラル第1話
アンナチュラル第2話
アンナチュラル第3話
アンナチュラル

※ 連結要素にNullが含まれる場合Nullを非表示

「 concat() 」を使って文字結合(間にスペース)

上記方法だと間にスペースがなく少し窮屈なのでスペースを入れようと思います。

SELECT
concat(Tittle,' ' , episode) as タイトル
FROM
item

■ 結果

タイトル
アンナチュラル 第1話
アンナチュラル 第2話
アンナチュラル 第3話
アンナチュラル

()内に好きな文字を入れることができます。

「 || 」と「concat()」の違い

書き方の違いはありますが、使い分け方の違いにNullによる挙動の違いがあるのが上記の例でわかると思います。

  • || の場合、連結要素にNullが含まれる場合Nullになります。
  • concat()の場合、連結要素にNullが含まれる場合Nullを非表示

おわり

2つの書き方を紹介しました。SELECT文で指定した文字を見やすくカスタマイズできて便利そうですね。