LIMIT klauslit ei saa kasutada MS Accessis, kuid saab kasutada mitmes teises SQL andmebaasisüsteemis. LIMIT n võimaldab päringu tulemusest väljastada esimesed n rida. SQL standard ei näe samuti ette LIMIT klauslit. Samas saab SQL standardi kohaselt kasutada FETCH FIRST n ROWS ONLY klauslit, mis teeb sama välja kui LIMIT.
Üks ülesannete klass, kus LIMIT'it ebaõigelt kasutatakse, on kõigi nende ühte tüüpi olemite leidmine, millel mingi tunnuse väärtus on kõige suurem või kõige väiksem.
Esimene lahendus on vale, sest võib olla mitu ametit, millel on ühtemoodi kõige suurem palk. Esimene lahendus leiab ainult ühe sellise ameti (millise, on ennustamatu). Teine leiab kõik sellised ametid.
MS Accessis oleks õige lahendus ka selline. TOP predikaat leiab minimaalse palga järgi kahanevalt sorteeritud ametite hulgast kõige esimese (e kõige suurema) minimaalse palgaga ametid.
MS SQL Serveris tuleks sama tulemuse saavutamiseks kasutada TOP ... WITH TIES.
Samuti annab õige tulemuse see päring, mis töötab näiteks PostgreSQLis. WITH TIES tagab, et vajadusel on päringu tulemuses rohkem kui üks rida.
Oluline on üle rõhutada, et TOP ja FETCH FIRST 1 ROWS WITH TIES lahendused eeldavad ridade sorteerimist - muidu on tulemus juhuslik rida.
Üks ülesannete klass, kus LIMIT'it ebaõigelt kasutatakse, on kõigi nende ühte tüüpi olemite leidmine, millel mingi tunnuse väärtus on kõige suurem või kõige väiksem.
Leia ametid, millel on kõige suurem min_palk väärtus.
Vale. Sorteerin read minimaalse palga jälgi kahanevalt ja siis valin ridade hulgast kõige esimese.
SELECT amet_kood, min_palk
FROM Amet
ORDER BY min_palk DESC
LIMIT 1;
SELECT *
FROM Amet
ORDER BY palk DESC
FETCH FIRST 1 ROWS ONLY;
Õige. Leian ametid, mille minimaalne palk on kõigi minimaalsete palkade hulgast kõige suurem.
SELECT amet_kood, min_palk
FROM Amet
WHERE min_palk=(SELECT Max(min_palk) AS m FROM Amet);
Esimene lahendus on vale, sest võib olla mitu ametit, millel on ühtemoodi kõige suurem palk. Esimene lahendus leiab ainult ühe sellise ameti (millise, on ennustamatu). Teine leiab kõik sellised ametid.
MS Accessis oleks õige lahendus ka selline. TOP predikaat leiab minimaalse palga järgi kahanevalt sorteeritud ametite hulgast kõige esimese (e kõige suurema) minimaalse palgaga ametid.
SELECT TOP 1 amet_kood, min_palk
FROM Amet
ORDER BY min_palk DESC;
MS SQL Serveris tuleks sama tulemuse saavutamiseks kasutada TOP ... WITH TIES.
SELECT TOP 1 WITH TIES amet_kood, min_palk
FROM Amet
ORDER BY min_palk DESC;
Samuti annab õige tulemuse see päring, mis töötab näiteks PostgreSQLis. WITH TIES tagab, et vajadusel on päringu tulemuses rohkem kui üks rida.
SELECT *
FROM Amet
ORDER BY palk DESC
FETCH FIRST 1 ROWS WITH TIES;
Oluline on üle rõhutada, et TOP ja FETCH FIRST 1 ROWS WITH TIES lahendused eeldavad ridade sorteerimist - muidu on tulemus juhuslik rida.
Hinda postitust:
Keskmine hinne : Pole veel hinnanguid!