3.gyak.Lekérdezések
kifejezése relációs
algebrában és SQL-ben
valamint ekvivalens
átírások egymásba
Feladatok: A
3. gyakorlaton az 1-2. gyakorlatok feladatait
oldjuk meg SQL-ben,
célszerű ezeket az SQL megoldásokat
táblánál is felírni
és
megbeszélni,
majd gépnél
is
kipróbálni az
Oracle adatbázis környezetben,
lásd Oracle
adatbázis elérhetősége
A
gyakorlat
áttekintése: Csatlakozás
az
Oracle
adatbázishoz: >> Oracle
adatbázis elérhetősége
A lekérdezési feldatatok
megoldásához előbb
az alaptáblákat kell létrehoznunk: 1.) Oracle
segédanyag
példáinak
kipróbálása: >
SQL lekérdezésekhez szinonimák
létrehozása: create_hr_synonym
>> 1.1.
SELECT
záradék
-- Egy
táblát használó
lekérdezések
>> 1.2.
WHERE
záradék
>> 1.3.
ORDER BY
záradék
>> 1.4.
Kifejezések, Oracle SQL
sorfüggvények
>> 1.5.
FROM
záradék
--
Több táblát
használó
lekérdezések
Eddig, most csak a
vetítés-kiválasztás-összekapcsolások
jellegű lekérdezéseket
nézzük meg és a
köv.órán folytatjuk a
relációs algebra
átírását SQL
SELECT-re,
az összekapcsolások SQL:
1999-es
szintaxisával, a halmazműveletekkel, valamint
az alkérdésekkel
(folyt.köv.a 4.gyak.)
2.) Az
órai gyakorlatok
feladatai: órai_feladatok
- Dolgozo
és Osztaly táblák és
kérdések: table_dolgozo.txt
és a táblák
létrehozása
(scriptként futtatva le)
create_dolgozo
- Termékek, lásd table_termekek.txt
és a táblák
létrehozása: create_termekek
Termék(gyártó, modell,
típus)
PC(modell,
sebesség, memória,
merevlemez,
ár)
Laptop(modell,
sebesség,
memória, merevlemez,
képernyő, ár)
Nyomtató(modell,
színes,
típus,
ár)
- Csatahajók, lásd table_csatahajok.txt és
a táblák
létrehozása
create_csatahajok
Hajóosztályok(osztály,
típus,
ország, ágyúkSzáma,
kaliber,
vízkiszorítás)
Hajók(név, osztály,
felavatva)
Csaták(név, dátum)
Kimenetelek(hajó,
csata,
eredmény)
3.) A
példatár feladatai
önálló
gyakorlásra:
-- Lásd Feladatok.pdf
(1.fejezet
feladatai)
és a táblák
létrehozása cr_dept_emp Egy
táblára
vonatkozó lekérdezések, az
SQL
függvények használata
(kifejezések)
1.1.
SELECT záradék: Vetítés,
projekció
SELECT *|{[DISTINCT] oszlopnév|kifejezés
[másodnév],...}
FROM táblanév
[[sorváltozó], ... ];
SELECT és FROM kötelező
záradékok, a többi nem kötelező. SELECT
.. FROM .. [WHERE
.. ]
alapértelmezése:
A FROM záradékban levő
relációkhoz egy-egy
sorváltozót
rendelünk, amelyek a megfelelő reláció
minden sorát bejárják,
(ha van WHERE záradék, akkor azt az
aktuális sorokra
kiértékeljük és ha helyes,
vagyis a feltétel igazat ad, akkor)
képezzük a SELECT záradékban
szereplő kifejezéseknek
megfelelő eredménysort. Így SQL-ben egy sor az
eredményben
többször is előfordulhat, vagyis az
eredménytábla multihalmaz,
ha halmazt szeretnénk kapni, azt külön
kérni kell: DISTINCT
1.2.1. aritmetikai
összehasonlítás: =,
>, >=, <, <=, <>
Hasonlóan, mint a relációs
algebra
kiválasztás (szelekció)
feltételében elemi feltételekből
építkezünk. Elemi feltételen
két kifejezés aritmetikai
összehasonlítását
értjük, pl.
A<B
1.2.2. logikai műveletekkel AND, OR, NOT és
zárójelekkel
az elemi feltételekből tudjuk
felépíteni az
összetett feltételeket,
úgy, mint a relációs
algebrában. Itt
is ugyanúgy érvényesek
a precedencia szabályok és
zárójelezés.
1.2.3. egyszerű értékvizsgálat: LIKE,
IS NULL
(SQL-ben speciális és ez nem
írható
át
relációs algebrára)
- LIKE '_ %' (ez csak sztring típusú
kifejezésekre)
- IS NULL | IS NOT NULL
1.2.4. egyszerű értékek listája:
BETWEEN, IN
(SQL-ben speciális, de mind a kettő
átírható
relációs algebrába)
- BETWEEN...AND...
- IN (értékhalmaz) | NOT IN
(értékhalmaz)
- Feladat: átírni
relációs algebrai
kifejezésekké
(aritmetikai
összehasonlítással és
logikai kifejezésekkel)
1.2.5. Alkérdések használata WHERE-ben
(jön köv.héten)
1.3.
ORDER BY záradék: Kiválasztott sorok
rendezése
SELECT *|{[DISTINCT] oszlopnév|kifejezés
[másodnév],...}
FROM táblanév
[[sorváltozó], ... ]
[WHERE feltétel]
[ORDER BY {oszlopnév [DESC], ...}];
Segédanyag: >>
WHERE
feltétel 21.oldal
példáit
próbáljuk ki!
-- Megj.: Klasszikus relációs
algebrában
nem fejezhető ki,
mert az eredmény lista (nem
halmaz, nem is multihalmaz),
később erre a kiterjesztett
relációs algebránál
visszatérünk.
1.4.
Kifejezések, Oracle
SQL sorfüggvények
Oracle doksi: >>
SQL
Language Reference >>
5. Functions
fejezetében
itt lásd Single-Row (Numeric, Character, Datetime,
Conversion)
Functions
Segédanyag: >>
Sorfüggvények
példáit próbáljuk ki!
Egy specialitás, az SQL-ben a
lekérdezéseket
táblákra tudjuk
felírni,
ehhez >> A
DUAL
tábla
Többrelációs
lekérdezések:
Összekapcsolások és
halmazműveletek
1.5.
FROM záradék
A lekérdezések
alapértelmezése a mai
gyakorlat, a FROM záradékban
a szorzás, összekapcsolások SQL: 1999-es
szintaxisa
a köv.órán lesz.
Fejezd
ki a
lekérdezéseket SQL SELECT-tel és
relációs algebrában! 2.) Az
órai
gyakorlatok feladatai itt: table_dolgozo.txt
Feladatok a 3.gyakorlatra
1.1. SELECT záradék:
- Adjuk meg a dolgozók között
előforduló
foglalkozások neveit
(mindet csak egyszer írjuk ki)
1.2. WHERE záradék:
- Kik azok a dolgozók, akiknek a fizetése
> 2800?
- Kik azok a dolgozók, akiknek a
fizetése 3000
és 4500 között van?
- Kik azok a dolgozók, akik a 10-es vagy a 20-as
osztályon dolgoznak?
- Adjuk meg azon dolgozókat, akik nevének
második
betűje 'A'.
- Kik azok a dolgozók, akiknek a jutaléka ismert?
(vagyis
nem NULL)
1.3. ORDER BY záradék:
- Adjuk meg osztályok azonosítója
sorrendjében a dolgozókat, azonos
osztályon belül a fizetés
szerint
csökkenően listázzuk ki a dolgozók
neveit.
1.4. Oracle SQL sorfüggvények:
- Adjuk meg azon dolgozókat, akik nevében van
legalább két 'L' betű.
(Többféle megoldást
is keressünk a
lekérdezésre, LIKE, INSTR
függvény)
- Adjuk meg a dolgozók fizetéseinek
négyzetgyökét és 3-mal vett
maradékát.
- Számoljuk ki, hogy a mai nap hány naposak
vagyunk,
illetve azt is hogy ma
hány hónaposak vagyunk (DUAL
tábla
lekérdezésével)
- Adjuk meg, hogy hány hete dolgozik a
cégnél
ADAMS és milyen hónapban
és milyen nap (hétfő, kedd, stb)
lépett be.
- Adjuk meg a dolgozók éves
jövedelmét, ahol
a havi jövedelem a fizetés
és jutalék összege, ahol
nincs jutalék
megadva,ott a 0 helyettesítő
értékkel számoljunk (NVL
függvény alkalmazása).
1.5. FROM záradék:
- Kik azok a dolgozók, akiknek a főnöke KING?
- Kik azok a dolgozók, akik
osztályának telephelye
BOSTON vagy CHICAGO?
Végül
nézzük
meg az 1-2. gyakorlatok
Termékek és Csatahajós
példáit is,
a relációs algebrában kifejezett
lekérdezéseket írjuk át SQL
SELECT-re!