SQL Příklady a Otázky
1. Jaké jsou základní příkazy v SQL a k čemu slouží?
Mezi základní SQL příkazy patří:
- SELECT – dotazování dat z tabulek
- INSERT – vkládání nových záznamů
- UPDATE – aktualizace existujících záznamů
- DELETE – mazání záznamů
- CREATE – vytváření tabulek, indexů, pohledů atd.
- ALTER – změna struktury existujících objektů
- DROP – odstranění tabulek, indexů atd.
2. Jaké jsou rozdíly mezi INNER JOIN, LEFT JOIN, RIGHT JOIN a FULL JOIN?
- INNER JOIN – vrátí pouze záznamy, které mají shodu v obou tabulkách.
- LEFT JOIN – vrátí všechny záznamy z levé tabulky a odpovídající záznamy z pravé tabulky (pokud nejsou, vrátí NULL).
- RIGHT JOIN – vrátí všechny záznamy z pravé tabulky a odpovídající záznamy z levé tabulky.
- FULL JOIN – vrátí všechny záznamy z obou tabulek, pokud nemají shodu, vrátí NULL.
3. Jaké jsou rozdíly mezi WHERE a HAVING?
WHERE se používá k filtrování řádků před agregací (např. před GROUP BY). HAVING se používá k filtrování po agregaci (GROUP BY). Příklad:
SELECT author, title FROM books WHERE author IN ( SELECT author FROM books GROUP BY author HAVING COUNT(title) >= 2 );
V tomto příkladu získáte seznam autorů a jejich titulů, ale pouze těch autorů, kteří mají alespoň dva tituly. Všimněte si, že HAVING
se používá po GROUP BY
, zatímco WHERE
by filtrovalo před tímto krokem.
4. Co je index v SQL a jaké jsou jeho typy?
- Clustered Index – fyzicky mění uspořádání dat v tabulce. Každá tabulka může mít jen jeden.
- Non-clustered Index – uchovává index odděleně od dat, může být více než jeden v tabulce.
- Unique Index – zajišťuje, že sloupec obsahuje pouze unikátní hodnoty.
- Bitmap Index – používá se hlavně ve velkých databázích s nízkou kardinalitou.
5. Jak byste otestoval(a) SQL dotaz na výkon?
- Použití EXPLAIN PLAN v Oracle:
EXPLAIN PLAN FOR SELECT * FROM employees WHERE salary > 50000; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
- Analýza V$SQL a V$SESSION pro sledování dlouhých dotazů.
- Použití AUTOTRACE v SQL*Plus pro porovnání výkonu různých dotazů.
- Indexování sloupců a optimalizace dotazu pomocí správného použití JOINů a WHERE podmínek.
6. Co je transakce v SQL a jaké jsou její vlastnosti (ACID)?
- Atomicity – transakce je buď provedena celá, nebo vůbec.
- Consistency – databáze se po transakci nachází ve správném stavu.
- Isolation – transakce běží nezávisle na ostatních.
- Durability – úspěšné transakce jsou trvale uloženy.
Příklad pro práci s transakcemi:
BEGIN; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT; -- nebo ROLLBACK;
7. Jaký je rozdíl mezi DELETE, TRUNCATE a DROP?
- DELETE – smaže řádky, ale zachová strukturu tabulky, lze použít WHERE.
- TRUNCATE – smaže všechny řádky, rychlejší než DELETE, nelze vrátit zpět.
- DROP – odstraní tabulku i se strukturou.
8. Jaké jsou hlavní datové typy v Oracle SQL?
- Číselné: NUMBER, FLOAT
- Textové: VARCHAR2, CHAR, CLOB
- Datum/čas: DATE, TIMESTAMP, INTERVAL
- BLOB: BLOB, RAW
Příklad:
CREATE TABLE employees ( id NUMBER PRIMARY KEY, name VARCHAR2(100), salary NUMBER(10,2), hire_date DATE );
9. Co je pohled (VIEW) v SQL a kdy ho použít?
Pohled je uložený SQL dotaz, který se chová jako virtuální tabulka. Používá se pro:
- Zjednodušení složitých dotazů.
- Zvýšení bezpečnosti (skrytí některých sloupců).
Příklad:
CREATE VIEW high_salary AS SELECT name, salary FROM employees WHERE salary > 50000;
10. Jak zajistíte, že váš SQL dotaz bude efektivní?
- Použití indexů.
- Optimalizace JOIN operací a WHERE podmínek.
- Použití EXPLAIN PLAN k analýze výkonu.
- Minimalizace použití SELECT * a místo toho volba jen potřebných sloupců.
- Použití vhodných datových typů a normální formy tabulek.
11. Jak použít GROUP BY v SQL?
GROUP BY se používá k seskupení řádků podle jednoho nebo více sloupců a umožňuje použít agregované funkce jako COUNT, SUM, AVG, MIN, MAX.
Příklad:
SELECT department, COUNT(*) FROM employees GROUP BY department;
12. Co je subdotaz v SQL?
Subdotaz je dotaz, který je součástí jiného dotazu. Subdotazy mohou být použity v SELECT, INSERT, UPDATE nebo DELETE dotazech.
Příklad:
SELECT name FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
13. Jak v SQL použít LIMIT nebo TOP?
LIMIT nebo TOP slouží k omezení počtu řádků vrácených dotazem.
Příklad s LIMIT (MySQL):
SELECT * FROM employees LIMIT 5;
Příklad s TOP (SQL Server):
SELECT TOP 5 * FROM employees;
14. Jak udělat automatické inkrementování v SQL?
Pro automatické inkrementování hodnoty se obvykle používají sekvence nebo AUTO_INCREMENT (v MySQL) a IDENTITY (v SQL Server).
Příklad pro MySQL:
CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), salary DECIMAL(10,2) );
15. Co je diference mezi UNION a UNION ALL?
UNION sloučí výsledky dvou dotazů a odstraní duplicitní řádky. UNION ALL sloučí všechny výsledky, včetně duplicitních řádků.
Příklad s UNION:
SELECT name FROM employees WHERE salary > 50000 UNION SELECT name FROM contractors WHERE salary > 50000;
16. Jak udělat zálohu databáze v SQL?
Zálohování databáze závisí na použitém databázovém systému. Například v MySQL se používá příkaz mysqldump
.
mysqldump -u username -p database_name > backup.sql;
17. Co je referenční integrita v SQL?
Referenční integrita zajišťuje, že vztahy mezi tabulkami (např. cizí klíče) jsou konzistentní a že data mezi tabulkami jsou propojena správně.
18. Co je rozdíl mezi CHAR a VARCHAR?
CHAR je pevně stanovená délka řetězce, zatímco VARCHAR je řetězec proměnné délky.