Kihagyás

2. gyakorlat

Követelmények

2 db zh

  1. két rész, papíros és gépes (ha jól értettem)

    • (gyakorlatilag beugró)
    • a gépes résznél AI és emberi segítség nélkül bármi használható
    • papíros rész relációs algebra
    • 03.18.
  2. zh nem tudom, nem hallottam

    • 05.06.

óra végén canvasba fel kell tölteni a gyakorlat anyagát

gyakorlati időben

Relációs algebra

Órai jegyzet

  • operandusok
    • a relációhoz tartozó változók
  • atomi műveletek
    • unió
    • metszet
    • kivonás
    • vetítés (projekció)
    • kiválasztás (slekció)
    • descartes szorzat
    • theta összekapcsolás

Vetítés

Jele: \(\pi_{A_1, A_2, \dots, A_n}(R)\)

\(A_1, A_2, \dots, A_n\): azok az attribútomok, amelyekhez tartozó oszlopokat meg szeretnénk tartani

Kiválasztás

\(\sigma_c(R)\)

A \(c\) egy feltétel, amely megadja, hogy milyen sorokat szeretnénk kikérni

Descartes-szorzat

\(R \times S\)

R minden sorához hozzárendeljük S minden sorát

Ha a két reláció között van megegyező oszlop név, akkor az eredményben az oszlopok nevét a reláció nevével megtoldjuk

pl. \(\pi_{A, B}(\sigma_{c \geq 5}(R \times S))\)

Ez hivás, mivel a projekcióban a \(B\) nem egyértelmű. Esetleges helyes felírás: \(\pi_{A, R.B}(\sigma_{c \geq 5}(R \times S))\)

Természetes összekapcsolás

Jele: \(R \Join S\) (írásban egy vízszintes homokóra vagy laposra rúgott végtelen vagy csokornyakkendő vagy\(\ldots\))

A két reláció közös oszlopai szerint lesz a két reláció összekötve

Theta-összekapcsolás

Jele: \(R \Join_c S\)

\(c\) egy feltétel

Gyakorlati anyag szerint:

  1. Kiszámoljuk \(R\) és \(S\) szorzatát
  2. Kiválasztjuk a szorzatból azokat a sorokat, amelyek eleget tesznek a \(C\) feltételnek

Átnevezés

\(\rho_{S(A_1, A_2, \ldots, A_n)}(R)\)

"Az eredményreláció neve \(S\), sorai azonban megegyeznek az \(R\) soraival, és attribútumainak neve balról jobbra: \(A_1, A_2,\ldots, A_n\)"

Műveletek közti kapcsolatok

\[ R \cap S = R - (R - S) \]

SQL

SQL select

Vetítés

SELECT A_1, A_2, ..., A_n FROM tábla

Joker karakter: * (minden oszlop)

A SELECT után a DISTINCT szót használva elhagyhatjuk az ismételt sorokat.

SQL utasítások

  • Nem érzékenyek a kis- és nagybetűkre
    • Kivéve string esetén
  • Lehetőleg ;-vel zárjuk le
  • Kulcsszavak nem rövidíthetők
  • SELECT és FROM listákat általában külön sorba írjuk

Aritmetikai műveletek

  • Szokásos: +, -, *, /
  • Kiértékelési sorrend is a szokásos
  • Null értéken is elvégezhetőek

Null értékek

Nem ismert adatok

Gyakorlatilag üresen hagyott cellák

\(\text{null} \ne 0 \land \text{null} \ne ""\)

Kifejezések átnevezése

SELECT last_name, salary*12+100 FROM employees;

A számolt oszlop neve salary*12+100 lesz, nem túl szép.

SELECT last_name, salary*12+100 AS "New Salary" FROM employees;

-- vagy az AS elhagyható:

SELECT last_name, salary*12+100 "New Salary" FROM employees;

Feltételes cucc

SELECT A_1, A_2, ..., A_n
FROM tábla
WHERE feltétel

pl.

SELECT last_name, job_id, department_id
FROM employees
WHERE last_name = 'József';

A dátum formátumra is érzékeny YYYY-MM-DD

Összehasonlítő feltételek:

  • A szokásosak
  • A nem egyenlő != vagy ^= vagy <>
  • Fontos kivétel ITT NINCS ==, csak =
  • BETWEEN ... AND ...
  • IN
  • IS NULL
  • LIKE - mintaillesztés
    • % - nulla vagy több karaktert jelöl
    • _ pontosan egy karaktert jelöl

Ha a % vagy _ jeleket szeretnénk használni LIKE-ban, akkor az ESCAPE keyworddel lehet.

LIKE 'A\_' ESCAPE '\'
  • Logikai műveletek: AND, OR, NOT
  • ORDER BY
    • oszlop szerinti rendezés

SQL-ben 1-től indexelünk!

Halmazműveletek

SELECT employee_id, job_id
FROM employees
UNION -- únió
SELECT employee_id, job_id
FROM job_history;

Feladatok, at last

CREATE TABLE szeret AS SELECT * FROM nikovits.szeret; -- `nikovits.szeret` tábla lemásolása
SELECT * FROM szeret; -- saját `szeret` tábla tartalmát kiírja

1. feladat

Adjuk meg azokat a gyümölcsöket, amelyeket Micimackó szeret

Relációs algebra: \(\pi_{gyümölcs}(\sigma_{nev='Micimackó'}(SZERET))\)

SQL:

SELECT gyumolcs
FROM szeret
WHERE nev = 'Micimackó';

2. feladat

Adjuk meg azokat a gyümölcsöket, amelyeket Micimackó nem szeret!

\(\pi_{gyumolcs}(SZERET)-\pi_{gyumolcs}(\sigma_{nev='Micimackó'}(SZERET))\)

SELECT gyumolcs
FROM szeret
MINUS
SELECT gyumolcs
FROM szeret
WHERE nev = 'Micimackó';
  • dinnye

3. feladat

azok nevét, akik nem szeretik a körtét

\(\pi_{nev}(SZERET)-\pi_{nev}(\sigma_{gyumolcs='Körte'}(SZERET))\)

SELECT nev
FROM szeret
MINUS
SELECT nev
FROM szeret
WHERE gyumolcs = 'körte';

4. feladat

Adjuk meg azon személyek nevét, akik szeretik az almát, de nem szeretik a körtét

\(\pi_{nev}(\sigma_{gyumolcs='alma'}(SZERET))-\pi_{nev}(\sigma_{gyumolcs='körte'}(SZERET))\)

SELECT nev
FROM szeret
WHERE gyumolcs = 'alma'
MINUS
SELECT nev
FROM szeret
WHERE gyumolcs  = 'körte';