[date:20160930]の検索結果
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 構文
また、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 構文
MySQLでは、UPDATEでLIMIT句とORDER BYを使用して上位n件のレコードを更新することができます。
更新前にORDER BYで指定した方法で並べ替えられ(ASCは昇順、DESCは降順、省略した場合は昇順)、LIMIT句で指定した行数のレコードが更新されます。
構文:
UPDATE テーブル
SET カラム1={expr1|DEFAULT} [, カラム2={expr2|DEFAULT}] ...
[WHERE 条件]
ORDER BY カラム [ASC | DESC]
LIMIT 行数;
例えば、データベースtestのsalesテーブルに10件のレコードが格納されていて、priceの値が低い順に3件のレコードのquantityに1を加算する場合は以下のSQL文になります。
UPDATE test.sales SET quantity = quantity + 1 ORDER BY price LIMIT 3;
実際に実行してみると以下のような結果になります。
更新前のデータ:
mysql> select * from test.sales order by price;
+----------+-------------+---------+----------+
| ordernum | product | price | quantity |
+----------+-------------+---------+----------+
| 3 | WII | 4500 | 1 |
| 5 | PS3 | 10000 | 3 |
| 8 | G-SHOCK | 12000 | 8 |
| 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)
strong>UPDATE文を実行:
mysql> UPDATE test.sales SET quantity = quantity + 1 ORDER BY price LIMIT 3;
Query OK, 3 rows affected (0.03 sec)
Rows matched: 3 Changed: 3 Warnings: 0
更新後のデータ:
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)
上位3件のレコードだけquantityが1加算されていることがわかると思います。
参考:
MySQLリファレンスマニュアル 13.2.11 UPDATE 構文
更新前にORDER BYで指定した方法で並べ替えられ(ASCは昇順、DESCは降順、省略した場合は昇順)、LIMIT句で指定した行数のレコードが更新されます。
構文:
UPDATE テーブル
SET カラム1={expr1|DEFAULT} [, カラム2={expr2|DEFAULT}] ...
[WHERE 条件]
ORDER BY カラム [ASC | DESC]
LIMIT 行数;
例えば、データベースtestのsalesテーブルに10件のレコードが格納されていて、priceの値が低い順に3件のレコードのquantityに1を加算する場合は以下のSQL文になります。
UPDATE test.sales SET quantity = quantity + 1 ORDER BY price LIMIT 3;
実際に実行してみると以下のような結果になります。
更新前のデータ:
mysql> select * from test.sales order by price;
+----------+-------------+---------+----------+
| ordernum | product | price | quantity |
+----------+-------------+---------+----------+
| 3 | WII | 4500 | 1 |
| 5 | PS3 | 10000 | 3 |
| 8 | G-SHOCK | 12000 | 8 |
| 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)
strong>UPDATE文を実行:
mysql> UPDATE test.sales SET quantity = quantity + 1 ORDER BY price LIMIT 3;
Query OK, 3 rows affected (0.03 sec)
Rows matched: 3 Changed: 3 Warnings: 0
更新後のデータ:
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)
上位3件のレコードだけquantityが1加算されていることがわかると思います。
参考:
MySQLリファレンスマニュアル 13.2.11 UPDATE 構文
1
アクセスランキング
今日のアクセスランキング TOP 10
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (12 PV)
- 仲値トレードが簡単にできる無料EA「NAKANE3」 #MT4 (6 PV)
- 無料掲示板CGIのダウンロード (5 PV)
- [gcc]iconvで文字エンコードを変換するサンプルプログラム (4 PV)
- 2NN 2ちゃんねるニュース速報+ナビ (4 PV)
- SQLiteのSELECT文で上位 (TOP) n件のデータを取得する (4 PV)
- 究極の爆益ゴールドナンピンマーチンEA「Extreme(エクストリーム)」 MT4向け (3 PV)
- Google News (グーグルニュース)日本版 (3 PV)
- StartPage(スタートページ) - 匿名検索エンジン (2 PV)
- [Perl]UTF-8でエンコードされた英数字の全角半角変換を行うコード (2 PV)
今月のアクセスランキング TOP 10
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (134 PV)
- 仲値トレードが簡単にできる無料EA「NAKANE3」 #MT4 (90 PV)
- 無料掲示板CGIのダウンロード (53 PV)
- [PR]noteで販売している自作EAの一覧 (51 PV)
- Google News (グーグルニュース)日本版 (46 PV)
- 2NN 2ちゃんねるニュース速報+ナビ (45 PV)
- [FX]高値更新・安値更新でエントリー、MT4向け無料スキャルピングEA「1Scalper」#システムトレード (43 PV)
- 自作のMT4向け無料EA(口座縛り無し、ブローカー縛り無し、使用期限無し)とゴゴジャン出品中の有料EAの一覧 #MT4 (35 PV)
- 究極の爆益ゴールドナンピンマーチンEA「Extreme(エクストリーム)」 MT4向け (35 PV)
- MT4向け1ポジブレイクアウトEA「HEADLINE」オープンソースライセンス(GPL3)で公開 #USDJPY (32 PV)
アクセス統計
ディレクトリ
関連サイト