SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL)


「先頭からn件のレコード(結果セット)だけ取得する方法が知りたい。」というのは、データベース関連のメーリングなどで以前からよくある質問ですが、SQL ServerやOracle、MySQL、PostgreSQLなどRDBやバージョンによって利用可能な方法がそれぞれ異なるので簡単にまとめてみました。


Microsoft SQL Server 7.0 以降


Microsoft SQL Server 7.0 以降 では TOP が使用できるので、

SELECT TOP 10 *
FROM Table1
ORDER BY Field1

と記述することによって、先頭から上位10件の結果セットを取得することができます。

Oracle8i R8.1.5 以降


Oracle8i R8.1.5 以降ではサブクエリー内で ORDER BY が使用できるようになったので、例えば Field1 の昇順に上位10件を取得するような場合は、

SELECT *
FROM (SELECT * FROM Table1 ORDER BY Field1) A
WHERE ROWNUM <= 10;

と記述することによって、先頭から10件の結果セットを取得することができます。

MySQL


MySQLの場合は以下のようにLIMIT句を使用することで、指定した位置(先頭からの場合は0)から指定した件数のレコードを取得することができます。

SELECT * FROM Table1
ORDER BY Field1
LIMIT 0, 10;

PostgreSQL


PostgreSQLの場合は以下のようにLIMITとOFFSETを指定することで、
OFFSETで指定した位置から、LIMIT数分のレコードを取得することができます。

SELECT * FROM Table1
ORDER BY Field1
OFFSET 0 LIMIT 10;

その他のRDB


また、不運にも上記以外の RDB を使用しなければならない場合でも、以下のようなSQL文で、Table1 から Field1 の昇順に Field1, Field2, Field3 の結果セットを先頭から10件取得することができます。

SELECT DISTINCT COUNT(*), A.Field1, A.Field2, A.Field3 FROM Table1 A, Table1 B
WHERE (A.Field1 >= B.Field1)
GROUP BY A.Field1, A.Field2, A.Field3
HAVING COUNT(*) <= 10;

プログラマのためのSQL 第4版
翔泳社 著者:ジョー・セルコ,Joe Celko


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


[148] Posted by kagahiro at 2005/03/21 16:34:00
オープン | 5 point | Link (17) | Trackback (1) | Comment (4)

キーワード
SQL 先頭 10件 Oracle 上位 レコード MySQL PostgreSQL TOP 

kagahiroのホームページ

追記

SQLプログラミング質問スレ
実際の業務システムの開発では、単に先頭からN件のレコードを取得できれば良いと言うことは少ないと思います。具体的な記述方法がわからないときは、SQLプログラミング質問スレで質問してみてください。
Posted by kagahiro at 2017/03/30 09:52:08

SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) 関連リンク

SQLでn件目からm件目までのレコードを取得する方法(Oracle、SQL Server、MySQL、PostgreSQL)
SQLを使用して先頭からn件のレコードを取得するだけでなく、n件目からm件目までのレコードを取得することも可能です。Oracle8i R8.1.5 以降Oracle8i R8.1.5 以降では...
SQL
Structured Query Language(構造化問合せ言語) のことで、データベースの定義や操作などを実現するためのデータベース言語の一つ...
Oracle(オラクル)
Oracle(オラクル)とは、米Oracle社が開発・販売している高機能データベース製品のことで、UNIX、Linux、Windowsなお各OS向けの製品が存在...
Oracle(オラクル)書籍
Oracle(オラクル)に関する書籍。Oracleの入門書、データベースのアーキテクチャから運用・管理、データベース設計、PL/SQL、プログラミングについての解説書...
プログラマのためのSQL 第2版 ジョー・セルコ著
SQLの実務経験のあるプログラマを対象として、トピックごとにSQLプログラミングの基本的な考え方から、データベースの設計、数値・文字・時間といったデータ型、DELETE・INSERT・UPDATEといったデーブル操作、SELECT...
SQL 書籍
リレーショナルデータベースの標準言語であるSQLに関する入門書やリファレンス、プログラミング解説書などの書籍。SQLプログラミング入門―12のレッスンで学ぶリレーショナル...
MySQL
MySQLとは、フィンランドのMichael Widenius氏よって開発された、オープンソースライセンスで配布されている高速性に重点を絞った軽快なRDBMSで、欧米などで広く普及している。...
MySQL 書籍
オープンソースの高速・軽量データベース「MySQL」に関する書籍。入門書や運用管理についての詳細な解説書、リファレンスなど。MySQL 徹底入門 第2版オープンソースのデータベース...
[Perl]DBI経由でMySQLに接続して、SELECT文でデータを取得するサンプルプログラム
PerlのプログラムからDBI経由でMySQLに接続し、SELECT文でデータを取得する処理のサンプルプログラムです。あらかじめphpMyAdminを使用してMySQLにテータベース「testdb」を作成し、以下のSQL...
PostgreSQL
PostgreSQLとは、オープンソースの本格的なリレーショナルデータベースで、問い合わせ言語としてSQLが使えるほか、トランザクション、行レベルロック、副問い合わせなどの重要な機能も...
SQL Server
SQL Serverとは、Microsoft社がWindows Server用に開発・販売しているRDBMSのこと。Microsoft SQL Server ホームマイクソフトのSQL Server公式サイト。製品情報、技術情報、サービスパック・評価版...
SQLiteのSELECT文で上位 (TOP) n件のデータを取得する
SQLiteでは、AccessやMicrosoft SQL ServerのようにTOP句を使用して上位n件のデータを取得することはできません。SQLiteのSELECT文で上位n件のデータを取得する場合はLIMIT句を使用します。構文:SELECT カラム名, ....
MySQLのDELETE文でLIMIT句を使用して上位3件のレコードを削除する
MySQLでは、DELETE文でLIMIT句とORDER BYを使用して上位n件のレコードを削除することができます。削除前にORDER BYで指定した方法で並べ替えられ(ASCは昇順、DESCは降順、省略した場合は昇順)、LIMIT句で指定した行...
PL/SQL(ピーエル・エスキューエル)
PL/SQL(ピーエル・エスキューエル)は、Oracle社が同社のデータベース製品であるOracle Databaseを使用するために、SQL(データの操作や定義を行うためのデータベース言語)を独自に拡張したプログラミング言語で、変...
T-SQL (Transact-SQL)
T-SQL (Transact-SQL) は、SybaseとMicrosoftがSQL Sserver用に、データの操作や定義を行うためのデータベース言語であるSQLに独自の拡張機能を追加したプログラミング言語で、制御フロー、局所変数、グローバル変数...
MySQLのUPDATE文でLIMIT句を使用して上位3件のレコードを更新する
MySQLでは、UPDATEでLIMIT句とORDER BYを使用して上位n件のレコードを更新することができます。更新前にORDER BYで指定した方法で並べ替えられ(ASCは昇順、DESCは降順、省略した場合は昇順)、LIMIT句で指定した行数...
MySQLのINSERT ... SELECT文でLIMIT句を使用して上位3件のレコードをテーブルに追加する
MySQLでは、INSERT ... SELECTを使用することで1つまたは複数のテーブルからレコードをテーブルに追加できます。また、SELECTでLIMIT句とORDER BYを使用して上位n件のレコードのみテーブルに追加することもできます。...

SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) トラックバック

トラックバックURL :

Linked from ネット掲示板 - ゴクBBS : SQLプログラミング質問スレ at 2017/03/30 09:53:45
このスレでは「こういうことをやりたいんだけどSQLでどう書くの?」「こういうSQLを書いたんだけどうまく動きません><」といった質問を受け付けています。質問するときは使用するDBMSを必ず明記してください。質問...

SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL)へのコメント

1 Posted by kagahiro at 2013/07/13 11:51:54
上位n件のデータを取得するSQLでは、表(テーブル)の結合を使用することも多いと思われるので、結合時のパーフォマンスに関する情報を置いときます。

複数テーブル結合方法のパフォーマンスについて
http://social.msdn.microsoft.com/Forums/en-US/1f364a38-1c0d-4754-bcd6-6d11c4b4e809

津島博士のパフォーマンス講座 第9回 良いSQLについて
http://www.oracle.com/technetwork/jp/database/articles/tsushima/tsm09-1598259-ja.html

表の結合を極めるチューニング・テクニック (1/4)
http://www.atmarkit.co.jp/ait/articles/0503/24/news107.html

表の結合を極めるチューニング・テクニック (2/4)
http://www.atmarkit.co.jp/ait/articles/0503/24/news107_2.html

表の結合を極めるチューニング・テクニック (3/4)
http://www.atmarkit.co.jp/ait/articles/0503/24/news107_3.html

表の結合を極めるチューニング・テクニック (4/4)
http://www.atmarkit.co.jp/ait/articles/0503/24/news107_4.html
2 Posted by 無名のブロガー at 2013/08/09 10:32:20
No16860.SQLで件数を指定する方法
http://www.accessclub.jp/bbs2/0051/beginter16860.html

ACCESS で件数指定する方法のSQLが載ってます。
3 Posted by 無名のブロガー at 2013/08/09 10:34:34
ACCESSでは、TOPを使用する事で上位N番目までの結果を得る事ができます。
SQLビューで記述するか、「クエリプロパティ」の「トップ値」に値を設定します。
4 Posted by 無名のブロガー at 2013/12/26 16:38:14
RDB毎の記述の差異がわかりやすい。

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

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

< 前の投稿      次の投稿 >

アクセスランキング

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

  1. グーグルニュース(Google News)日本語版が見れるURL (19 PV)
  2. Google News (グーグルニュース)日本版 (10 PV)
  3. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (9 PV)
  4. [将棋]竜王戦第三局は居飛車振り飛車の対抗型で丸山忠久九段が勝利 #竜王戦 (8 PV)
  5. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (8 PV)
  6. ウェブページを1回だけリロード(再表示)する方法 (4 PV)
  7. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (4 PV)
  8. フリーソフトウェア/オープンソースのタブー (4 PV)
  9. [食べ物]七草粥(ななくさがゆ) (4 PV)
  10. 動画ダウンロード保存.com (4 PV)

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

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (2896 PV)
  2. グーグルニュース(Google News)日本語版が見れるURL (646 PV)
  3. Google News (グーグルニュース)日本版 (625 PV)
  4. [将棋]竜王戦第三局は居飛車振り飛車の対抗型で丸山忠久九段が勝利 #竜王戦 (342 PV)
  5. フリーソフトウェア/オープンソースのタブー (314 PV)
  6. [食べ物]七草粥(ななくさがゆ) (292 PV)
  7. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (255 PV)
  8. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (143 PV)
  9. ウェブページを1回だけリロード(再表示)する方法 (143 PV)
  10. USTREAM(ユーストリーム) 日本語版 無料のライブ映像配信サービス (133 PV)

アクセス統計

ディレクトリ

関連サイト