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