C# - Egy hasznos SQL utasítás

forráskód letöltése
Az adatbáziskezelő rendszerek nyelvei általában tartalmaznak egy sor beépített függvényt, melyek hasznosak lehetnek az olyan műveletekben, ahol az adott oszlop értékein valamilyen műveletet kell elvégezni. Lekérdezhetjük a legnagyobb, vagy a legkisebb értéket az eredményhalmaz elemei közül. Azonban nem kapunk készen olyan metódust, mely megadná, hogy a sorozatban melyik elem az n. legnagyobb. Cikkünkben bemutatjuk, hogy oldható meg ez egy SQL utasítással. A cikk példája kipróbálható MS SQL Server és Oracle rendszeren is.
A megoldandó feladat tehát az, hogy miként határozhatjuk meg egy számokat tartalmazó oszlop elemei közül az n. legnagyobbat.
Példánkban elkészítettük a megoldást mind MS SQL Server, mind pedig Oracle rendszerben kipróbálható verzióban. A Form TabControl vezérlőjében a két fül alatt érhetők el a megvalósítások.
MS SQL Server
A MS SQL Server-t használó megoldásban a Northwind adatbázis Products tábláját használjuk fel, ezen belül a UnitPrice oszlop értékei közül kérdezzük le az elemek sorában a megadott számnak megfelelőt.
A Products táblában 62 darab, különböző árral rendelkező termék van, így a megadott számnak 1 és 62 közé kell esnie.
Az SQL-utasítás a következő az SQL Server verzióban:
SELECT UnitPrice
FROM Products a
WHERE <megadott szám>=
(SELECT COUNT(DISTINCT UnitPrice)
FROM Products b
WHERE a.UnitPrice <= b.UnitPrice)
Oracle
Az Oracle-t használó megoldásban a beépített SCOTT (jelszó TIGER) felhasználó sémájában megtalálható EMP adattáblát használjuk fel, ezen belül is a SAL oszlop elemeit. Itt 11 darab, különböző értékkel rendelkező elemet találunk, a megadott szám így 1 és 11 közöttinek kell lennie.
Értelemszerűen a SAL oszlopot feltüntetve az utasításban áll össze az Oracle-rendszerben lefuttatandó változat.
SELECT sal
FROM emp a
WHERE <megadott szám>=
(SELECT COUNT(DISTINCT sal)
FROM emp b
WHERE a.sal <= b.sal)
A művelet mindkét megvalósítás esetén a LEKÉRDEZÉS gombbal indítható, ekkor történik meg a SqlCommand, illetve az OleDbCommand komponensek CommandText property-jének feltöltése a kulcsfontosságú SQL-utasítással.