Chcete-li tento koncept plně rozvinout, otevřete ve svém systému nainstalovaný shell příkazového řádku PostgreSQL. Pokud nechcete začít pracovat s výchozími možnostmi, zadejte název serveru, název databáze, číslo portu, uživatelské jméno a heslo pro konkrétního uživatele. Pokud chcete pracovat s výchozími parametry, nechejte všechny možnosti prázdné a stiskněte Enter every option. Nyní je prostředí příkazového řádku připraveno pracovat.
Příklad 01: Definování dat typu pole
Je dobré si prostudovat základy, než přejdete k úpravám hodnot pole v databázi. Zde je způsob, jak určit seznam typů textu. Můžete vidět, že výstup zobrazil seznam typů textů pomocí klauzule SELECT.
>> SELECT 'Aqsa, Raza, Saeed' :: text [];
Typ dat musí být definován při psaní dotazu. PostgreSQL nerozpozná typ dat, pokud se zdá, že jde o řetězec. Alternativně můžeme použít formát ARRAY [] k jeho určení jako typu řetězce, jak je uvedeno níže v dotazu. Z výstupu uvedeného níže můžete vidět, že data byla načtena jako typ pole pomocí dotazu SELECT.
>> SELECT ARRAY ['Aqsa', 'Raza', 'Saeed'];
Když vyberete stejná data pole s dotazem SELECT při použití klauzule FROM, nefunguje to tak, jak by mělo. Zkuste například níže uvedený dotaz klauzule FROM v prostředí. Zkontrolujete, že se objeví chyba. Důvodem je, že klauzule SELECT FROM předpokládá, že načítaná data jsou pravděpodobně skupina řádků nebo některé body z tabulky.
>> SELECT * FROM ARRAY ['Aqsa', 'Raza', 'Saeed'];
Příklad 02: Převést pole na řádky
ARRAY [] je funkce, která vrací atomovou hodnotu. Výsledkem je, že se hodí pouze k příkazu SELECT a nikoli k klauzuli FROM, protože naše data nebyla ve formě řádku. Proto jsme ve výše uvedeném příkladu dostali chybu. Zde je způsob použití funkce UNNEST k převodu polí do řádků, zatímco váš dotaz nefunguje s klauzulí.
>> ZVOLIT NEJNEST (ARRAY ['Aqsa', 'Raza', 'Saeed']);
Příklad 03: Převést řádky do pole
Chcete-li řádky znovu převést na pole, musíme v rámci dotazu definovat konkrétní dotaz. Zde musíte použít dva dotazy SELECT. Interní výběrový dotaz převádí pole na řádky pomocí funkce UNNEST. Zatímco externí dotaz SELECT opět převádí všechny tyto řádky do jednoho pole, jak je znázorněno na obrázku citovaném níže. Dávej si pozor; musíte použít menší hláskování 'pole' v externím dotazu SELECT.
>> SELECT array (SELECT UNNEST (ARRAY ['Aqsa', 'Raza', 'Saeed']));;
Příklad 04: Odebrání duplikátů pomocí klauzule DISTINCT
DISTINCT vám pomůže extrahovat duplikáty z jakékoli formy dat. Nutně však vyžaduje použití řádků jako dat. To znamená, že tato metoda funguje pro celá čísla, text, plováky a další datové typy, ale pole nejsou povolena. Chcete-li odebrat duplikáty, musíte nejprve převést data typu pole do řádků pomocí metody UNNEST. Poté budou tyto převedené datové řádky předány klauzuli DISTINCT. Níže můžete vidět letmý pohled na to, že pole bylo převedeno do řádků, poté byly pomocí klauzule DISTINCT načteny pouze odlišné hodnoty z těchto řádků.
>> SELECT DISTINCT UNNEST ('Aqsa, Raza, Saeed, Raza, Uzma, Aqsa' :: text []);
Pokud potřebujete pole jako výstup, použijte funkci array () v prvním dotazu SELECT a v dalším dotazu SELECT použijte klauzuli DISTINCT. Ze zobrazeného obrázku můžete vidět, že výstup byl zobrazen ve formě pole, nikoli v řádku. Zatímco výstup obsahuje pouze odlišné hodnoty.
>> SELECT array (SELECT DISTINCT UNNEST ('Aqsa, Raza, Saeed, Raza, Uzma, Aqsa' :: text []));
Příklad 05: Odebrání duplikátů při použití klauzule ORDER BY
Můžete také odstranit duplicitní hodnoty z pole typu float, jak je znázorněno níže. Spolu s odlišným dotazem použijeme klauzuli ORDER BY k získání výsledku v pořadí řazení konkrétní hodnoty. Vyzkoušejte níže uvedený dotaz v prostředí příkazového řádku.
>> VYBRAT NEJMENŠÍ NEJNOVĚJŠÍ ('2,85, 2.73, 2.85, 1.8, 2.73 ':: float []) OBJEDNAT NA 1;Nejprve bylo pole převedeno do řádků pomocí funkce UNNEST; pak budou tyto řádky seřazeny do vzestupného pořadí pomocí klauzule ORDER BY, jak je znázorněno níže.
Chcete-li řádky převést znovu na pole, použijte stejný výběrový dotaz v prostředí a při jeho použití s malou funkcí abecedního pole (). Můžete se podívat na výstup níže, že pole bylo nejprve převedeno do řádků, poté byly vybrány pouze odlišné hodnoty. Nakonec budou řádky znovu převedeny do pole.
>> SELECT array (SELECT DISTINCT UNNEST ('2,85, 2.73, 2.85, 1.8, 2.73 ':: float []));
Závěr:
Nakonec jste úspěšně implementovali každý příklad z této příručky. Doufáme, že při provádění metody UNNEST (), DISTINCT a array () v příkladech nemáte žádný problém.