Spojování textu
Někdy chcete mít několik hodnot v jednom textu: název hry s jejím žánrem, jméno zákazníka s jeho e-mailem. Operátor ||, dvě svislé čáry, spojuje texty dohromady:
SELECT nazev || ' (' || zanr || ')'
FROM hry;| nazev || ' (' || zanr || ')' |
|---|
| Dragon Forge (RPG) |
| Pixel Racer (Závodní) |
| Moon Farm (Simulace) |
| … |
' (' a ')' jsou texty napsané přímo v dotazu. V SQL se text píše vždycky mezi apostrofy (jednoduché uvozovky): 'Ahoj', ' ('. Apostrofy nejsou součástí textu. Jen ukazují, kde text začíná a kde končí, a všechno mezi nimi zůstane přesně tak, jak je, i mezery a velká písmena. Bez apostrofů by SQLite slovo považovalo za název sloupce. Čísla se píšou bez apostrofů: 5, 0.8. Na české klávesnici napíšete apostrof pomocí Shift + ¨ a svislou čáru pomocí Alt Gr + W.
Typická chyba: název sloupce v apostrofech. 'mesto' není sloupec mesto, ale text „mesto“, takže SELECT jmeno, 'mesto' FROM zakaznici; ukáže v každém řádku slovo mesto. A dvojité uvozovky jsou pro názvy, jako alias "cena po slevě" v minulém cvičení, ne pro text. SQLite sice text ve dvojitých uvozovkách někdy promine, ale jen když žádný sloupec nemá stejný název: "mesto" je pořád sloupec. Jiné databáze ho nepromíjejí vůbec.
|| spojí i čísla, jako text: nazev || ' za ' || cena || ' Kč' dá Dragon Forge za 999 Kč. Pozor ale na výpočty: || má přednost před * a -, takže nazev || ' za ' || cena * 2 nejdřív spojí texty a pak celý text vynásobí dvěma, což nedává smysl (výsledek je 0). Výpočet dejte do závorek: nazev || ' za ' || (cena * 2).
Když je kterákoli ze spojovaných hodnot NULL, je celý výsledek NULL. Anna Kučerová nemá město, takže pro ni tento dotaz dá NULL, a ne „Anna Kučerová, “:
SELECT jmeno || ', ' || mesto AS zakaznik
FROM zakaznici;| zakaznik |
|---|
| Eva Novotná, Praha |
| Jakub Dvořák, Brno |
| Tereza Svobodová, Praha |
| Lukáš Procházka, Ostrava |
| NULL |
| … |
Jak místo NULL dát jinou hodnotu, se naučíte ve 4. lekci. A jak vidíte, spojený sloupec obvykle dostane alias; samotný výpočet by byl dlouhý název. Ještě poznámka: || funguje v SQLite, PostgreSQL i Oraclu, kdežto MySQL a SQL Server spojují texty funkcí CONCAT().
Jak psát:
Pokyny
Ukažte kontakty zákazníků ve tvaru, jaký používá e-mail: jeden sloupec s názvem kontakt, se jménem, mezerou a e-mailem ve špičatých závorkách, třeba Adéla Králová <adela.kralova@mail.cz>. Seřaďte je podle jména. Špičaté závorky napíšete na české klávesnici pomocí Alt Gr + čárka a Alt Gr + tečka. Výsledek začíná takto:
| kontakt |
|---|
| Adéla Králová <adela.kralova@mail.cz> |
| Anna Kučerová <anna.kucerova@mail.cz> |
| Eva Novotná <eva.novotna@mail.cz> |
| … |
Pod tím připravte texty na reklamní banner výprodeje, jako je Knight's Oath: nyní za 1499 Kč, s názvem hry a cenou o 100 Kč nižší. Ukažte je v jednom sloupci s názvem sleva, seřazené podle ceny od nejdražší:
| sleva |
|---|
| Knight's Oath: nyní za 1499 Kč |
| Goal Rush: nyní za 1199 Kč |
| Ice Hockey Pro: nyní za 1099 Kč |
| … |
Začněte programovat zdarma
11/12