3.gyak.
Az SQL adatbázisnyelv. Lekérdezések
SQL-ben.
Feladatok: SQL
gépes gyakorlat: táblák
létrehozása, Oracle típusok.
Lekérdezések Oracle SQL-ben,
kifejezések, sorfüggvények
használata,
milyen segítségünk van: Oracle-doksik
(lásd SQL
Language Reference).
A nullérték
és műveletek
nullértékekkel, az ismeretlen
igazságérték.
Több relációra
vonatkozó lekérdezések, sorváltozók, az
alapértelmezés, szabvány
kiértékelés
szemantikája.
(4.gyak.folyt.: Alkérdések használata)
Egy
táblára
vonatkozó lekérdezések, az
SQL
függvények használata
(kifejezések)
HR
séma tábláihoz (lásd Oracle-doksik)
készítsük el a
szinonimákat create_synonym
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.
(Figyelem! az SQL-ben az oszlopnév helyett
kifejezések is állhatnak!)
A relációs algebra és SQL
között alapvető
különbség, hogy az 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. Elemi keresési feltételek.
Hasonlóan, mint a relációs
algebra
kiválasztás (szelekció)
feltételében itt is elemi
feltételekből
építkezünk.
Elemi feltételen két
kifejezés aritmetikai
összehasonlítását
értjük,
pl.
A<B, ahol aritmetikai
összehasonlítás: =,
>, >=, <, <=, <>.
1.2.2. Összetett keresési feltételek.
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 érvényesek a precedencia
szabályok.
1.2.3. egyszerű értékvizsgálat: LIKE,
IS NULL
(SQL-ben speciális és ez nem
írható
át
relációs algebrára)
- kar_sorozat_kifejezés LIKE '_ %' (ez
csak sztring típusú
kifejezésekre)
- kifejezés 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)
- kif BETWEEN kif1 AND kif2
- kif IN (értékhalmaz) | NOT IN
(értékhalmaz)
Feladat: átírni
relációs algebrai
kifejezésekké (összetett
kiválasztási feltétel).
1.2.5. Alkérdések használata WHERE-ben
(Ez a 3.előadáson már volt,
egyszerű feladatokat erre is nézhetünk,
és a 4-5. gyakorlaton folytatjuk).
KIEGÉSZÍTÉS: 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], ...}];
-- Megj.: Klasszikus relációs
algebrában
nem fejezhető ki, mert az eredmény
itt lista lesz (nem
halmaz, mint a relációs algebrában,
sőt nem is multihalmaz,
mint a kiterjesztett
relációs algebrában, hanem rendezett
lista), az eredmény
ugyanaz, mert a sorok sorrendje nem
számít! (Cak nekünk jó, hogy
rendezett!)
1.3.
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,
Pl. a mai dátum
lekérdezése: SELECT SYSDATE FROM DUAL;
-- Oracle dokumentációt is használjunk
segítségül, az itt szereplő
példákat: SQL
Language Reference >> 5
Functions >>
see Single-Row Functions
>> Character Functions
e.g. SUBSTR, RPAD,
..., INSTR,
...
>> Datetime Functions e.g.
MONTHS_BETWEEN,
...
>> Conversion Functions e.g. TO_DATE,
...
>> Null-related
Functions e.g. NVL,
...
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 nevét, az éves
fizetését és hány hete
állt
munkába!
- Adjuk meg a dolgozók között
előforduló
foglalkozások neveit (az eredmény
most halmaz legyen, vagyis minden
foglalkozást 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)
Kiegészítés: Az 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.3. 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).
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