MySQLのINSERT ... SELECT文でLIMIT句を使用して上位3件のレコードをテーブルに追加する

MySQLでは、INSERT ... SELECTを使用することで1つまたは複数のテーブルからレコードをテーブルに追加できます。
また、SELECTでLIMIT句とORDER BYを使用して上位n件のレコードのみテーブルに追加することもできます。


構文:
INSERT
INTO テーブル
[(カラム, ...)]
SELECT ...

追加前にORDER BYで指定した方法で並べ替えられ、LIMIT句で指定した行数のレコードが追加されます。

例えば、データベースtestのsalesテーブルに10件のレコードが格納されていて、priceの値が低い順に3件のレコードをjunkテーブルに追加する場合は以下のSQL文になります。

INSERT INTO test.junk (product,price) SELECT product,price FROM test.sales ORDER BY price Limit 3;

実際に実行してみると以下のような結果になります。

salesテーブルのデータ:

mysql> select * from test.sales order by price;
+----------+-------------+---------+----------+
| ordernum | product     | price   | quantity |
+----------+-------------+---------+----------+
|        3 | WII         |    4500 | 2        |
|        5 | PS3         |   10000 | 4        |
|        8 | G-SHOCK     |   12000 | 9        |
|        9 | EXILIM      |   14000 | 7        |
|        1 | PS4         |   20000 | 1        |
|        6 | COOLPIX     |   23000 | 1        |
|        7 | amazon fire |   25000 | 6        |
|       10 | GoPro       |   27000 | 3        |
|        4 | iPhone SE   |   50000 | 4        |
|        2 | iPhone 6    | 1000000 | 2        |
+----------+-------------+---------+----------+
10 rows in set (0.00 sec)

実行前のjunkテーブルのデータ:

mysql> select * from test.junk;
Empty set (0.00 sec)

INSERT ... SELECT文を実行:

mysql> INSERT INTO test.junk (product,price) SELECT product,price FROM test.sales ORDER BY price Limit 3;
Query OK, 3 rows affected (0.05 sec)
Records: 3 Duplicates: 0 Warnings: 0

実行後のjunkテーブルのデータ:

mysql> select * from test.junk;
+---------+-------+
| product | price |
+---------+-------+
| WII     |  4500 |
| PS3     | 10000 |
| G-SHOCK | 12000 |
+---------+-------+
3 rows in set (0.00 sec)

参考:
MySQL 5.6 リファレンスマニュアル INSERT ... SELECT 構文


[2591] Posted by kagahiro at 2016/09/30 15:29:37
オープン | 1 point | Link (3) | Trackback (1) | Comment (0)

キーワード

MySQL 上位n件 UPDATE SQL 

ジャパンのホームページ


MySQLのINSERT ... SELECT文でLIMIT句を使用して上位3件のレコードをテーブルに追加する 関連リンク

SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL)
「先頭からn件のレコード(結果セット)だけ取得する方法が知りたい。」というのは、データベース関連のメーリングなどで以前からよくある質問ですが、SQL ServerやOracle、MySQL、PostgreSQLなどRDBやバージョンによ...
MySQLのUPDATE文でLIMIT句を使用して上位3件のレコードを更新する
MySQLでは、UPDATEでLIMIT句とORDER BYを使用して上位n件のレコードを更新することができます。更新前にORDER BYで指定した方法で並べ替えられ(ASCは昇順、DESCは降順、省略した場合は昇順)、LIMIT句で指定した行数...
MySQLのDELETE文でLIMIT句を使用して上位3件のレコードを削除する
MySQLでは、DELETE文でLIMIT句とORDER BYを使用して上位n件のレコードを削除することができます。

削除前にORDER BYで指定した方法で並べ替えられ(ASCは昇順、DESCは降順、省略した場合は昇順)、LI...

MySQLのINSERT ... SELECT文でLIMIT句を使用して上位3件のレコードをテーブルに追加する トラックバック

トラックバックURL :

Linked from ネット掲示板 - ゴクBBS : SQL質問スレ at 2016/09/30 15:35:54
このスレでは「こういうことをやりたいんだけどSQLでどう書くの?」「こういうSQLを書いたんだけどうまく動きません><」といった質問を受け付けています。SQLはISOによって標準化されていますが、標準を100%実装し...

MySQLのINSERT ... SELECT文でLIMIT句を使用して上位3件のレコードをテーブルに追加するへのコメント


詳細の入力フィールドを表示する

おすすめ  (チェックしてコメントすると最新情報に掲載)
コメント :

< 前の投稿      次の投稿 >

アクセスランキング

今日のアクセスランキング TOP 10

  1. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (4 PV)
  2. Google News (グーグルニュース)日本版 (2 PV)
  3. ウェブページを1回だけリロード(再表示)する方法 (1 PV)
  4. 2ch名人 羽生善治「コンピュータ将棋の斬新な思考を取り入れ将棋の幅が広がる。一方で培った美意識が崩れる」 (1 PV)
  5. PHPでMySQLに接続して、SELECTでデータを取得するサンプルプログラム (1 PV)
  6. ChatWor(チャットワーク)- コミュニケーションツール (1 PV)
  7. 「xVideoServiceThief」無料の動画ダウンロードツール (1 PV)
  8. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (1 PV)
  9. [将棋]NHK杯3回戦第1局、増田康宏四段が得意の雁木で郷田真隆九段の矢倉に負ける (1 PV)
  10. 動画ダウンロード保存.com (1 PV)

今月のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (2241 PV)
  2. Google News (グーグルニュース)日本版 (176 PV)
  3. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (176 PV)
  4. Tumblr(タンブラー)のダッシュボードからおすすめ投稿を消す(非表示にする)方法 (175 PV)
  5. グーグルニュース(Google News)日本版が表示できるURL (170 PV)
  6. 最新のGoogle News(グーグルニュース)日本版のRSSが取得できるURL (168 PV)
  7. [Perl]UTF-8でエンコードされた文字列の文字数を取得するコード (167 PV)
  8. Google Finance(グーグルファイナンス)- リアルタイム株価情報、金融ニュース、日本株 (139 PV)
  9. USTREAM(ユーストリーム) 日本語版 無料のライブ映像配信サービス (115 PV)
  10. ウェブページを1回だけリロード(再表示)する方法 (90 PV)

アクセス統計

ディレクトリ

関連サイト