• ベストアンサー

特定の数だけ取得するSQL文

SQLのselect 文で 例えば100000件マッチしたとします。 ただ、最初の50件だけ抽出したいといった場合、 どういったselect文を作成すれば、最初の50件だけ 取得できるのでしょう?

質問者が選んだベストアンサー

  • ベストアンサー
  • dais4x
  • ベストアンサー率12% (42/332)
回答No.1

ROWNUM使いましょう。 参考URLに例があります。

参考URL:
http://www.wwlnk.com/boheme/delphi/dbtips/css0140.htm
gogoogoo11
質問者

お礼

試してみます。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

使用するRDBMSは、ここのカテゴリ通りMySQLでいいのですか? >ROWNUM使いましょう ROWNUMはOracleの独自機能なので、他のRDBMSでは使えません。 MySQLでは、LIMIT、OFFSETが実装されています。 select ~ from ~ where ~ order by ~ limit 0,50

gogoogoo11
質問者

お礼

ありがとうございます。 すみません。実はOracleです。 投稿場所を間違えたようです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • “SQL文を作るSQL”の書き方ってありますか?

    “SQL文を作るSQL”の書き方ってあるのでしょうか? 例えばなのですが、表同士を大量に結合して条件に当てはまったものをアップデートするようなSQLを書く場合、文法を間違うとエライこちゃ!になる場合がありますよね。 そういう場合って結合するんじゃなくて結合したSELECT文を使って条件だしをして1件1件単純アップデートをした方が安心ですよね。 (定期処理であれば効率が悪いですが・・・だったらプロシージャですか・・・というところになりますがごくたまにや1回きりのデータ変更など) そういったことをやるほうほうはありますでしょうか? 仕様はSQL99です。

  • SQL文について

    OracleやSQLについてはまだ初心者のレベルで理解が浅いので言葉足らずかもしれませんがよろしくお願いします。 以下のようなテーブル(名称:TBL)があったとします。 SHOP_CODE------SHOP_NUMBER----MONEY1------MONEY2 A ---------------- 1 ---------------- 100 ------------- 200 B ---------------- 2 ---------------- 300 ------------- 400 C ---------------- 3 ---------------- 500 ------------- 600 D ---------------- 4 ---------------- 700 ------------- 800 例えば、SHOP_CODEがA~Dのどれかの行(レコード)はそのまま抽出して、残った行(レコード)はMONEY1およびMONEY2を0に変更して抽出しようとした場合、 SELECT * FROM TBL WHERE SHOP_CODE = 'ここはA~Dのどれかを代入' UNION SELECT SHOP_CODE, SHOP_NUMBER, 0, 0 FROM TBL WHERE SHOP_CODE <> 'A~Dのどれかを代入' このようなSQL文を考えてみました。 しかし、比較的簡単な例ならばよいのですが、UNION前のSELECT文が複雑になってきた場合のことを考え以下のような文の作りかたができないかと思いました。 SELECT * FROM TBL WHERE SHOP_CODE = 'ここはA~Dのどれかを代入'・・・『この時点で抽出した塊になんらかの名称をつける(例:tbl)』 UNION SELECT SHOP_CODE, SHOP_NUMBER, 0, 0 FROM TBL WHERE SHOP_CODE <> tbl.SHOP_CODE・・・『このようにUNION以前に抽出した塊の名称を利用して条件を作成』 このような方法ができるとした場合、前段階で抽出した塊にどのような方法で名称をつけるのか分かりませんでした。(汗)そもそもできるかどうかもわかりませんが、、、(^^; 最初のSQL文がベターな方法なのかも分かりませんが、上記に示した方法で抽出することが可能でしょうか?もしできるのならば、前述したように名称をつけて条件を作成する方法等を教えていただきたいと思います。 おおよそ話を分かっていただければよいのですが、ものすごく簡単に言うと一つのテーブルのある行とある行に別々の処理をして再構成したいというようなイメージです。(今回はMONEYを0にすると仮定しました) できれば上記の方法に沿った考えで回答をいただけると私も助かりますが、もっと良い方法があれば是非伺いたいと思います。お時間の方ありましたらよろしくお願いします。

  • SQL文について

    ACCESSのSQLについてなんですが・・・ MyQuery.SQL = "SELECT * FROM 納品書 WHERE 納品書.納品数 > 0;" などとやった場合、納品数が入っているレコードのみ抽出されると思いますが、 ヒットした件数を知りたいときには、MyRecSet.RecordCountで取得するのでしょうか? (DCNTは使えない) そのヒットした数だけループさせて処理する場合、どのようにするのが一般的でしょうか? (MOVENEXT等を使う?) SQL文で出来ることは、ACCESSの画面でのクエリー定義で出来るものでしょうか。 なんでもかんでも画面で定義する人と、ちょっとしたものでもSQLでガリガリ書く人といる みたいなので、そこらへんは各人の好みの問題なのかなあ、と思いまして・・・。

  • SQL文について教えてください。

    MySQLでSQLを勉強しておりますが、 わからないことがありますので教えてください。 以下の売上データを担当者・売上額降順で整列して 担当毎に上位3件ずつ抽出するSQL文を作成したいのですが 書き方を教えてください。 TAN TOK URIKIN 01 041 7800 02 098 9000 02 072 7000 02 008 12000 01 002 11800 02 024 18000 01 018 9800 01 031 12000 02 044 5000 01 058 10500 01 038 6500 02 015 16000 02 077 4000 こういう結果にしたいのです。 TAN TOK URIKIN 01 031 12000 01 002 11800 01 058 10500 02 024 18000 02 015 16000 02 008 12000 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQL文でのデータの取得が上手くいきません

    初めて質問させていただきます。 こちらのカテゴリで良いのか分からなかったのですが、よろしくお願いいたします。 SQL文を作成しているのですが、上手くいかず困っている状況です。 要件としてはテーブルAにユーザーの情報が格納されているのですが、 キーの一つとして世代(SEDAI_NO)(日付)を持っております。 今回取り出したいデータは該当ユーザーの処理日以前の最新のデータを 取得したいと思い以下のSQL文を作成しましたが、上手く行かず、最新世代を含むそれ以前の世代のデータを取得してきています。 どこがおかしいのでしょうか? よろしくお願いいたします。 【作成したSQL】 select * from テーブルA テーブルA’ where (USER_ID=該当のユーザーID) and (SEDAI_NO = (select max(SEDAI_NO) from テーブルA where SEDAI_NO = テーブルA’.SEDAI_NO AND 処理日 >= テーブルA'.SEDAI_NO)

  • 該当するSQL文を教えてください。

    該当するSQL文を教えてください。 SQL超初心者です。 指定した条件にマッチする「次のレコード」を取得(または表示)させるための SQL文を教えてください。

  • SQL文について

    こんにちは! 皆様に教えて欲しいことがあります。 DBの中のデータで、一番年齢が高い人の名前を取得してくるときってどんなSQL文を書けばいいんでしょうか? 一番高い年齢を取得、なら select Max(年齢) from DB でいいと思うんですけど、一番年齢の高い人の名前、となると、どうやってとってくるのかわかりません。 where文で「having max(年齢)」ってやったんですけど、エラーが出て実行できませんでした。 今作ってるSQL文は、DB二つから他の条件も含めてselectしているので、他の理由でエラーになってるのかもしれませんが・・・。 職場にSQLがわかる人がいないので、誰にも聞けません。 もしわかる方がいらっしゃいましたら、教えてください。 宜しくお願いします。

  • SQL の抽出方法

    あるテーブルABC に項目aとbとc があるとします。 今、抽出の条件が 仮にa=1,b=2 として、 この条件で複数件のデータが抽出され その中からcが最大のデータ1件のみを抽出するとします。 このSQLを作成する場合、 どのような方法がありますでしょうか? select文で、1度cのmax値を求めないといけないでしょうか?

  • SQL文 特定のレコードを抽出したい

    以下のようなテーブルAがあったとします。 年月日,項目B ---------------------- 20080101 100 20080102 100 20080103 200 20080104 400 20080105 400 20080106 200 SQL文にて、データの抽出を行いたいのですが、 抽出したいのは、データに変更があった年月日と項目Bの値です。 年月日,項目B ---------------------- 20080101 100 20080103 200 20080104 400 20080106 200 前の年月日と比較し、項目Bに違いがあった場合のデータだけ抽出したいのですが、SQL文で行うことは可能でしょうか?? 環境は、SQL Server 2005 です。

  • SQL ?で終わる

    アクセスのSQL文で、テーブルのフィールドの値が、最後が?で終わるものを抽出したいのですが SELECT テーブル.フィールド FROM テーブル WHERE (((テーブル.フィールド) Like "[*?]")); これだと1件も抽出されません。 Like "[*?]"が間違ってると思うのですが、どうすればいいでしょうか?