Forum » Programiranje » [SQL]Sortiranje subquery
[SQL]Sortiranje subquery
MrStein ::
Eno nagradno vprašanje: A se pri gnezdenem SELECT stavku sortiranje notranjega SELECT ohrani pri končnem rezultatu?
Primer:
Bo končni rezultat sortiran po imenih?
(mislim na Oracle ampak se lahko splošno podebatira)
Primer:
SELECT * from (SELECT * FROM OSEBE WHERE SPOL = 'm' ORDERY BY ime) WHERE STAROST<15;
Bo končni rezultat sortiran po imenih?
(mislim na Oracle ampak se lahko splošno podebatira)
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
- spremenil: MrStein ()
darkolord ::
Ne. :)
Ponekod ti takega stavka sploh ne "skompajla". Izjema je, če imaš poleg še TOP/LIMIT, s katerim dejansko pofiltriraš vmesni rezultat. Drugače pa se notranji ORDER BY ignorira, važen je samo zunanji.
Ponekod ti takega stavka sploh ne "skompajla". Izjema je, če imaš poleg še TOP/LIMIT, s katerim dejansko pofiltriraš vmesni rezultat. Drugače pa se notranji ORDER BY ignorira, važen je samo zunanji.
Zgodovina sprememb…
- spremenilo: darkolord ()
MrStein ::
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Zgodovina sprememb…
- spremenil: MrStein ()
MrStein ::
Klasični (vsepovsod priporočen) SQL za "izbiro strani iz rezultatov" je namreč:
In rezultat je sortiran.
(velja za Oracle, drugje se "ostranjuje" drugače)
SELECT * FRMO ( SELECT id, col1, col2, rownum rn FROM ( SELECT /*+ first_rows(50) */ id, col1, col2 FROM table1 ORDER BY id DESC ) WHERE rownum <= 50 ) WHERE rn >= 1;
In rezultat je sortiran.
(velja za Oracle, drugje se "ostranjuje" drugače)
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Zgodovina sprememb…
- spremenil: MrStein ()
MrStein ::
Oziroma:
Iz tega članka: http://www.oracle.com/technetwork/issue...
select * from ( select /*+ FIRST_ROWS(n) */ a.*, ROWNUM rnum from ( your_query_goes_here, with order by ) a where ROWNUM <= :MAX_ROW_TO_FETCH ) where rnum >= :MIN_ROW_TO_FETCH;
Iz tega članka: http://www.oracle.com/technetwork/issue...
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
darkolord ::
No saj, ROWNUM je ekvivalent TOP/LIMIT. Če v subqueriju dejansko filtriraš podatke na podlagi vrstnega reda, potem se bo ORDER BY upošteval, v nasprotnem primeru verjetno (ne poznam Oracla, ampak sklepam da je enako) ne.
V T-SQLu bo na primer tole šlo čez:
Tole pa ne:
V T-SQLu bo na primer tole šlo čez:
SELECT * FROM (SELECT TOP 10 * FROM neki ORDER BY burek DESC)
Tole pa ne:
SELECT TOP 10 * FROM (SELECT * FROM neki ORDER BY burek DESC)
Zgodovina sprememb…
- spremenilo: darkolord ()
MrStein ::
Ja, zdaj vidim, da "nasploh" (ne-Oracle baze, pa tudi Oracle baze starih verzij ala 8.0) ORDER BY v "notranjem" SELECT (subquery) sploh ni dovoljen (razen izjem z TOP in podobno).
Sem že mojstra vprašal...
Sem že mojstra vprašal...
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Invictus ::
Jst dajem v notranji in tudi zunanji query order by pa je.
Dati zunanji in notranji sort je nepotrebno ...
Ni čudno da so vse web strani tako počasne ...
"Life is hard; it's even harder when you're stupid."
http://goo.gl/2YuS2x
http://goo.gl/2YuS2x
technolog ::
To ni razlog za počasnost. Za optimizator je to ta mala malica odstranit. Trpi edino preglednost kode.
Spura ::
Jst dajem v notranji in tudi zunanji query order by pa je.
Dati zunanji in notranji sort je nepotrebno ...
Ni čudno da so vse web strani tako počasne ...
LOL ok, a ti mislis, da ce na zunanji select, ki ima 50 rowov das en order by, da ti ful poveca cas izvajanja querya, oziroma celo cas nalaganja strani?
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | sqlOddelek: Programiranje | 1014 (719) | Miha 333 |
» | Podatkovne baze - SQL enostavne poizvedbeOddelek: Programiranje | 2063 (1656) | galu |
» | [Oracle] Osnovno povpraševanje problemOddelek: Programiranje | 1913 (1554) | zdravc |
» | Sql pomočOddelek: Pomoč in nasveti | 783 (743) | zaaaz89 |
» | [PHP&MySQL] izpis prvih 3, drugih 3, tretjih 3... vnosov iz tabele. Kako?Oddelek: Programiranje | 1360 (1191) | mHook |