MySQL Tahák

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