2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OracleにはLimit句が使えなかった@SQL講習

Last updated at Posted at 2025-04-10

こんにちはSQL講習です:robot:

オブジェクティブグループの@Yukidarusanです!
弊社では月に1回、社内講習会を開いておりまして自分はSQL講習を担当しております。
今回はその中で使用したLimit句について、追加で解説させていただきます!

Limit句って実はメジャーではない?

SQL講習でも登場しましたLimit句です!
全部のレコード出すのも時間がかかるし...かといってまだ条件で絞るには早すぎる...といったときに便利に使用できるLimit句ですが、実はOracleDBでは使用できません。追加でSQL Serverでも使用できません。
講習でもお話があったかと思いますが、SQL文が基本どのリレーショナルデータベース管理システム(以降RDBMS)でも基本的なものは一緒です。
ですが、細かい箇所で差異があります。
今回はそんなお話を一つ!

Limit句の代わり

じゃあ使えないなら、似たようなことができないのか!?というと...似たような動きをできる句があるのです。ここから各RDBMSでの抽出件数を指定したSQL文を例を交えて説明します

  1. Oracle:ROWNUM疑似列
    ROWNUMを使用することによって、Limit句のような動きをさせることができます。
    注意点としては、意図しないソート順の上位件数を抽出するため、副問い合わせ等でソートを指定する必要があります。

    -- 顧客マスタを顧客IDでソートした上から10行を表示する
    SELECT * FROM
        (SELECT * FROM kokyaku_mst
            ORDER BY kokyaku_id)
    WHERE ROWNUM < 11;
    
  2. SQLServer:TOP
    TOPを利用すれば同じ形に表示できます。

    -- 背番号でソートした上から10名の選手を表示する
    select TOP 10 * from player_mst order by back_number;
    

Limit句の使い方

Limit句の使い方自体も各RDBMSで違いがあったので参考までに:yum:

  1. PostgreSQL:LimitーOFFSET
    Limitの後に件数を指定し、OFFSETで開始位置を指定します。
    -- 5個目の売上から10個売上を表示する
    select uriage_amount from uriage_rireki Limit 10 OFFSET 5;
    
  2. MySQL:Limit
    引数を2つ指定可能。
    -- 40人の社員を表示する
    select *from Emproyee_mst Limit 40;
    -- 105人目から30人の社員を表示する
    select *from Emproyee_mst Limit 30,105;
    

使えなくても手立てはある

今回はLimit句に対して、ない場合は同じような手立てがあるか?ある場合は使用方法について記載しました。ここまで違う使い方なのもなかなかありません。
他の句でも、存在しなくても何か手立てはあるものです。
慌てず、手立てがないか調べながら実施してみましょう。


※参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?