Pokud za klíčovým slovem SELECT uvedete hvězdičku, vypíší se všechny sloupce v tabulce. Pokud chcete vypsat jen některé sloupce, zapište je místo hvězdičky. Sloupce se budou vypisovat v tom pořadí, v jakém jste je zapsali.
rimmer1=> SELECT * FROM oddeleni;
nazev | telefon | prim_klic
-----------------+--------------+-----------
Sekretariát | 2 123 123 12 | 1
Právní oddělení | 2 123 123 11 | 2
Právní oddělení | 2 123 123 13 | 3
(3 rows)
rimmer1=> SELECT prim_klic,nazev FROM oddeleni;
prim_klic | nazev
-----------+-----------------
1 | Sekretariát
2 | Právní oddělení
3 | Právní oddělení
(3 rows)
Pokud se Vám nelíbí název nějakého sloupce, pak jej můžete nechat
vytisknout pod jiným jménem pomocí AS. (Jméno sloupce v
tabulce se nezmění).
Dokonce můžete vytvořit nový sloupec, který bude obsahovat (pozměněné) hodnoty z jiného sloupce. (Výpis je trochu zkrácen).rimmer1=> SELECT prijmeni AS niemandi,rodne_cislo FROM zamestnanci rimmer1-> WHERE plat <= 10000; niemandi | rodne_cislo ----------+------------- Pavova | 8001010601 Pavova | 8001010602 Osel | 8001010610 (3 rows)
Všimněte si, že názvy sloupečků musí být ve dvojitých uvozovkách (do jednoduchých uvozovek se dává datový typ řetězec), protože obsahují mezeru! Je lepší používat místo mezer podtržítka.rimmer1=> SELECT prijmeni, jmeno, plat AS "hruby plat", rimmer1-> plat-(plat/100)*20 AS "cisty plat" FROM zamestnanci; prijmeni | jmeno | hruby plat | cisty plat ----------+---------+------------+------------ Pavova | Lenka | 10000 | 8000 Pavova | Jana | 10000 | 8000 Mala | Jana | 12000 | 9600 Pavova | Lenka | 15000 | 12000 ... (10 rows)
Výpis je opět zkrácen. První tři sloupce jsou vybrány z tabulky zamestnanci, poslední dva z tabulky oddeleni. Takový výpis nám však mnoho neřekne. Možná Vás již napadlo, jak vybrat tabulku s hodnotami, které budou dávat smysl. Využijeme primárního klíče, pomocí kterého vybereme pouze ty řádky, kde reference oddeleni_id z tabulky zamestnanci odpovídá primárnímu klíči tabulky oddeleni. Takto se využívá relace mezi tabulkami.rimmer1=> SELECT jmeno,prijmeni,oddeleni_id,prim_klic,nazev AS oddeleni rimmer1-> FROM oddeleni,zamestnanci; jmeno | prijmeni | oddeleni_id | prim_klic | oddeleni ---------+----------+-------------+-----------+----------------- Lenka | Pavova | 1 | 1 | Sekretariat Jana | Pavova | 1 | 1 | Sekretariat Jana | Mala | 1 | 1 | Sekretariat Lenka | Pavova | 2 | 1 | Sekretariat Tom | Jerry | 2 | 1 | Sekretariat Martin | Luter | 2 | 1 | Sekretariat Leopold | King | 2 | 1 | Sekretariat Tomas | Mann | 3 | 1 | Sekretariat Vasek | Trn | 3 | 1 | Sekretariat Stary | Osel | 3 | 1 | Sekretariat Lenka | Pavova | 1 | 2 | Pravni oddeleni Jana | Pavova | 1 | 2 | Pravni oddeleni Jana | Mala | 1 | 2 | Pravni oddeleni .... Stary | Osel | 3 | 3 | Pravni oddeleni (30 rows)
Nyní již můžete na první pohled vidět, kdo pracuje v jakém oddělení. Jistě by jste již sami dokázali zjistit jedním příkazem, v jakém oddělení pracuje zaměstnanec Vasek Trn:rimmer1=> SELECT jmeno,prijmeni,oddeleni_id,prim_klic,nazev AS oddeleni rimmer1-> FROM oddeleni,zamestnanci WHERE oddeleni_id = prim_klic; jmeno | prijmeni | oddeleni_id | prim_klic | oddeleni ---------+----------+-------------+-----------+----------------- Lenka | Pavova | 1 | 1 | Sekretariat Jana | Pavova | 1 | 1 | Sekretariat Jana | Mala | 1 | 1 | Sekretariat Lenka | Pavova | 2 | 2 | Pravni oddeleni Tom | Jerry | 2 | 2 | Pravni oddeleni Martin | Luter | 2 | 2 | Pravni oddeleni Leopold | King | 2 | 2 | Pravni oddeleni Tomas | Mann | 3 | 3 | Pravni oddeleni Vasek | Trn | 3 | 3 | Pravni oddeleni Stary | Osel | 3 | 3 | Pravni oddeleni (10 rows)
rimmer1=> SELECT nazev FROM oddeleni,zamestnanci WHERE oddeleni_id = prim_klic
rimmer1-> AND jmeno='Vasek' AND prijmeni='Trn';
nazev
-----------------
Pravni oddeleni
(1 row)
V případě, že se ve dvou tabulkách
schodují názvy sloupců, volají se přes tzv. tečkovou notaci.
SELECT nazev_tabulky1.nazev_sloupce, nazev_tabulky2 .nazev_sloupce FROM nazev_tabulky1, nazev_tabulky2;
Ke spojování tabulek se ještě později dostaneme a probereme je trochu podrobněji.
CREATE VIEW nazev_pohledu AS SELECT ...
Příkaz SELECT můžete použít se všemi možnými omezeními a volbami. Pohled do tabulky je vždy aktuální. Změníte-li tedy hodnoty tabulek ze kterých jste pohled vytvářeli, bude pohled do tabulky pohledem do těchto aktualizovaných tabulek.
Nyní máme vytvořen pohled pracovni_pozice a můžeme z něj získávat data jako z jakékoliv tabulky.rimmer1=> CREATE VIEW pracovni_pozice AS rimmer1-> SELECT rodne_cislo,prijmeni,jmeno,nazev AS oddeleni rimmer1-> FROM oddeleni,zamestnanci WHERE oddeleni_id = prim_klic; CREATE
Všimněte si, že můžeme z tohoto pohledu zjistit, kdo pracuje v právním oddělení, ale nemůžeme již zjistit v kterém (máme dvě právní oddělení). Kdybychom to chtěli, museli bychom do pohledu zahrnout sloupec primárních klíčů oddělení.rimmer1=> SELECT * FROM pracovni_pozice WHERE oddeleni = 'Sekretariat'; rodne_cislo | prijmeni | jmeno | oddeleni -------------+----------+-------+------------- 8001010601 | Pavova | Lenka | Sekretariat 8001010602 | Pavova | Jana | Sekretariat 8001010603 | Mala | Jana | Sekretariat 8001010612 | Novy | Pan | Sekretariat (4 rows)
Poznámka: Pohledy můžte vypsat metapříkazem \dv (nebo \d).
Tato tabulka nebude po vytvoření s původní tabulkou (tabulkami) mít již nic společného. Pokud původní tabulku aktualizujete, této nové tabulky se to nijak nedotkne!
Vytvářet novou tabulku tímto způsobem se hodí například v případě, že chcete zrušit nějaký sloupec. Nejdříve vytvoříte tabulku, která bude obsahovat všechny sloupce původní tabulky kromě toho, který chcete zrušit, poté původní tabulku zrušíte a novou tabulku přejmenujete původním jménem.
Vyzkoušíme na příkladě. Nejdříve vytvoříme tabulku se třemi sloupci a poté do nich vložíme nějaké hodnoty.
Nyní vytvoříme novou tabulku pokus2, která bude obsahovat jen sloupce sl3 a sl2 v tomto pořadí.rimmer1=> CREATE TABLE pokus (sl1 integer,sl2 char(20),sl3 float); CREATE rimmer1=> INSERT INTO pokus VALUES (1,'jedna',1.0); INSERT 19493 1 rimmer1=> INSERT INTO pokus VALUES (2,'dva',2.2); INSERT 19494 1 rimmer1=> INSERT INTO pokus VALUES (3,'tri cele tri',3.3); INSERT 19495 1 rimmer1=> SELECT * FROM pokus; sl1 | sl2 | sl3 -----+----------------------+----- 1 | jedna | 1 2 | dva | 2.2 3 | tri cele tri | 3.3 (3 rows)
Teď můžeme tabulku pokus smazat a tabulku pokus2 přejmenovat na pokus.rimmer1=> CREATE TABLE pokus2 AS SELECT sl3,sl2 FROM pokus; SELECT
rimmer1=> DROP TABLE pokus; DROP rimmer1=> ALTER TABLE pokus2 RENAME TO pokus; ALTER rimmer1=> SELECT * FROM pokus; sl3 | sl2 -----+---------------------- 1 | jedna 2.2 | dva 3.3 | tri cele tri (3 rows)
Poznámka: V některých jiných databázých založených na SQL lze smazat sloupec pomocí ALTER TABLE. Třeba se toho jednou dočkáme i v PostgreSQL. Prostudujte si dokumentaci.
