ПредишенСледващото

Ето защо, аз искам да се подберат няколко реда в Oracle DB. Трябва да направите това, защото имам милиони редове в таблицата, и аз искам да Странирано персонализирани резултати (ако знаете от друг начин да направите това от страна на клиента, аз съм с помощта на JavaFX, ако това има значение, но аз не мисля, това е добра идея да се изпрати на всички данни по мрежата, за да ги разбие от страна на клиента).

100 и 110 са само примерни. Приложение I просто иска по-ниска граница на размера и добавете 10_000 10_000 за следващите редове.

Сега резултатът е колона ROWNUM, а аз не искам да го видя. Тъй като аз не съм много запознат с SQL, тук са моите въпроси:

  1. Защо (това беше първият ми опит, докато аз Изберете * от човек Къде ROWNUM> 100 и ROWNUM <110; SO). Select * From Person Where rownum> 100 и ROWNUM <110; Возвращает 0 строк?

Защо не е лесен начин да се направи нещо такова Select. ОТ. КЪДЕ ROWNUM МЕЖДУ долна граница и горна граница.

Как да се отървем от колона в получените стойности на R? От там, SQL изключи колона, използвайки SELECT * [освен черво] FROM TABLEA? Трябва да се създаде най-вероятно оглед или временна таблица, но има и друг начин да се поберат молбата ми?

ако той осигурява правилния номерацията на страниците? Прочетох част от статията "локализиране използване ROWNUM», който каза, че аз трябва да резервират стойност на нещо уникално, за да получите последователно номериране на страници (така че мисля, че ROWNUM поръчка, за това, ако можете да потвърдите) , Не е ли обезсмисля използващи FIRST_ROWS (N).

Надявам се, че това не е твърде много, че може да бъде разделен на отделни въпроси, но аз мисля, че е важно, че те не са успели, защото те са тясно свързани.

Имате 4 въпроса, и всички те се въртят около използването и функционалността на ROWNUM. Аз ще отговоря на всеки въпрос един по един.

Защо (това беше първият ми опит, докато търсех SO). Изберете * от човек, където ROWNUM> 100 и ROWNUM <110; Возвращает 0 строк?

Добро обяснение относно Томас Кийт ROWNUM и страниране тук.

ROWNUM стойност се приписва един ред след преминаване заявка предикат фаза, но преди искането ще изпълни всяко сортиране или агрегация. В допълнение, стойността на ROWNUM нараства само след това се определя, така че следната заявка никога няма да се върне ред:

Защото ROWNUM> 1 не отговаря на първия ред, ROWNUM като не преминава 2. Ето защо, всяка една стойност ROWNUM никога няма да бъде по-голямо от 1.

Защо не е лесен начин да се направи нещо такова Select. ОТ. КЪДЕ ROWNUM МЕЖДУ долна граница и горна граница?

Да, има. Започвайки с Oracle 12в. можете да използвате нови ограничения Top-н ред. Вижте. Моят отговор тук.

Така например, следната заявка връща служители от 4 до 7, най-високите заплати във възходящ ред:

Как да се отървем от колона в получените стойности на R?

Вместо това, изберете *. изберете * задължителни имена на колони във външната заявка. За чест на заявка за създаване на оглед - това е просто работа еднократно.

Алтернативно, в SQL * Plus, можете да използвате отбор NOPRINT. Той не се показва името на колоната, която искате да покажете. Въпреки това, той ще работи само в SQL * Plus.

ако той осигурява правилния номерацията на страниците?

Да, ако пишете заявка правилно страниране.

Или използвайте новата функция за ограничаване на 12в редове, както посочих по-горе.

Има няколко добри примери.

Отговор на въпрос 2: В Oracle 12, можете да използвате страниране

Подкрепете проекта - споделете линка, благодаря!