MySQLで列の値をシャッフルする方法【ORDER BY RAND()の使い方】
MySQLでテーブル内のレコード(列の値)をランダムに並べ替えたい場合は、ORDER BY RAND()を使用します。この記事では、実際にテーブルを作成し、データを挿入して、シャッフルの動作を手順ごとに確認していきましょう。
1. テーブルの作成
まず、以下のコマンドでサンプル用のテーブルを作成します。
mysql> create table DemoTable1557
-> (
-> SubjectId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> SubjectName varchar(20)
-> );
Query OK, 0 rows affected (0.91 sec)
2. レコードの挿入
次に、INSERTコマンドを使っていくつかのレコードを追加します。
mysql> insert into DemoTable1557(SubjectName) values('MySQL');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1557(SubjectName) values('MongoDB');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1557(SubjectName) values('Java');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1557(SubjectName) values('C');
Query OK, 1 row affected (0.13 sec)
3. 全レコードの表示
SELECT文でテーブル内のすべてのレコードを確認してみましょう。
mysql> select * from DemoTable1557;
実行すると、以下のように挿入順にレコードが表示されます。
+-----------+-------------+
| SubjectId | SubjectName |
+-----------+-------------+
| 1 | MySQL |
| 2 | MongoDB |
| 3 | Java |
| 4 | C |
+-----------+-------------+
4 rows in set (0.00 sec)
4. ORDER BY RAND()でレコードをシャッフル
MySQLでレコードをランダムにシャッフルするには、以下のクエリを実行します。
mysql> select * from DemoTable1557 order by rand();
実行結果は以下の通りです。レコードの順序がランダムに入れ替わっているのがわかります。
+-----------+-------------+
| SubjectId | SubjectName |
+-----------+-------------+
| 1 | MySQL |
| 3 | Java |
| 2 | MongoDB |
| 4 | C |
+-----------+-------------+
4 rows in set (0.00 sec)
注意点
RAND()はクエリを実行するたびに異なる乱数を返すため、実行するたびに表示順序が変わります。また、大規模なテーブルに対してORDER BY RAND()を使用すると、全行に対して乱数を計算・ソートするためパフォーマンスが低下する場合があります。件数の多いテーブルでは、LIMITと組み合わせるか、別の手法を検討することをおすすめします。
-
MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実
-
MySQLのAUTO_INCREMENTの使い方と実例解説
ここでは、MySQLにおける AUTO_INCREMENT の仕組みについて詳しく解説します。AUTO_INCREMENTとはAUTO_INCREMENT 属性は、新しい行に対して一意の識別子を自動的に生成するために使用されます。実際にどのように動作するのか、以下のクエリで確認してみましょう。サンプルクエリCREATE TABLE tableName ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO tableName (name