Ak chcete tento koncept úplne rozpracovať, otvorte vo svojom systéme nainštalovaný shell príkazového riadku PostgreSQL. Ak nechcete začať pracovať s predvolenými možnosťami, zadajte názov servera, názov databázy, číslo portu, používateľské meno a heslo pre konkrétneho používateľa. Ak chcete pracovať s predvolenými parametrami, nechajte všetky možnosti prázdne a stlačte kláves Enter every option. Teraz je váš shell príkazového riadku pripravený pracovať.
Príklad 01: Definujte údaje typu poľa
Pred prechodom na úpravu hodnôt poľa v databáze je dobré preštudovať si základy. Toto je spôsob, ako určiť zoznam typov textu. Môžete vidieť, že výstup zobrazil zoznam typov textu pomocou klauzuly SELECT.
>> SELECT 'Aqsa, Raza, Saeed' :: text [];
Počas písania dotazu musí byť definovaný typ údajov. PostgreSQL nerozpozná typ údajov, ak sa zdá, že ide o reťazec. Prípadne by sme mohli použiť formát ARRAY [] na jeho zadanie ako typu reťazca, ako je zobrazené nižšie v dotaze. Z výstupu uvedeného nižšie môžete vidieť, že údaje boli načítané ako typ poľa pomocou dotazu SELECT.
>> SELECT ARRAY ['Aqsa', 'Raza', 'Saeed'];
Keď pri použití klauzuly FROM vyberiete rovnaké údaje poľa s dotazom SELECT, nefunguje to tak, ako by malo. Vyskúšajte napríklad nasledujúci dotaz klauzuly FROM v shelli. Skontrolujete, či nepríde k chybe. Je to preto, lebo klauzula SELECT FROM predpokladá, že načítané údaje sú pravdepodobne skupinou riadkov alebo niektorými bodmi z tabuľky.
>> SELECT * FROM ARRAY ['Aqsa', 'Raza', 'Saeed'];
Príklad 02: Prevod poľa do riadkov
ARRAY [] je funkcia, ktorá vracia atómovú hodnotu. Vo výsledku sa to hodí iba k SELECT a nie k doložke FROM, pretože naše údaje neboli vo forme „riadku“. Preto sa vo vyššie uvedenom príklade vyskytla chyba. Týmto spôsobom je možné pomocou funkcie UNNEST prevádzať polia na riadky, zatiaľ čo váš dotaz nefunguje s klauzulou.
>> ZVOLIŤ NEZNÁM (ARRAY ['Aqsa', 'Raza', 'Saeed']);
Príklad 03: Prevod riadkov do poľa
Ak chcete znova previesť riadky do poľa, musíme na to definovať konkrétny dotaz v rámci dotazu. Tu musíte použiť dva dotazy SELECT. Interný výberový dotaz prevádza pole na riadky pomocou funkcie UNNEST. Zatiaľ čo externý dotaz SELECT opäť prevádza všetky tieto riadky do jedného poľa, ako je to znázornené na obrázku citovanom nižšie. Pozor; v externom dotaze SELECT musíte použiť menšie pravopisné slová 'array'.
>> SELECT array (SELECT UNNEST (ARRAY ['Aqsa', 'Raza', 'Saeed']));;
Príklad 04: Odstránenie duplikátov pomocou klauzuly DISTINCT
DISTINCT vám môže pomôcť extrahovať duplikáty z akejkoľvek formy údajov. Nevyhnutne si to však vyžaduje použitie riadkov ako údajov. To znamená, že táto metóda funguje pre celé čísla, text, plaváky a ďalšie dátové typy, ale polia nie sú povolené. Ak chcete odstrániť duplikáty, musíte najskôr previesť údaje typu svojho poľa do riadkov pomocou metódy UNNEST. Potom sa tieto prevedené riadky s údajmi odovzdajú do klauzuly DISTINCT. Nižšie môžete vidieť výstup, že pole bolo prevedené do riadkov, potom boli pomocou klauzule DISTINCT načítané iba odlišné hodnoty z týchto riadkov.
>> SELECT DISTINCT UNNEST ('Aqsa, Raza, Saeed, Raza, Uzma, Aqsa' :: text []);
Ak potrebujete ako výstup pole, použite v prvom dotaze SELECT funkciu array () a v nasledujúcom dotaze SELECT použite klauzulu DISTINCT. Zo zobrazeného obrázka vidíte, že výstup bol zobrazený vo forme poľa, nie v riadku. Zatiaľ čo výstup obsahuje iba odlišné hodnoty.
>> SELECT array (SELECT DISTINCT UNNEST ('Aqsa, Raza, Saeed, Raza, Uzma, Aqsa' :: text []));
Príklad 05: Odstránenie duplikátov pri použití klauzuly ORDER BY
Duplicitné hodnoty môžete tiež odstrániť z poľa typu float, ako je uvedené nižšie. Spolu s odlišným dotazom použijeme klauzulu ORDER BY na získanie výsledku v poradí zoradenia konkrétnej hodnoty. Vyskúšajte to nižšie uvedeným dotazom v prostredí príkazového riadku.
>> VYBERTE OKRESNÝ NEZNÁM ('2,85, 2.73, 2.85, 1.8, 2.73 ':: float []) OBJEDNAŤ PO 1;Najskôr bolo pole prevedené do riadkov pomocou funkcie UNNEST; potom budú tieto riadky zoradené vzostupne pomocou klauzuly ORDER BY, ako je uvedené nižšie.
Ak chcete riadky znova previesť na pole, použite rovnaký príkaz SELECT v prostredí Shell a zároveň ho použite s malou funkciou abecedného poľa (). Môžete sa pozrieť na výstup nižšie, že pole bolo najskôr prevedené na riadky, potom boli vybrané iba odlišné hodnoty. Nakoniec budú riadky znova prevedené do poľa.
>> SELECT pole (SELECT DISTINCT UNNEST ('2,85, 2.73, 2.85, 1.8, 2.73 ':: float []));
Záver:
Nakoniec ste úspešne implementovali všetky príklady z tejto príručky. Dúfame, že pri vykonávaní metód UNNEST (), DISTINCT a array () v príkladoch nemáte problém.