【MySQL】RAND()関数でランダムにデータを取得する方法(SQLクエリ)
SQLでランダムな行を取得する方法
ORDER BY RANDOM() を使用する
最も簡単な方法は、ORDER BY RANDOM()
を使用する方法です。これは、結果をランダムな順序で並べ替える関数です。
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
このクエリは、table
テーブルからランダムな1行を取得します。
別の方法は、OFFSET
と RAND()
を使用する方法です。RAND()
は、0から1までのランダムな数を生成する関数です。
SELECT * FROM table ORDER BY RAND() OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY;
TABLESAMPLE
は、テーブルからランダムなサンプルを取得する機能です。
SELECT * FROM table TABLESAMPLE SYSTEM (10 PERCENT);
サブクエリを使用して、ランダムな行を取得することもできます。
SELECT * FROM table
WHERE id IN (
SELECT id FROM table ORDER BY RAND() LIMIT 1
);
注意事項
ORDER BY RANDOM()
は、データ量が大きい場合にパフォーマンスが低下する可能性があります。OFFSET
とRAND()
を使用する場合、RAND()
の値が重複する可能性があります。TABLESAMPLE
は、すべてのデータベースでサポートされているわけではありません。
どの方法を使用するかは、データ量やパフォーマンスなどの要件によって異なります。
-- テーブル作成
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
-- データ挿入
INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');
INSERT INTO users (name, email) VALUES ('Jane Doe', '[email protected]');
INSERT INTO users (name, email) VALUES ('John Smith', '[email protected]');
-- ランダムな1行を取得
SELECT * FROM users ORDER BY RAND() LIMIT 1;
-- OFFSET と RAND() を使用してランダムな1行を取得
SELECT * FROM users ORDER BY RAND() OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY;
-- TABLESAMPLE を使用してランダムな1行を取得
SELECT * FROM users TABLESAMPLE SYSTEM (10 PERCENT);
-- サブクエリを使用してランダムな1行を取得
SELECT * FROM users
WHERE id IN (
SELECT id FROM users ORDER BY RAND() LIMIT 1
);
実行方法
このコードを実行するには、次の手順を実行します。
- MySQLなどのデータベースサーバーを起動します。
- 上記のコードをテキストファイルに保存します。
- データベースサーバーに接続し、テキストファイルをインポートします。
- SQL クエリを実行します。
結果
上記のコードを実行すると、users
テーブルからランダムな1行が取得されます。
上記はサンプルコードであり、実際の使用には適宜変更する必要があります。
SQLでランダムな行を取得するその他の方法
ROW_NUMBER()
関数は、各行に一意の番号を割り当てます。この番号を使用して、ランダムな行を取得できます。
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY RAND()) AS rn
FROM table
) AS t
WHERE rn = 1;
自作関数を使用する
CREATE FUNCTION random_row(table_name VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
DECLARE id INT;
SET id = FLOOR(RAND() * (SELECT COUNT(*) FROM table_name)) + 1;
RETURN (SELECT column_name FROM table_name WHERE id = id);
END;
SELECT random_row('table');
外部ツールを使用する
SQL Server Management Studio (SSMS) などの外部ツールを使用して、ランダムな行を取得することもできます。
- SSMS を起動します。
- データベースサーバーに接続します。
table
テーブルを右クリックします。- 新しいクエリ を選択します。
SELECT TOP 1 * FROM table ORDER BY NEWID();
上記の方法を使用するには、データベースサーバーと外部ツールの機能に精通している必要があります。
- データ量が小さい場合は、
ORDER BY RAND()
を使用するのが最も簡単です。 - データ量が大きい場合は、
ROW_NUMBER()
やTABLESAMPLE
を使用するとパフォーマンスが向上します。 - 独自の要件がある場合は、自作関数を使用することができます。
sql random