今だけ人気マンガ100円レンタル特集♪

SQLで検索結果の出力件数指定はできるのでしょうか?

例)SELECT * FROM SHOHIN ORDER BY SHOHINCD
この様なSQLを発行した場合に検索結果を5件だけ出力する事は可能でしょうか?

・可能な場合具体的な指定方法を教えてください。

・出力件数が可能の場合で、ソート順や検索条件(SHOHINCD>1000等)がない場合は順不同な結果が返ると思えばいいでしょうか?

よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>Oracleは抽出結果に自動的に番号(ROWNUM)を採番しますので、


>それを利用すればできます。
>例)SELECT * FROM SHOHIN WHERE ROWNUM <= 5 ORDER BY SHOHINCD

このSQLでは、正しい結果を得られません。
ROWNUMは、ソートをする前にOracleによってふられます。

そのため、ソートした結果の後で、5件ROWNUMで件数を指定する必要があります。

SELECT * FROM
(SELECT * FROM SHOHIN ORDER BY SHOHINCD)
WHERE ROWNUM <= 5 

とする必要があります。

この回答への補足

ありがとう御座います。早速明日会社で試します。早々のレス誠に感謝いたしております。<m(__)m>

補足日時:2003/02/09 18:39
    • good
    • 1
この回答へのお礼

>このSQLでは、正しい結果を得られません。
その通りでした。

>そのため、ソートした結果の後で、5件ROWNUMで件数を指定する必要があります。
このSQLで正しい結果取得ができました。
本当にありがとう御座いました。<m(__)m>

お礼日時:2003/02/10 20:13

#1のものです。

昔なにかで使った記憶で回答したのですが、身近な「アクセス」で「TOP述語」が使えました。
SELECT top 3 [番号], [日付], [名前], [使途], [金額]FROM 小口現金1;
で、自分のテーブルを用いて、クエリでやると、3行結果が出てきました。ご使用の処理系は分かりませんが、何かのご参考になれば。

この回答への補足

度々のHELP誠に感謝致しております。これも明日早速試してみたいと思います。ありがとう御座います。<m(__)m>

補足日時:2003/02/09 22:00
    • good
    • 3
この回答へのお礼

Oracleではエラーになりましたが、SqlServerでは有効みたいです。(試してませんが)
知識が増えました。
ありがとう御座いました。

お礼日時:2003/02/10 20:11

>例)SELECT * FROM SHOHIN ORDER BY SHOHINCD


>この様なSQLを発行した場合に検索結果を5件だけ出力する事は可能でしょうか?
>
>・可能な場合具体的な指定方法を教えてください。
>
Oracleは抽出結果に自動的に番号(ROWNUM)を採番しますので、
それを利用すればできます。
例)SELECT * FROM SHOHIN WHERE ROWNUM <= 5 ORDER BY SHOHINCD

>・出力件数が可能の場合で、ソート順や検索条件(SHOHINCD>1000等)がない場合は順不同な結果が返ると思えばいいでしょうか?

また、ソートを行わない場合は抽出結果の順番は保証されません。

この回答への補足

ありがとう御座います。

補足日時:2003/02/09 18:38
    • good
    • 0
この回答へのお礼

参考になりました。
ありがとう御座いました。<m(__)m>

お礼日時:2003/02/10 20:14

「TOP」が使えませんか。


参考
http://www.users.gr.jp/ml/Archive/sql/4285.asp

この回答への補足

ありがとう御座います。<m(__)m>
早速明日会社で試して見たいと思います。
DBはOracle8.1.7です(DBとVer記入忘れていました。)<m(__)m>

補足日時:2003/02/09 13:36
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSELECTでの指定行からの指定行数文の取得

こんにちは。
OracleでSELECT文、一発で指定行から指定行数分のデータを取得するように指定できるのでしょうか?

例)
SELECT * from tbl01;

で、100行取得できる状態で25行目から30行分取得する

OracleのSQLリファレンスを調べたのですが該当するようなものは
見当たりませんでした。

よろしくお願いします。

Aベストアンサー

ORACLEでは、LIMIT+OFFSETをサポートしていないようですね。
ROWNUM擬似列を使用し、25番目から30行(54番目)を条件に指定して検索する方法があります。

SELECT * FROM
(SEELCT *,ROWNUM line
FROM tbl01)
WHERE line BETWEEN 25 AND 54

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。

QSQLで特定の項目の重複のみを排除した全項目を取得する方法

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のような構造になっている場合に「項目名1」について重複している項目を排除し、結果として


項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 B    え    イ    江

上のようなデータを取得したいのです。
この時に、Aの重複を排除して取得するレコードは1~3行目のどれでもよいです。
また、データを取得する際には必ずそのレコードの「全項目」を取得したいのでDistinctはうまく使えませんでした。

どなたか詳しい方、方法を教えてくださると幸いです。回答お待ちしております。

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のよ...続きを読む

Aベストアンサー

比較可能で一意性のある値をもてる項目6をテーブルに追加して、

select T.* from T, (select Item1,min(Item6) as Item6 from T group by item1) W where T.item6=W.item6;

――ってやるのが、一番手っ取り早いと思います。
他のところに影響がでないのであればですが。
oracleならrowidを使うとか、レコードの更新時刻を突っ込むとか。

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

Q取得するデータの件数指定、MySQLではlimit、ORACLEでは?

タイトルのままなんですけど、以下のSQL文を
オラクルではどう書けばよいでしょうか?

select * from user_tbl limit 0, 10;
(最初の10件だけ取得したい)

教えてくださ~い!

Aベストアンサー

こんにちは。

ソート順を気にしなくていい(取ってきた順番)なら、
SELECT *
FROM (SELECT *, ROWNUM AS XX FROM user_tbl)
WHERE XX >= 11 AND XX <= 20
でできます。
全体を何かのソート順で取得する場合、ROW_NUMBER()を使用するのが普通です。
(ROWNUMの方が処理は早いが、ORDER BYより先に評価されてしまう・・・)
参考まで・・・。
(^^ゞ

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

Qテーブルからのselectにおいてデータの有無により結果をわけたい

id | point
----+-------
1 | 10
2 | 9
3 | 5
....
というテーブルがあるとします.
idを指定してpointを得たいのですが、そのidがこのテーブルに存在しない場合は空の結果ではなく0を返したいのです.
plpgsqlなどを使いif文で場合分けすればできることはわかっているのですがSQL文だけで(それもできれば1文で)これを実現する方法はあるでしょうか?
よろしくお願い致します。

Aベストアンサー

変則的ですが、これでよければidがユニークでなくても大丈夫ですし、集合関数を使わなくてもOKです。

select dm.id,case when ex1.point is null then 0 else ex1.point end from
(select ? as id) as dm left join ex1 on dm.id = ex1.id;

?を適当に変えてください。
chukenkenkouさんの発想はこれですよね。

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング