こんにちはSQL講習です
オブジェクティブグループの@Yukidarusanです!
弊社では月に1回、社内講習会を開いておりまして自分はSQL講習を担当しております。
今回はその中で使用したLimit句について、追加で解説させていただきます!
Limit句って実はメジャーではない?
SQL講習でも登場しましたLimit句です!
全部のレコード出すのも時間がかかるし...かといってまだ条件で絞るには早すぎる...といったときに便利に使用できるLimit句ですが、実はOracleDBでは使用できません。追加でSQL Serverでも使用できません。
講習でもお話があったかと思いますが、SQL文が基本どのリレーショナルデータベース管理システム(以降RDBMS)でも基本的なものは一緒です。
ですが、細かい箇所で差異があります。
今回はそんなお話を一つ!
Limit句の代わり
じゃあ使えないなら、似たようなことができないのか!?というと...似たような動きをできる句があるのです。ここから各RDBMSでの抽出件数を指定したSQL文を例を交えて説明します
-
Oracle:ROWNUM疑似列
ROWNUMを使用することによって、Limit句のような動きをさせることができます。
注意点としては、意図しないソート順の上位件数を抽出するため、副問い合わせ等でソートを指定する必要があります。-- 顧客マスタを顧客IDでソートした上から10行を表示する SELECT * FROM (SELECT * FROM kokyaku_mst ORDER BY kokyaku_id) WHERE ROWNUM < 11;
-
SQLServer:TOP
TOPを利用すれば同じ形に表示できます。-- 背番号でソートした上から10名の選手を表示する select TOP 10 * from player_mst order by back_number;
Limit句の使い方
Limit句の使い方自体も各RDBMSで違いがあったので参考までに
- PostgreSQL:LimitーOFFSET
Limitの後に件数を指定し、OFFSETで開始位置を指定します。-- 5個目の売上から10個売上を表示する select uriage_amount from uriage_rireki Limit 10 OFFSET 5;
- MySQL:Limit
引数を2つ指定可能。-- 40人の社員を表示する select *from Emproyee_mst Limit 40; -- 105人目から30人の社員を表示する select *from Emproyee_mst Limit 30,105;
使えなくても手立てはある
今回はLimit句に対して、ない場合は同じような手立てがあるか?ある場合は使用方法について記載しました。ここまで違う使い方なのもなかなかありません。
他の句でも、存在しなくても何か手立てはあるものです。
慌てず、手立てがないか調べながら実施してみましょう。
※参考