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;

[148] Posted by kagahiro at 2005/03/21 16:34:00
クローズ | 5 point | Link (18) | Trackback (1) | Comment (4)

キーワード

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

ジャパンのホームページ

追記

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 Server 2017 #Windows #Linux #Microsoft
SQL Server 2017は、2017年10月2日(米国時間)に正式リリースされた、マイクロソフトが開発・販売しているRDBMS「SQL Server」の最新版で、これまでもサポートされていた Windows Server だけでなく、LinuxとDocker...

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. 2chまとめサイト - 痛いニュース(ノ∀`) (7 PV)
  2. [FX]裁量ポジションの自動トレールや時間決済ができるMT4向け無料ツール(EA)「PositionKeeper」をバージョンアップ (7 PV)
  3. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (5 PV)
  4. Google Finance(グーグルファイナンス)- リアルタイム株価情報、金融ニュース、日本株 (4 PV)
  5. Google News (グーグルニュース)日本版 (4 PV)
  6. 時間指定で仲値トレードも簡単にできる無料EA「NAKANE3 Ver 2.02」 (3 PV)
  7. MT4向けオープンソースナンピンマーチンEA「Automaton」 (2 PV)
  8. 8月15日は終戦記念日(しゅうせんきねんび、終戦の日) (2 PV)
  9. 有力将棋系ユーチューバーのショウヤンさんが将棋ウォーズで「ソフト指し」を告白し衝撃走る (2 PV)
  10. 裁量トレードで買い(BUY)か売り(SELL)かを判断する方法 (1 PV)

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

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (1116 PV)
  2. Google News (グーグルニュース)日本版 (241 PV)
  3. 日経平均株価(にっけいへいきんかぶか) (133 PV)
  4. 2chまとめサイト - 痛いニュース(ノ∀`) (106 PV)
  5. Google Finance(グーグルファイナンス)- リアルタイム株価情報、金融ニュース、日本株 (96 PV)
  6. 安全性重視の完全無料ナンピンマーチンEA「Million Dollar(ミリオンダラー)」 #FX #ゴールド #ビットコイン (95 PV)
  7. 仲値トレードが簡単にできる無料EA「NAKANE3 Ver 2.04」 #MT4 (90 PV)
  8. SQLiteのSELECT文で上位 (TOP) n件のデータを取得する (87 PV)
  9. 自作のMT4向け無料EA(口座縛り無し、ブローカー縛り無し、使用期限無し)とゴゴジャン出品中の有料EAの一覧 #MT4 (73 PV)
  10. 裁量トレードで買い(BUY)か売り(SELL)かを判断する方法 (71 PV)

アクセス統計

ディレクトリ

関連サイト