SQL Bevezetés folytatás, haladó SQL

Bevezetés az SQL-be II

Az EXIST művelet

EXIST(<alkérdés>) akkor és csak akkor igaz, ha az alkérdés eredménye nem üres.

  SELECT *
  FROM Teák b1
  WHERE NOT EXISTS (
    SELECT * 
    FROM Teák
    WHERE gyártó = b1.gyártó AND 
          név != b1.név
  );

Az ANY művelet

x = ANY(<alkérdés>) akkor és csak akkor igaz, ha x egyenlő az alkérdés legalább egy sorával

Az ALL művelet

x != ALL(<alkérdés>) akkor és csak akkor igaz, ha x az alkérdés egyetlen sorával sem egyezik meg.

  SELECT tea
  FROM Felszolgál
  WHERE ár >= ALL(
        SELECT ár
        FROM Felszolgál
  );

Unió, metszet, különbség

(<alkérdés>)UNION/INTERSECT/MINUS(<alkérdés>)

  (SELECT * FROM Szeret)
  INTERSECT
  (
    SELECT vendég, tea
    FROM Felszolgál, Látogat
    WHERE Felszolgál.teázó = Látogat.teázó
  );

A SELECT-FROM-WHERE multihalmaz szemantikát használnak, a halmazműveleteknél mégis a halmaz szemantika érvényes.

Ismétlődések kiküszöbölése

DISTINCT kulcsszó.

Összekapcsolás kifejezések

Az SQL-ben számos változata megtalálható az összekapcsolásnak.

Ezek a kifejezések önmagukban is állhatnak lekérdezésként, vagy a FROM zátadékban is megjelenhetnek.

Descartes szorzat és természetes összekapcsolás:

R NATURAL JOIN S R CROSS JOIN S

Theta összekapcsolás

R JOIN S ON <feltétel>

  Vendégek JOIN Látogat ON
    név = vendég;

Relációs algebra és az SQL

Relációs algebra: érdekes a "hogyan" kérdés is

Kapcsolat a relációs algebra műveletek és SQL záradékok, kulcsszavak között.

SQL-nél mondtuk: "hogyan" helyett "mit"

DBMS kitalálja a leggyorsabb végrehajtási módot, háttérben optimalizál

Van a relációs kalkulus, amely deklaratív nyelv.

Haladó SQL

Összekapcsolás típusok

  • Descartes-szorzat
  • Belső összekapcsolás
  • Külső összekapcsolás

Belső összekapcsolások

  • Természetes összekapcsolás
  • Theta összekapcsolás
  • Félig összekapcsolás (semi join)
  • Anti összekapcsolés

Külső összekapcsolás

Kiterjesztett relációs algebra

Összekapcsoljuk és relációkat

Három különböző művelet

azon sorait, melyeknek nincs beli párja lógó soroknak nevezzük

A külső összekapcsolás megőrzi a lógó sorokat NULL értékrkkel helyettesítve a hiányzó értékeket.

Összesítések

SUM, AVG, COUNT, MIN, MAX összesítő függvények a SELECT záradékában alkalmazhatjuk egy-egy oszlopra.

COUNT(*) az eredmény sorainak számát adja meg.

  SELECT AVG(ár)
  FROM Felszolgál
  WHERE tea = 'Brisk';
SELECT COUNT(DISTINCT ár)
FROM Felszolgál
WHERE tea = 'Brisk';  

NULL értékek nem számítanak az összesítésben.

  • NULL soha nem számít a SUM, AVG, COUNT, MIN, MAX függvények kiértékelésekor.
  • De ha nincs NULL értéktől különböző érték az oszlopban, akkor az összesítés eredménye NULL
    • kivéve a COUNT, ami az üreshalmazon -t ad vissza.

Csoportosítás

Egy kifejezést GROUP BY záradékkal folytathatjuk, melyet attribútomok listája követ.

  SELECT tea, AVG(ár)
  FROM Felszolgál
  GROUP BY tea;

A GROUP BY záradékot egy HAVING <feltétel> záradék követheti, ami a már csoportokat szűri.

SELECT tea, AVG(ár)
FROM Felszolgál
GROUP BY tea
HAVING COUNT(teázó) >= 3 OR
  tea IN (
    SELECT név
    FROM Teák
    WHERE gyártó = 'Pete'  
  );

Adatbázis módosítások

A módosító utasítások nem adnak eredményt, hamen az adatbázist változtatják meg.

3-féle módosító létezik:

  • INSERT
  • DELETE
  • UPDATE

Ezek a Data manipulation Language része.

Beszúrás

Ha egyetlen sort szúrunk be:

  INSERT INTO <reláció>
  VALUES (<attribútum lista>);

A reláció után megadhatjuk az attribútumait, mert nem emlékszünk az attribútum sorrendre, vagy nincs minden attribútumnak értéke, és szeretnénk, ha a hiányzó értékeket NULL vagy default értékkel helyettesítenénk.

Default értékek megadása

A CREATE TABLE utasításban van rá lehetőség

  CREATE TABLE Vendégek (
     név CHAR(30) PRIMARY KEY,
     cím CHAR(50) DEFAULT '123 Sesame St.'
     telefon CHAR(16) 
  );
Több sor beszúrása

Egy lekérdezés eredményét is beszúrhatjuk a következő módon:

  INSERT INTO <reláció> (<alkérdés>);

Törlés

  DELETE FRPM <reláció>
  WHERE <feltétel>;

Itt is van lehetőség több sort töröni allekérdezéssel.

Törlés szemantikája: Elősször kijelölünk, aztán törlünk.

Módosítás

  UPDATE <reláció>
  SET <attribútum értékadások listája>
  WHERE <sorokra vonatkozó feltétel>;

Adatbázis sémák SQL-ben

A Data Definition Language segítségével hozhatunk létre adatobjektumokat, deklarálhatunk megszorításokat.

Relációk létrehozása

  CREATE TABLE <név> (
    <elemek listája>
  );

Legfontosabb típusok:

  • INT
  • FLOAT
  • CHAR(n): rögzített hossz
  • VARCHAR(n): legfeljebb hosszúság
  • DATE
  • TIME
Kulcsok megadása

Egy attribútomot vagy attribútum listát kulcsként deklarálhatunk (PRIMARY KEY vagy UNIQUE)

Minden formája a megszorításnak azt követeli meg, hogy relációnak ne legyen két olyan sora, melyek megegyeznek a kulcs attribútumokon.

  CREATE TABLE Felszolgál (
    teázó CHAR(20),
    tea   VARCHAR(20),
    ár    REAL,
    PRIMARY KEY (teázó, tea)
  );
PRIMARY KEY vs UNIQUE
  1. Egy relációhoz egyetlen PRIMARY KEY tartozhat és több UNINQUE megszorítás.
  2. A PRIMARY KEY egyetlen attribútuma sem kaphat NULL értéket. A UNIQUE megszorításnál szerepelhetnek NULL értékek egy soron belül akár több is.

Relációk törlése

  DROP TABLE <név>

Források