MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

SQLで2つ以上のフィールドを連結する方法|CONCAT()とCONCAT_WS()の使い方

SQLで2つ以上のフィールドを連結する方法

SQLで3つ以上のカラム(フィールド)を1つの文字列につなげたい場合、MySQLでは CONCAT() 関数か CONCAT_WS() 関数を使用します。まずは基本となる構文から見ていきましょう。

CONCAT() を使う場合の構文

CONCAT() の引数にカラムを並べ、その間に区切り文字として「/」などを指定します。

SELECT CONCAT(カラム名1,'/',カラム名2,'/',カラム名3,'/',......N) AS 任意の別名 FROM テーブル名;

CONCAT_WS() を使う場合の構文

CONCAT_WS() は第1引数に区切り文字を一度だけ指定できるため、すべてのカラム間に同じ区切り文字を入れたい場合、コードがすっきりして読みやすくなります。

SELECT CONCAT_WS('/',カラム名1,カラム名2,......N) AS 任意の別名 FROM テーブル名;

検証用テーブルを作成する

それでは、実際に動きを確認するためのサンプルテーブルを作成してみましょう。

mysql> create table MoreThan2ColumnConcat
-> (
-> Id int,
-> Name varchar(20),
-> Age int,
-> Marks int
-> );
Query OK, 0 rows affected (2.59 sec)

テストデータを挿入する

INSERT文でいくつかレコードを追加します。

mysql> insert into MoreThan2ColumnConcat values(1,'John',24,89);
Query OK, 1 row affected (0.17 sec)
mysql> insert into MoreThan2ColumnConcat values(11,'Larry',25,90);
Query OK, 1 row affected (0.21 sec)
mysql> insert into MoreThan2ColumnConcat values(15,'Mike',26,79);
Query OK, 1 row affected (0.13 sec)
mysql> insert into MoreThan2ColumnConcat values(16,'Sam',21,99);
Query OK, 1 row affected (0.14 sec)

登録されたデータを確認する

SELECT文で全レコードを表示してみます。

mysql> select *from MoreThan2ColumnConcat;

実行結果は以下の通りです。

+------+-------+------+-------+
| Id | Name | Age | Marks |
+------+-------+------+-------+
| 1 | John | 24 | 89 |
| 11 | Larry | 25 | 90 |
| 15 | Mike | 26 | 79 |
| 16 | Sam | 21 | 99 |
+------+-------+------+-------+
4 rows in set (0.00 sec)

CONCAT() で4つのフィールドを連結する

Id、Name、Age、Marks の4つのカラムを、区切り文字「/」で連結するクエリです。

mysql> select concat(Id,'/',Name, '/',Age, '/',Marks) as ConcatMoreFields from MoreThan2ColumnConcat;

実行結果:

+------------------+
| ConcatMoreFields |
+------------------+
| 1/John/24/89 |
| 11/Larry/25/90 |
| 15/Mike/26/79 |
| 16/Sam/21/99 |
+------------------+
4 rows in set (0.00 sec)

CONCAT_WS() で4つのフィールドを連結する

続いて、CONCAT_WS() を使った場合です。区切り文字は先頭に一度指定するだけで済みます。

mysql> select concat_ws('/',Id,Name,Age,Marks) as ConcatMoreFields from MoreThan2ColumnConcat;

実行結果:

+------------------+
| ConcatMoreFields |
+------------------+
| 1/John/24/89 |
| 11/Larry/25/90 |
| 15/Mike/26/79 |
| 16/Sam/21/99 |
+------------------+
4 rows in set (0.00 sec)

CONCAT() と CONCAT_WS() の違いに注意

どちらも同じ結果になりますが、NULLの扱いが異なる点に注意が必要です。

  • CONCAT():引数の中に1つでもNULLが含まれていると、結果全体がNULLになります。
  • CONCAT_WS():NULLの引数はスキップされ、残りの値だけで連結されます(ただし区切り文字自体がNULLの場合はNULLを返します)。

NULLが含まれる可能性のあるカラムを扱う場合は、CONCAT_WS() を使うか、IFNULL() などでNULLを別の値に置き換えておくと安全です。

  1. Pythonで3つ以上のPandas DataFrameを連結する方法|concat()の使い方を徹底解説

    Pythonで複数のPandas DataFrameを連結するには? 2つ以上のPandas DataFrameを連結(結合)するには、concat()メソッドを使用します。この記事では、3つのDataFrameを実際に作成し、それらを1つにまとめるまでの手順を、サンプルコードと実行結果つきでわかりやすく解説します。 手順1:ライブラリをインポートする まず、必要なライブラリであるPandasをインポートします。 import pandas as pd 手順2:1つ目のDataFrameを作成する dataFrame1 = pd.DataFrame( { Col1: [

  2. Pythonのタプルを使ってSQLのIN句クエリを安全に作成する方法

    はじめにPythonからデータベースへクエリを実行する際、IN句に複数の値を渡したいケースはよくあります。このとき、値を文字列として直接埋め込むとSQLインジェクションなどのセキュリティリスクが生じるため、プレースホルダー(パラメーターマーク)を使用して適切にエスケープされた状態でクエリを実行することが重要です。本記事では、Pythonのタプルを活用して、安全かつ効率的にIN句付きのSQLクエリを組み立てる方法を解説します。基本的な実装方法ポイントは、タプルの要素数に合わせてプレースホルダー「?」を自動的に生成することです。以下のコードでは、タプルの長さに応じてカンマ区切りのプレースホルダー文