Jazyk SQL

Jazyk SQL (Structured Query Language) je jazyk určený pro práci s relačními databázovými systémy (RDBMS). Na začátku 70. let 20. století jej začala vyvíjet společnost IBM (konkrétně pánové Raymond F. Boyce, Donald C. Messerly a Andrew Richardson). O několik let později na trh vstoupila společnost Oracle (tehdy ještě Relational Software, Inc.), která své produkty úspěšně dodávala i americkým vládním organizacím (CIA, U.S. Navy a další).

Příkazy jazyka SQL by se daly rozdělit do těchto skupin:

  • DDL (data definition language) – příkazy patřící do této skupiny vytvářejí či upravují strukturu databáze (např. tabulky).

    Příklady: CREATE, ALTER, DROP

  • DML (data manipulation language) – příkazy, které slouží k získávání, ukládání a mazání dat v databázi.

    Příklady: SELECT, INSERT, UPDATE, DELETE

  • DCL (data control language) – příkazy pro správu uživatelských rolí a práv.

    Příklady: GRANT, REVOKE

  • TCL (transactional control language) – příkazy pro správu databázových transakcí.

    Příklady: BEGIN, COMMIT, ROLLBACK

Syntaxe pomocí příkladů

DDL (data definition language)

Vytvoření tabulky zaměstnanců:

kód v jazyce SQL - Zobrazit

  1. CREATE TABLE zamestnanci
  2. (
  3.     cislo UNSIGNED INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  4.     jmeno VARCHAR(100) NOT NULL,
  5.     prijmeni VARCHAR(100) NOT NULL,
  6.     mesto VARCHAR(100) NOT NULL
  7. )

Smazání tabulky zaměstnanců:

kód v jazyce SQL - Zobrazit

  1. DROP TABLE zamestnanci

Přidání sloupce s datem narození:

kód v jazyce SQL - Zobrazit

  1. ALTER TABLE zamestnanci ADD narozen DATETIME NOT NULL

Odebrání sloupce s datem narození:

kód v jazyce SQL - Zobrazit

  1. ALTER TABLE zamestnanci DROP narozen
DML (data manipulation language)

Vybrat zaměstnance z Prahy:

kód v jazyce SQL - Zobrazit

  1. SELECT jmeno,prijmeni
  2. FROM zamestnanci
  3. WHERE (mesto='Praha')
  4. ORDER BY prijmeni,jmeno

Vybrat 10 zaměstnanců s nejvyšším platem:

kód v jazyce SQL - Zobrazit

  1. SELECT jmeno,prijmeni
  2. FROM zamestnanci
  3. ORDER BY plat DESC,prijmeni,jmeno
  4. LIMIT 10

Vypočítat průměrné platy v jednotlivých městech:

kód v jazyce SQL - Zobrazit

  1. SELECT mesto,AVG(plat)
  2. FROM zamestnanci
  3. GROUP BY mesto
  4. ORDER BY mesto

Vypočítat celkový plat všech managerů:

kód v jazyce SQL - Zobrazit

  1. SELECT SUM(plat)
  2. FROM zamestnanci
  3. WHERE pozice='manager'

Získat počet uklízeček v Ostravě:

kód v jazyce SQL - Zobrazit

  1. SELECT COUNT(*)
  2. FROM zamestnanci
  3. WHERE (pozice='uklízečka' AND mesto='Ostrava')

Vybrat stránky včetně názvu kategorie (vnitřní spojení):

kód v jazyce SQL - Zobrazit

  1. SELECT s.titulek,s.text,k.nazev
  2. FROM stranky s
  3. INNER JOIN kategorie k ON (k.id=s.idKategorie)
  4. ORDER BY s.titulek

Vybrat stránky (i nezařazené) včetně názvu kategorie (levé vnější spojení):

kód v jazyce SQL - Zobrazit

  1. SELECT s.titulek,s.text,k.nazev
  2. FROM stranky s
  3. LEFT OUTER JOIN kategorie k ON (k.id=s.idKategorie)
  4. ORDER BY s.titulek

Započítat návštěvu stránky:

kód v jazyce SQL - Zobrazit

  1. UPDATE stranky
  2. SET pocitadlo=pocitadlo+1,posledniNavsteva=NOW()
  3. WHERE url='produkty'

Vložit rezervaci v kině:

kód v jazyce SQL - Zobrazit

  1. INSERT INTO rezervace
  2. (film,misto,jmeno)
  3. VALUES
  4. ('Terminátor','A44','Sarah Connor')

Smazat všechny horrory z databáze filmů:

kód v jazyce SQL - Zobrazit

  1. DELETE
  2. FROM filmy
  3. WHERE (zanr='horror')
DCL (data control language)

Udělení práv pro čtení tabulky zaměstnanců uživateli „guest“:

kód v jazyce SQL - Zobrazit

  1. GRANT SELECT
  2. ON zamestnanci
  3. TO guest

Zrušení práva číst tabulku zaměstnanců uživateli „enemy“:

kód v jazyce SQL - Zobrazit

  1. REVOKE SELECT
  2. ON zamestnanci
  3. FROM enemy

Vytvoření databáze a udělení všech práv novému uživatel (v konzoli psql):

kód v jazyce SQL - Zobrazit

  1. CREATE USER jmeno WITH PASSWORD 'heslo';
  2. CREATE DATABASE databaze;
  3. GRANT ALL PRIVILEGES ON DATABASE databaze TO jmeno;
TCL (transactional control language)

Transakce jsou posloupnosti příkazů, které musí proběhnout všechny, nebo žádný. Databázový systém se postará o to, aby celá transakce proběhla atomicky a její průběh nebyl narušen jinými dotazy. Zajímavé je také to, že se dílčí změny během transakce neprojeví vzhledem k jiné transakci.

Převod peněz z účtu na účet:

kód v jazyce SQL - Zobrazit

  1. BEGIN;
  2. UPDATE ucty SET zustatek=zustatek-200 WHERE cislo=123142;
  3. UPDATE ucty SET zustatek=zustatek+200 WHERE cislo=552331;
  4. COMMIT;

Reference