[SQL]の検索結果


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では、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 構文

[2590] Posted by kagahiro at 2016/09/30 11:43:12
1 point | Link (3) | Trackback (1) | Comment (0)

T-SQL (Transact-SQL) は、SybaseとMicrosoftがSQL Sserver用に、データの操作や定義を行うためのデータベース言語であるSQLに独自の拡張機能を追加したプログラミング言語で、制御フロー、局所変数、グローバル変数、文字列処理、データ処理、数値処理のため関数、カーソルなどが追加されている。

OracleのPL/SQL同様に独自機能を利用することでSQL標準との互換性は損なわれるものの、業務アプリケーションを作成する際に標準SQLではできないことも可能であるというメリットもある。

SQL Server 入門
Transact-SQL リファレンス (データベース エンジン)
SQL Server データベース エンジン

SQL Server 2012の教科書 開発編
ソシム 著者:松本 美穂,松本 崇博


amazon.co.jpのカスタマーレビューを見る
powered by amalink


[2554] Posted by kagahiro at 2016/05/13 11:53:32
0 point | Link (2) | Trackback (0) | Comment (0)

PL/SQL(ピーエル・エスキューエル)は、Oracle社が同社のデータベース製品であるOracle Databaseを使用するために、SQL(データの操作や定義を行うためのデータベース言語)を独自に拡張したプログラミング言語で、変...
[2553] Posted by kagahiro at 2016/05/13 11:52:32
0 point | Link (2) | Trackback (0) | Comment (0)

MySQLでは、DELETE文でLIMIT句とORDER BYを使用して上位n件のレコードを削除することができます。削除前にORDER BYで指定した方法で並べ替えられ(ASCは昇順、DESCは降順、省略した場合は昇順)、LIMIT句で指定した行...
[2552] Posted by kagahiro at 2016/05/12 11:11:37
1 point | Link (4) | Trackback (1) | Comment (0)

SQLiteのselect文でn件目〜m件目までのデータを取得する場合も、上位n件の場合と同様にLIMIT句を使用しますが、開始位置の指定が必要になります。データは開始位置で指定した値の次のレコードから取得されます。構文...
[2543] Posted by kagahiro at 2016/04/30 17:11:59
0 point | Link (3) | Trackback (0) | Comment (0)

SQLiteでは、AccessやMicrosoft SQL ServerのようにTOP句を使用して上位n件のデータを取得することはできません。SQLiteのSELECT文で上位n件のデータを取得する場合はLIMIT句を使用します。構文:SELECT カラム名, ....
[2542] Posted by kagahiro at 2016/04/30 16:43:14
1 point | Link (3) | Trackback (1) | Comment (0)

ウェブアプリケーション開発者必読の資料です。セキュリティの問題は奥が深い。「安全なウェブサイトの作り方」改訂第7版の内容・第1章では、「ウェブアプリケーションのセキュリティ実装」として、SQLインジェクショ...
[2505] Posted by kagahiro at 2015/04/04 17:56:01
0 point | Link (1) | Trackback (0) | Comment (0)

オープンソース掲示板ソフト「CommentPP 1.3」をリリースしました。1.2からの変更内容は不具合、脆弱性の修正とランキング表示の改善です。1.2以前のバージョンには脆弱性があるので、1.3へのバージョンアップをお願...
[2437] Posted by kagahiro at 2014/11/21 12:58:22
0 point | Link (1) | Trackback (0) | Comment (0)

2013年9月30日から2014年3月31日までの期間で実施されている、ミクシィならびにその子会社がリリースしたWebアプリケーションやクライアントアプリケーション、スマホアプリなどの未知の脆弱性を対象にした脆弱性報告...
[2360] Posted by kagahiro at 2014/01/24 00:16:41
0 point | Link (2) | Trackback (0) | Comment (0)

  1 2 3 4 5  次へ >


アクセスランキング

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

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (25 PV)
  2. [囲碁]若手トップ棋士「一力遼七段」がコンピュータ囲碁AIプログラムに惨敗 #人口知能 (8 PV)
  3. [食べ物]七草粥(ななくさがゆ) (5 PV)
  4. [将棋]佐藤康光九段が佐藤和俊六段を乱戦の末破り優勝、将棋界佐藤四天王最強であることを示す #NHK杯 (4 PV)
  5. [将棋]NHKトーナメントで佐藤康光九段がなめプ角頭歩戦法で佐藤天彦名人を撃破 (4 PV)
  6. [将棋]第42期棋王戦第5局で、渡辺明棋王が急戦矢倉の千田翔太六段に勝ちタイトル防衛 #棋王戦 (4 PV)
  7. [将棋]佐藤和俊六段がまさかの陽動居飛車で橋本崇載八段に勝ち決勝進出 #NHK杯 (3 PV)
  8. [企業]東芝、米原発子会社ウェスチングハウス(WH)の破産法申請へ (3 PV)
  9. フリーソフトウェア/オープンソースのタブー (3 PV)
  10. [経済]格安旅行業者「てるみくらぶ」が破産 #Yahoo!ニュース (2 PV)

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

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (3656 PV)
  2. [将棋]NHKトーナメントで佐藤康光九段がなめプ角頭歩戦法で佐藤天彦名人を撃破 (535 PV)
  3. ウェブページを1回だけリロード(再表示)する方法 (309 PV)
  4. [将棋]佐藤和俊六段がまさかの陽動居飛車で橋本崇載八段に勝ち決勝進出 #NHK杯 (197 PV)
  5. [食べ物]七草粥(ななくさがゆ) (191 PV)
  6. FC2動画やYouTubeなどから無料動画(映画やドラマ、アニメ、音楽など)を探す方法 (178 PV)
  7. フリーソフトウェア/オープンソースのタブー (166 PV)
  8. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (165 PV)
  9. [将棋]佐藤康光九段が佐藤和俊六段を乱戦の末破り優勝、将棋界佐藤四天王最強であることを示す #NHK杯 (153 PV)
  10. [将棋]竜王戦第三局は居飛車振り飛車の対向型で丸山忠久九段が勝利 #竜王戦 (152 PV)

アクセス統計

ディレクトリ

関連サイト