データベース - SQL 基本構文 - 絞り込み TOP・LIMIT

 クラウディア
1. 概要
2. TOP
3. MySQL LIMIT
4. PostgreSQL limit

1. 概要

 「DB」側にデータの存在をチェックしに行って、データの有無でプログラム側の処理を切り分ける場合。  既存のクエリ次第では高速化できる場合があります。  (参考サイトまんま、うけうり)  本ページは、下記のサイトを参考にさせていただきました。
SQL 小ネタ: 高速なデータの存在チェック #MySQL」
「SQLServer の TOP MySQL、PostgreSQL ではLIMIT、OFFSET

2. TOP

 「SQLServer」では、「TOP」という句が使えるらしい。  「SQLServer」の環境は、持っていないし、持ちたくもないので、参考サイトまんま書きますが。

SELECT COUNT(*) FROM SOMETABLE WHERE COLUMN1 = 1;
 という「SQL」の結果をプログラムで(「python」風に書くならば)。

if COUNT結果 > 0:
	結果がある場合の処理
else:
	結果がない場合の処理
 と書くよりも、「SQL」を。

SELECT TOP (1) * FROM SOMETABLE WHERE COLUMN1 = 1;
 としてプログラムで。

if レコードがとれた:
	結果がある場合の処理
else:
	結果がない場合の処理
 とする方が、100msec、場合によっては 1 sec 単位で結果が異なるらしい。  この「TOP」は、「MySQL」「PostgreSQL」では使えないので、「LIMIT」を使うとよいそうで。  「MySQL」「PostgreSQL」で、構文が異なるそうなので、それぞれやってみます。

3. MySQL LIMIT

 「MySQL」では。

SELECT カラム FROM テーブル名 LIMIT オフセット, 行数;
 で、行数を絞ることができます。  やってみます。

SELECT * FROM WP_COMMENTS LIMIT 0, 1;
 取得しているのは、「WordPress」のコメントテーブルです。  結果は、下記のようになりました(行の先頭部分のみ)。

+------------+--
| comment_ID |
|          4 |
+------------+--

4. PostgreSQL LIMIT

 「PostgreSQL」では。

select カラム from テーブル名 limit 行数 offset オフセット;
 で、行数を絞ることができます。  やってみます。

select * from mantis_bug_table limit 1 offset 0;
 取得しているのは、「MANTIS」のテーブルです。  結果は、下記のようになりました(行の先頭部分のみ)。

 id | project_id |
 16 |          2 |
ハイスピードプラン