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

MySQLで列を動的に選択する方法【PREPARE文の活用】

MySQLで列を動的に選択する方法

MySQLで列を動的に選択するには、まず実行したいクエリ(準備するステートメント)を作成し、その後PREPARE文を使って準備・実行します。本記事では、サンプルテーブルを使いながら、動的クエリの作成から実行までの手順をわかりやすく解説します。

1. サンプルテーブルを作成する

まず、CREATE TABLE文でテーブルを作成しましょう。

mysql> create table DemoTable
(
    EmployeeName varchar(100)
);
Query OK, 0 rows affected (0.77 sec)

2. レコードを挿入する

次に、INSERTコマンドを使ってテーブルにデータを追加します。

mysql> insert into DemoTable values('John Doe');
Query OK, 1 row affected (0.18 sec)

3. テーブルの全レコードを表示する

SELECT文でテーブル内のすべてのレコードを確認してみましょう。

mysql> select *from DemoTable;

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

+--------------+
| EmployeeName |
+--------------+
| John Doe     |
+--------------+
1 row in set (0.00 sec)

4. 列を動的に選択してクエリを実行する

それでは本題です。SET文とCONCAT関数を組み合わせてクエリ文字列を動的に生成し、ユーザー変数に格納します。

mysql> set @dynamicQuery=CONCAT("SELECT ", (SELECT "EmployeeName from DemoTable"));
Query OK, 0 rows affected (0.00 sec)
mysql> select @dynamicQuery;
+---------------------------------------+
| @dynamicQuery                         |
+---------------------------------------+
| SELECT EmployeeName from DemoTable    |
+---------------------------------------+
1 row in set (0.00 sec)

変数に格納されたクエリ文字列を、PREPARE文で準備し、EXECUTE文で実行します。

mysql> prepare myStatement from @dynamicQuery;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> execute myStatement;

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

+--------------+
| EmployeeName |
+--------------+
| John Doe     |
+--------------+
1 row in set (0.00 sec)

まとめ

このように、CONCAT関数で動的なSQL文を文字列として組み立て、PREPARE文で準備してからEXECUTE文で実行することで、MySQLでも列名やテーブル名を動的に指定したクエリを実行できます。実行時に取得する列を切り替えたい場合などに役立つテクニックなので、ぜひ活用してみてください。

  1. MySQLの列に先頭ゼロ(0埋め)を追加する方法

    MySQLで列の値に先頭ゼロ(0埋め)を追加するには、LPAD()関数を使用します。LPAD()は、文字列の左側に指定した文字を詰め、指定した全長まで引き伸ばすための関数です。 LPAD()関数の基本構文 LPAD(対象文字列, 全体の長さ, 埋め込み文字) 第1引数に対象となる列や文字列、第2引数に揃えたい合計桁数、第3引数に埋め込む文字(今回は「0」)を指定します。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable ( Code varchar(100) ); Query OK, 0 rows a

  2. MySQLで列(カラム)を分割する方法!SUBSTRING_INDEX関数の使い方を徹底解説

    MySQLで列を分割するには?SUBSTRING_INDEX関数の基本MySQLで1つの列に格納された文字列を区切り文字で分割したい場合、SUBSTRING_INDEX()関数を使用します。この記事では、アンダースコア(_)で区切られた氏名データを分割する具体例を通じて、その使い方をわかりやすく解説します。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable -> ( -> Name varchar(40) -> );Query OK, 0 rows affected (1.