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

MySQLで一時変数に値を代入する方法|SETコマンドとSELECT INTOの使い方

MySQLでは、SETコマンドを使うことで、セッション内でのみ有効な一時変数(ユーザー定義変数)に値を代入できます。サブクエリの結果を変数に格納すれば、後続のクエリでその値を再利用でき、複雑な処理を段階的に組み立てる際に非常に便利です。

一時変数への代入構文

基本となる構文は以下のとおりです。SELECT文の結果をそのまま変数に代入できます。

SET @任意の変数名 = (SELECT カラム名 FROM テーブル名 WHERE 条件);

動作確認用テーブルの作成

それでは、実際にテーブルを作成して動作を確認してみましょう。まずは以下のクエリでテーブルを作成します。

mysql> create table tempVariableAssignment
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Name varchar(20),
    -> Age int
    -> );
Query OK, 0 rows affected (0.59 sec)

テストデータの挿入

次に、INSERT文を使ってレコードをいくつか登録します。

mysql> insert into tempVariableAssignment(Name,Age) values('John',25);
Query OK, 1 row affected (0.14 sec)
mysql> insert into tempVariableAssignment(Name,Age) values('Carol',26);
Query OK, 1 row affected (0.17 sec)
mysql> insert into tempVariableAssignment(Name,Age) values('Sam',28);
Query OK, 1 row affected (0.13 sec)
mysql> insert into tempVariableAssignment(Name,Age) values('David',19);
Query OK, 1 row affected (0.19 sec)
mysql> insert into tempVariableAssignment(Name,Age) values('Bob',23);
Query OK, 1 row affected (0.19 sec)

登録データの確認

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

mysql> select * from tempVariableAssignment;

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

+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
|  1 | John  |   25 |
|  2 | Carol |   26 |
|  3 | Sam   |   28 |
|  4 | David |   19 |
|  5 | Bob   |   23 |
+----+-------+------+
5 rows in set (0.00 sec)

SETコマンドで一時変数に代入する

ここからが本題です。Id=4のレコード(David)の年齢を、変数@findAgeに代入してみましょう。

mysql> set @findAge=(select Age from tempVariableAssignment where Id=4);
Query OK, 0 rows affected (0.02 sec)

代入された値を確認するには、以下のようにSELECT文で変数を参照します。

mysql> select @findAge;

実行結果:

+----------+
| @findAge |
+----------+
|       19 |
+----------+
1 row in set (0.01 sec)

このように、条件に一致したレコードの「Age」カラムの値である19が、変数@findAgeに正しく格納されていることがわかります。

代替方法:SELECT ... INTO を使う

SETコマンド以外にも、SELECT ... INTO構文を使って同じことが実現できます。

mysql> select Age INTO @anotherAge
-> from tempVariableAssignment where Id=4;
Query OK, 1 row affected (0.00 sec)

こちらも同様に、変数の中身を確認してみます。

mysql> select @anotherAge;

実行結果:

+-------------+
| @anotherAge |
+-------------+
|          19 |
+-------------+
1 row in set (0.00 sec)

まとめ

MySQLで一時変数に値を代入する方法は主に2つあります。

  • SETコマンドSET @変数名 = (SELECT ...); の形式で代入する
  • SELECT ... INTO構文SELECT カラム INTO @変数名 FROM ...; の形式で代入する

どちらの方法でも結果は同じですが、ユーザー定義変数はセッション単位で管理されるため、接続を切ると値は失われる点に注意してください。また、サブクエリが複数行を返す場合はエラーになるため、必ず1行だけ結果が返るような条件を指定することが重要です。

  1. MySQLでユーザー定義変数(数値)を使ってORDER BYを実行する方法

    MySQLでは、ユーザー定義変数とPREPARE文(プリペアドステートメント)を組み合わせることで、ORDER BYの条件を動的に指定できます。この記事では、数値型のユーザー定義変数を使用してORDER BYを実行する手順を、サンプルコード付きで詳しく解説します。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable1898 ( Number int ); Query OK, 0 rows affected (0.00 sec)2. レコードの挿入続いて、INSERTコマンドを使ってテーブ

  2. MySQLクエリの入力方法|基本ルールから複数行クエリまで解説

    MySQLクエリの入力方法コンソールでクエリを入力する前に、まずサーバーに正しく接続できているかを確認することが重要です。以下のクエリを実行すると、使用中のサーバーのバージョン番号と現在の日付が表示されます。mysql> SELECT VERSION(), CURRENT_DATE;ポイント:関数「VERSION()」や「CURRENT_DATE」は大文字・小文字を区別しません。つまり、「version()」「Version()」「vERsion()」など、いずれも同じ意味として処理されます。「CURRENT_DATE」についても同様です。MySQLクエリ実行時の基本ルールSQLクエリの