CRUD operace
Tato stránka obsahuje informace o CRUD operacích (CREATE READ UPDATE DELETE). Nachází se zde příkaz INSERT, SELECT, UPDATE a DELETE.
INSERT
Příkaz INSERT slouží ke vložení nové položky do tabulky. Tento příkaz použijeme tak, že napíšeme text 'INSERT INTO' a za něj jméno tabulky do které chceme novou položku vložit. Poté do závorek napíšeme do kterých sloupců tabulky budeme chtít vkládat, za závorky napíšeme text 'VALUES' a do dalších závorek napíšeme hodnoty, které chceme do sloupců vložit. Lépe příkaz INSERT pochopíte z následující ukázky než z textu.
INSERT INTO users (username, email) # do tabulky users vložíme novou položku a nastavíme jí hodnoty ve sloupcích username a email VALUES ('Pavel', 'pavel123@gmail.com'); # do sloupce username se uloží hodnota 'Pavel' a do sloupce email se uloží hodnota 'pavel123@gmail.com'
Pokud chceme do tabulky vložit zároveň více hodnot, tak můžeme na konec příkazu INSERT přidat další hodnoty v závorkách a oddělit je čárkou.
INSERT INTO users (username, email) VALUES ('Pavel', 'pavel123@gmail.com'), # první položka ('Marek', 'marek456@gmail.com'), # druhá položka ('Mirek', 'mirek789@gmail.com'); # třetí položka
Existuje ještě druhá verze příkazu INSERT INTO. Ukazuje ji následující ukázka.
INSERT INTO users SET username = 'Pavel', email = 'pavel123@gmail.com';
SELECT
Příkaz SELECT slouží k získání dat z tabulky. Tento příkaz použijeme tak, že napíšeme text 'SELECT' a za něj co za sloupce chceme získat nebo znak * pokud chceme získat všechno. Dále napíšeme text 'FROM' a jméno tabulky ze které chceme data získat.
SELECT * FROM users; # vrátí všechny hodnoty sloupců všech položek v tabulce
Názvy sloupců ze kterých chceme získat hodnoty oddělujeme čárkou pokud jich chceme získat víc.
SELECT username, email FROM users; # vrátí všechny hodnoty sloupců username a email všech položek v tabulce
Získání položek podle podmínky
Pokud chceme z tabulky získat jen položky, které projdou nějakou podmínkou, tak můžeme za příkaz SELECT připsat slovo WHERE a podmínku, která musí platit aby se položka vrátila.
SELECT * FROM users WHERE username = 'Marek'; # vrátí všechny položky, které mají ve sloupci username hodnotu 'Marek'
Změnění jména získaného sloupce
Změnit jméno pod kterém se nám sloupec z tabulky vrátí můžeme zapsáním slova 'AS' a jména za sloupec, který chceme získat. Uvozovky používat nemusíme pokud naše jméno neobsahuje mezery.
SELECT username AS uzivatel FROM users; # získání hodnot ze sloupce username pod jménem uzivatel
Získání položek, které nejsou stejné
Pokud chceme zamezit tomu abychom z tabulky získali položky, které mají stejné hodnoty, tak můžeme do příkazu SELECT připsat slovo DISTINCT.
SELECT DISTINCT * FROM users;
Seřazení získaných položek
Pokud si chceme položky při jejich získání z tabulky nějak seřadit, tak to můžeme provést připsáním textu 'ORDER BY' a sloupce podle kterého chceme položky seřadit.
SELECT * FROM users ORDER BY age; # seřazení získaných položek podle sloupce age
Pokud chceme položky seřadit podle více sloupců, tak můžeme, stačí je oddělit čárkou.
SELECT * FROM users ORDER BY age, username; # seřazení získaných položek podle sloupce age a potom ještě podle sloupce username
Defaultně se položky řadí vzestupně, pokud bychom je chtěli seřadit sestupně, tak musíme připsat slovo DESC.
SELECT * FROM users ORDER BY age; # seřazení vzestupně SELECT * FROM users ORDER BY age ASC; # seřazení vzestupně SELECT * FROM users ORDER BY age DESC; # seřazení sestupně
Limitování získaných položek
Pokud chceme limitovat počet položek, které získáme z tabulky, tak můžeme k příkazu SELECT připsat slovo LIMIT s maximálním počtem položek, které můžeme z tabulky získat.
SELECT * FROM users LIMIT 3; # získání jen tří položek z tabulky
Pokud bychom chtěli nějaké řádky v tabulce přeskočit, tak můžeme LIMIT napsat se dvěma čárkou oddělenými čísly. První číslo říká od jakého řádku chceme položky začít získávat a druhé číslo říká kolik položek z tabulky chceme maximálně získat. Řádky se číslují od nuly, takže první řádek má číslo nula.
SELECT * FROM users LIMIT 1,3; # získání tří položek od druhého řádku tabulky
Spočítání získaných položek
Pomocí funkce COUNT můžeme spočítat získané položky. Pokud tuto funkci použijeme, tak se nám řádky sjednotí dohromady, takže získáme jen jednu položku (výsledek).
SELECT COUNT(*) AS pocet_polozek FROM users;
Součet všech získaných hodnot ve sloupci
Pomocí funkce SUM můžeme vypočítat součet všech získaných hodnot v nějakém sloupci. Pokud tuto funkci použijeme, tak se nám řádky sjednotí dohromady, takže získáme jen jednu položku (výsledek).
SELECT SUM(age) AS soucet FROM users;
Průměr všech získaných hodnot ve sloupci
Pomocí funkce AVG můžeme vypočítat průměr všech získáných hodnot v nějakém sloupci. Pokud tuto funkci použijeme, tak se nám řádky sjednotí dohromady, takže získáme jen jednu položku (výsledek).
SELECT AVG(age) AS prumer FROM users;
Zaokrouhlení získaných hodnot ve sloupci
Pokud máme v nějakém sloupci při získávání položek z tabulky čísla s desetinnou částí, tak je můžeme zaokrouhlit pomocí funkce ROUND.
SELECT name, ROUND(price, 2) AS price FROM products; # získání hodnot z tabulky products a zaokrouhlení čísel ve sloupci price na dvě desetinná místa
Získání položky s nejmenší hodnotou ve sloupci
Pokud chceme z tabulky získat položku, která má v nějakém sloupci nejmenší hodnotu, tak můžeme použít funkci MIN. Tuto funkci bychom mohli napsat přímo k seznamu sloupců, které chceme z tabulky získat. To bychom ale získali jen nejmenší hodnotu a ne položku. Pokud chceme získat celou položku, která má v nějakém sloupci nejmenší hodnotu, tak funkci MIN musíme použít se slovem WHERE, kde vytvoříme poddotaz (dotaz uvnitř dotazu). Ale spuštění dvou dotazů namísto jednoho je pomalejší, takže je lepší položky seřadit a použít slovo LIMIT.
SELECT * FROM users # první způsob WHERE age = (SELECT MIN(age) FROM users); # spouští se dva dotazy SELECT * FROM users # druhý způsob ORDER BY age LIMIT 1; # spouští se jen jeden dotaz (mělo by to být rychlejší)
Získání položky s největší hodnotou ve sloupci
Pokud chceme z tabulky získat položku, která má v nějakém sloupci největší hodnotu, tak můžeme použít funkci MAX. Tuto funkci bychom mohli napsat přímo k seznamu sloupců, které chceme z tabulky získat. To bychom ale získali jen největší hodnotu a ne položku. Pokud chceme získat celou položku, která má v nějakém sloupci největší hodnotu, tak funkci MAX musíme použít se slovem WHERE, kde vytvoříme poddotaz (dotaz uvnitř dotazu). Ale spuštění dvou dotazů namísto jednoho je pomalejší, takže je lepší položky seřadit a použít slovo LIMIT.
SELECT * FROM users # první způsob WHERE age = (SELECT MAX(age) FROM users); # spouští se dva dotazy SELECT * FROM users # druhý způsob ORDER BY age DESC LIMIT 1; # spouští se jen jeden dotaz (mělo by to být rychlejší)
Nastavení hodnoty když je ve sloupci NULL
Pokud nechceme mít v nějakém sloupci při získávání položek z tabulky NULL, tak můžeme použít funkci IFNULL. Tato funkce nám umožňuje nastavit nějakou hodnotu, když se ve sloupci objeví NULL.
SELECT IFNULL(username, 'nepojmenovany') AS username FROM users; # pokud bude ve sloupci username NULL, tak se nastaví hodnota 'nepojmenovany'
Seskupení řádků - GROUP BY
Pomocí GROUP BY můžeme seskupit získané řádky podle nějakého sloupce do skupin. Když potom zavoláme funkce jako je např. COUNT, tak se řádky spočítají jen ve svých skupinách. Takže získáme nějaký výsledek v každé skupině.
# následující kód nám pro každý věk (age) spočítá, kolik máme v tabulce uživatelů SELECT age, COUNT(*) AS pocet # funkce COUNT se provádí v každé skupině FROM users GROUP BY age; # seskupíme řádky podle sloupce age
Podmínka pro přidání řádku do skupiny - HAVING
Zapsáním HAVING za GROUP BY můžeme specifikovat podmínku, kterou musí položka (řádek) splnit aby se zařadila do nějaké skupiny.
# následující kód nám spočítá pro každý věk (age), který je větší nebo rovno 18 počet uživatelů SELECT age, COUNT(*) AS pocet FROM users GROUP BY age HAVING age >= 18; # jen řádky, které mají hodnotu ve sloupci age větší nebo rovnou 18 se zařadí do skupiny
UPDATE
Příkaz UPDATE slouží ke změnění položek v tabulce. Tento příkaz použijeme tak, že napíšeme text 'UPDATE', jméno tabulky, text 'SET' a sloupec, kterému přiřadíme novou hodnotu pomocí znaku '='. Takto ale změníme všechny položky v tabulce, pokud bychom chtěli změnit jen nějaké, tak musíme použít WHERE.
UPDATE users SET score = 0; # změnění hodnoty sloupce score u všech položek na hodnotu 0
Pokud chceme v tabulce změnit jen nějaké položky, tak musíme za příkaz UPDATE připsat slovo WHERE a podmínku, kterou položka musí splnit aby se mohla změnit.
UPDATE users SET score = 0 WHERE username = 'Vincent'; # jen položka, která má ve sloupci username uloženou hodnotu 'Vincent' se změní
Pokud bychom chtěli měnit více sloupců, tak je jednoduše oddělíme čárkou.
UPDATE users SET age = 30, email = 'vinc321@yahoo.com' WHERE username = 'Vincent';
DELETE
Příkaz DELETE slouží ke smazání položek z tabulky. Pokud chceme smazat všechny položky z tabulky, tak napíšeme text 'DELETE FROM' a jméno tabulky, ze které chceme položky smazat.
DELETE FROM users; # smazání všech položek v tabulce users
Pokud chceme smazat jen nějaké položky v tabulce, tak za příkaz DELETE napíšeme slovo WHERE a podmínku, která se musí splnit aby se položka smazala.
DELETE FROM users WHERE age < 6; # smazání položek, které splní podmínku
Poddotazy
Pokud chceme, tak si můžeme vytvořit dotaz uvnitř dotazu. Uděláme to zapsáním dotazu do závorky jak ukazuje následující ukázka.
SELECT * FROM users WHERE age = (SELECT MAX(age) FROM users); # dotaz uvnitř dotazu
Výpis varování
Někdy se nám může stát, že nám MySQL například při vložení položky do tabulky napíše, že pro nás má nějaké varování. Děje se to například když se při vložení položky do tabulky ořízne řetězec aby se vešel do sloupce. Toto varování můžeme zobrazit pomocí příkazu 'SHOW WARNINGS'.
# může se nám stát, že nám MySQL řekne, že pro nás má nějaké varování: # Query OK, 1 row affected, 1 warning (0.01 sec) <- například SHOW WARNINGS; # tímto příkazem si varování zobrazíme