目次
ふりかえり

筆者
本記事は、SQLの基本、実務使用例編になります。
SQLの基礎に関しましては、
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

A子
本編に入ります!
fetch first 1 rows only とは?

筆者
これは SQLで「上位の1件だけを取り出す」 ときに使う命令です。
たとえば、データベースの中に100件のデータがあっても、そのうちの最初の1件だけ欲しいときに使います。
使い方の例
select *
from 社員
order by 入社日 asc
fetch first 1 rows only;
意味:
order by 入社日 asc:入社日の早い順に並べます(昇順)。fetch first 1 rows only:そのうち 1行目だけ を取り出します。
どんなときに使う?
- 最新の情報(例:最新の注文)を1件だけ見たいとき
- 古いデータを1つだけ確認したいとき
- 「最も金額が高い商品」など、1番目だけ知りたいとき
注意点
order byがないと、「どの1件か」が決まらないので、必ずセットで使うのが安全です。- 複数件ほしい場合は
fetch first 3 rows onlyのように数字を変えられます。
Oracle以外では?
- OracleやPostgreSQLではこの構文が使えます。
- SQL Serverでは代わりに
top 1を使います:
select top 1 *
from 社員
order by 入社日 asc;
fetch first 1 rows only のメリット
① 不要な行を取らずに済む(パフォーマンス向上)
- 例えば1万件のデータがあるテーブルで、
全件検索せずに「必要な1件だけ」を取れるので、
データ量が少なく済み、処理が速くなる可能性があります。
select *
from 注文
order by 注文日時 desc
fetch first 1 rows only; -- 最新の注文1件だけ
→ 上位1件を取ればいいなら、それ以上の行を読み込まないので、
ディスクI/Oが減り、応答速度が上がることがあります。
② 明確な目的を伝えられる(可読性・意図が明確)
rownum = 1 や limit 1 よりも 標準SQLに近く可搬性が高い。
「1件だけ欲しい」と意図がはっきりしたクエリになります。
③ サブクエリでの使用に便利(存在チェックにも使える)
exists の中や in の中など、1件だけで十分な場面では
無駄なデータ読み込みを避けられます。
ただし注意点もアリ
インデックスと組み合わせないと速くならないことも・・
order by を指定することでソート処理が発生します。
たとえばインデックスがないと、全件読み込んでソートしてから
1件を取るので、パフォーマンスが下がることもあります。
select *
from 注文
order by 注文日時 desc
fetch first 1 rows only;
結論
| 目的 | 効果 |
|---|---|
| 上位数件の取得 | データ量が減り、処理が高速になる可能性あり |
| 意図の明確化 | 読みやすいSQLになる |
| サブクエリでの存在チェック | 無駄な行取得を防げる |
まとめ

筆者
fetch first 1 rows onlyについて解説しました。
次回もお楽しみに!










コメント