2. gyakorlat
Követelmények
2 db zh
-
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.
-
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
- 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:
- Kiszámoljuk \(R\) és \(S\) szorzatát
- 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
SQL
SQL select
Vetítés
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ésFROMlistá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
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
pl.
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 ...INIS NULLLIKE- 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.
- 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:
2. feladat
Adjuk meg azokat a gyümölcsöket, amelyeket Micimackó nem szeret!
\(\pi_{gyumolcs}(SZERET)-\pi_{gyumolcs}(\sigma_{nev='Micimackó'}(SZERET))\)
- dinnye
3. feladat
azok nevét, akik nem szeretik a körtét
\(\pi_{nev}(SZERET)-\pi_{nev}(\sigma_{gyumolcs='Körte'}(SZERET))\)
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))\)