Súgó - for - sql (dml) a lekérdezés több táblázata használatával

Egy SQL végrehajtásban implicit típusú konverziót lehet végrehajtani. Így például a T-SQL-ben a smallint és int típusú értékek összehasonlításakor vagy egyesítésénél. a smallint adatokat implicit módon int. A típusok kifejezett és implicit konverziójának részletei az MS SQL Server szolgáltatásban megtalálhatók a BOL-ban.

Egy példa. Kinyomtathatja a PC-notebookok átlagárát az "átlagár =" előszöveggel.
Próbálja meg végrehajtani a lekérdezést

SELECT 'Átlagár =' + AVG (ár) FROM laptop;


hibaüzenet jelenik meg

Az implicit konverzió a varchar típusú adatoktól a pénzig nem engedélyezett. A lekérdezés futtatásához használja a CONVERT funkciót.

Ez az üzenet azt jelenti, hogy a rendszer nem képes a varchar tipusú implicit átváltását a pénztípushoz. Ezekben a helyzetekben az explicit típusú konverzió segíthet. Ebben az esetben, amint azt a hibaüzenet jelzi, használhatja a CONVERT funkciót. Ez a funkció azonban nem szabványosított, ezért ajánlott a szabványos CAST kifejezés használata a hordozhatóság érdekében. Kezdjük vele.
Ha lekérdezzük a formanyomtatványt

SELECT 'Átlagár =' + CAST (AVG (ÁR) AS CHAR (15)) FROM laptop;


ennek eredményeként megkapjuk a szükségeseket:

Átlagos ár = 1410.44


Kifejezett CAST típusú konverziós kifejezést használtunk, hogy az átlagárat egy sztring ábrázoláshoz hozzuk létre. A CAST kifejezés szintaxisa nagyon egyszerű:

CAST (<выражение> AS <тип данных>)

Először is emlékeztetni kell arra, hogy nem lehetséges bármilyen típusú konverzió (a szabvány tartalmaz egy táblázatot a megengedett adattípusú konverziókról). Másodszor, a CAST függvénynek a NULL-nak megfelelő kifejezés értéke NULL lesz.
Tekintsünk még egy példát. meghatározza a hajóknak a hajók táblázatából történő indításának átlagos évét. érdeklődés

SELECT AVG (indított) FROM hajók;


1926-ban adja eredményét. Elvileg mindent helyes, tk. megkaptuk, amit kértünk, YEAR. Azonban a számtani átlag kb. 1926,2381 lesz. Itt meg kell jegyeznünk, hogy az összesített függvények (kivéve a COUNT függvényt, amely mindig egész számot ad vissza) örökli a feldolgozandó értékek adattípusát. Mivel az elindított mező egy egész mező, az átlagértéket a visszadobott törtrészből kaptuk (megjegyzés - nem kerekítve).
És ha érdekel az eredmény egy adott pontossággal, mondjuk, legfeljebb két tizedes pontossággal? Ha a CAST kifejezést átlagértékre alkalmazza, a fenti ok miatt nem fog semmit tenni. Tény, hogy

SELECT CAST (AVG (indított) AS NUMERIC (6,2)) A hajókról;


visszaadja az 1926.00 értéket. Ezért a CAST-ot az aggregált függvény argumentumára kell alkalmazni:

SELECT AVG (CAST (NUMBER (6,2))) A hajókról;


Az eredmény 1926,238095. Ismét, nem ez. Ennek az az oka, hogy a középérték kiszámításakor implicit típusú konverziót hajtottak végre. Tegyünk még egy lépést:

