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.