SELECT CAST (AVG (CAST (AS NUMERIC (6,2))) AS NUMERIC (6,2) A hajókról;


Ennek eredményeképpen megkapjuk, amire szükségünk van - 1926.24. Ez a megoldás azonban nagyon nehézkesnek tűnik. Tegyük fel az implicit típusú konverziót számunkra:

SELECT CAST (AVG (indított * 1.0) AS NUMERIC (6,2)) A hajókról;

Ie egy egészértékű argumentum implicit konverzióját egy pontos numerikus típushoz (EXACT NUMERIC) konvertáltuk, valósággal megszorozva, majd egy explicit leadást alkalmaztunk az aggregált függvény eredménytípusára.

Hasonló típusú konverziók végezhetők a CONVERT funkció használatával:

SELECT CONVERT (NUMERIC (6,2), AVG (indított * 1,0)) FROM hajók;

A CONVERT funkció a következő szintaxissal rendelkezik:

CONVERT (<тип данных>[(<длина>)] <выражение> [ <стиль>])

A CONVERT és a CAST funkció közötti fő különbség az, hogy az első lehetővé teszi a formázási adatokat (például a dátumidő típus időbeli adatait), amikor azokat egy karaktertípusra konvertálja, és meghatározza a fordított konverzió formátumát. Az opcionális stílus argumentum különböző egész értékei megfelelnek bizonyos formátumoknak. Tekintsük a következő példát


Itt konvertáljuk a dátum sztring ábrázolását a datetime típusra. akkor hajtsa végre a fordított átalakítást a formázás eredményének bizonyítására. Mivel a stílus argumentum értéke nincs megadva, az alapértelmezett értéket (0 vagy 100) használják. Ennek eredményeképpen kapunk


Az alábbiakban a stíluselmélet néhány további értéke és a fenti példában kapott eredmény. Ne felejtsük el, hogy a 100-nál nagyobb értékek egy négy számjegyű évkijelzőt eredményeznek.

A CASE nyilatkozat két szintaktikus írásmód egyikében használható:

1. forma
CASE <проверяемое выражение>
AMIKOR <сравниваемое выражение 1>
AKKOR <возвращаемое значение 1>
...
AMIKOR <сравниваемое выражение N>
AKKOR <возвращаемое значение N>
[ELSE <возвращаемое значение>]
VÉGE

2. forma
CASE
AMIKOR <предикат 1>
AKKOR <возвращаемое значение 1>
...
AMIKOR <предикат N>
AKKOR <возвращаемое значение N>
[ELSE <возвращаемое значение>]
VÉGE

Minden WHEN mondatnak azonos szintaktikai formában kell lennie, azaz. Nem lehet keverni az első és a második űrlapot. Amikor az első szintaxisformát használja, akkor a WHEN feltétel teljesül, amint a teszt kifejezés értéke megegyezik a WHEN záradékban megadott kifejezés értékével. A második szintaxis-forma használatakor a WHEN feltétel teljesül, amint a predikátum TRUE. Ha ez a feltétel teljesül, a CASE operátor adja vissza a megfelelő THEN záradékban megadott értéket. Ha egyik WHE feltétel sem teljesül, akkor az ELSE záradékban megadott érték kerül felhasználásra. ELSE hiányában. egy NULL értéket kap vissza. Ha több feltétel teljesül, az első THEN záradék értéke vissza lesz térve.
A fenti példában a CASE utasítás második formáját használtuk.
Megjegyezzük, hogy a NULL teszt esetében a standard rövidebb operátor - COALESCE. Ez az operátor tetszőleges számú paraméterrel rendelkezik, és az NULL-tól eltérő első értéket adja vissza. Két paraméter esetén a COALESCE (A, B) operátor egyenértékű az alábbi CASE utasítással.

ESETÉN, HOGY A NEM NULL, ÉS ELSŐ B VÉG

A fenti példa megoldása a COALESCE nyilatkozat használatakor a következőképpen írható át:

SELECT DISTINCT product.model,
COALESCE (CAST (CHAR (20) ár), "Nem elérhető") ár
FROM termék BAL JOIN pc c ON termék.model = c.model
WHERE product.type = 'pc';

A CASE nyilatkozat első szintaktikai formájának felhasználása a következő példában mutatható ki. Kinyomtassa az összes rendelkezésre álló PC modellt az áron. Jelöljük ki a legdrágább és legolcsóbb modelleket.

SELECT DISTINCT modell, ár,
CASE ár WHEN (SELECT MAX (ár) FROM pc), majd "A legdrágább"
Mikor (SELECT MIN (ár) FROM pc), majd "Legolcsóbb"
ELSE "Átlagár" END megjegyzés
Db-tól RENDELÉSI ár;

A lekérdezés eredményeképpen kapunk

Kapcsolódó cikkek