Kidolgozott SQL feladatok
A feladatok megoldása során egy egyszerû kölcsönzési
adatbázist használunk, amely a következõ
táblákból áll:
-
KOLCS (SORSZ, OLVJ, RAKTJ, KIDAT, VDAT, KDIJ)
-
KONYV (RAKTJ, CIM, SZERZ, PELD)
-
OLV (OLVJ, NEV, CIM, FOGL)
A táblákban a kulcsmezõket aláhúztuk,
a táblák kapcsolatait pedig az alábbi relációkkal
írhatjuk le:
-
KOLCS.OLVJ = OLV.OLVJ
-
KOLCS.RAKTJ = KONYV.RAKTJ
A feladatok a Microsoft Access SQL implementációjának
szintaktikáját követik. A feladatok tartalom szerint
csoportosítva:
KÉSEDELMI DÍJAK KIÍRATÁSA
Írassa ki a könyvtárba befizetett késedelmi
díjakat!
SELECT KDIJ
FROM KOLCS;
Írassa ki a könyvtárba befizetett nullánál
nagyobb értékû késedelmi díjakat!
SELECT KDIJ
FROM KOLCS
WHERE KDIJ>0;
Írassa ki a könyvtárba 2003-ban befizetett késedelmi
díjakat! (Feltéve, hogy a késedelmi díjakat
a könyvek visszahozatalakor fizették be.)
SELECT KDIJ
FROM KOLCS
WHERE YEAR(VDAT)=2003;
Írassa ki a könyvtárba 2003 októberében
befizetett késedelmi díjakat! (Feltéve, hogy a késedelmi
díjakat a könyvek visszahozatalakor fizették be.)
SELECT KDIJ
FROM KOLCS
WHERE YEAR(VDAT)=2003 AND
MONTH(VDAT)=10;
Írassa ki a könyvtárba 2003 október 1 és
15 között befizetett késedelmi díjakat! (Feltéve,
hogy a késedelmi díjakat a könyvek visszahozatalakor
fizették be.)
SELECT KDIJ
FROM KOLCS
WHERE YEAR(VDAT)=2003 AND
MONTH(VDAT)=10 AND
DAY(VDAT) BETWEEN 1 AND 15;
vagy
SELECT KDIJ
FROM KOLCS
WHERE YEAR(VDAT)=2003 AND
MONTH(VDAT)=10 AND
(1<=DAY(VDAT) AND DAY(VDAT)<=15);
Írassa ki a könyvtárba 2003 második negyedévében
befizetett késedelmi díjakat! (Feltéve, hogy a késedelmi
díjakat a könyvek visszahozatalakor fizették be.)
SELECT KDIJ
FROM KOLCS
WHERE YEAR(VDAT)=2003 AND
MONTH(VDAT) IN (4,5,6);
Írassa ki a könyvtárba 2003 március és
április hónapjában befizetett késedelmi díjakat!
(Feltéve, hogy a késedelmi díjakat a könyvek
visszahozatalakor fizették be.)
SELECT KDIJ
FROM KOLCS
WHERE YEAR(VDAT)=2003 AND
MONTH(VDAT) IN (3,4);
vagy
SELECT KDIJ
FROM KOLCS
WHERE YEAR(VDAT)=2003 AND
(MONTH(VDAT)=3 OR MONTH(VDAT)=4);
Írassa ki a könyvtárba az elmúlt két
hétben (=14 napban) befizetett késedelmi díjakat!
(Feltéve, hogy a késedelmi díjakat a könyvek
visszahozatalakor fizették be.)
SELECT KDIJ
FROM KOLCS
WHERE VDAT>=DATE()-14;
Írassa ki a könyvtárba a 2003 június 29-én
befizetett késedelmi díjakat! (Feltéve, hogy a késedelmi
díjakat a könyvek visszahozatalakor fizették be.)
SELECT KDIJ
FROM KOLCS
WHERE VDAT=DATESERIAL(2003,6,29);
vagy
SELECT KDIJ
FROM KOLCS
WHERE VDAT=#6/29/2003#;
(Az utóbbi lekérdezés függ a számítógépen
beállított dátumformátumtól.)
Írassa ki a könyvtárba befizetett késedelmi
díjakat nagyság szerint rendezve!
SELECT KDIJ
FROM KOLCS
ORDER BY KDIJ;
Írassa ki a könyvtárba befizetett késedelmi
díjakat nagyság szerint fordított sorrendben rendezve!
SELECT KDIJ
FROM KOLCS
ORDER BY KDIJ DESC;
Írassa ki a könyvtárba 2003-ban befizetett késedelmi
díjak értékeit nagyság szerint fordított
sorrendben rendezve! (Feltéve, hogy a késedelmi díjakat
a könyvek visszahozatalakor fizették be.)
SELECT KDIJ
FROM KOLCS
WHERE YEAR(VDAT)=2003
ORDER BY KDIJ DESC;
Írassa ki a könyvtárba 2003-ban befizetett késedelmi
díjak értékeit nagyság szerint fordított
sorrendben rendezve! (Feltéve, hogy a késedelmi díjakat
a könyvek visszahozatalakor fizették be; egy értéket
csak egyszer írasson ki!)
SELECT DISTINCT KDIJ
FROM KOLCS
WHERE YEAR(VDAT)=2003
ORDER BY KDIJ DESC;
Írassa ki a könyvtárba befizetett 10 legnagyobb
értékû késedelmi díjat!
SELECT TOP 10 KDIJ
FROM KOLCS
ORDER BY KDIJ DESC;
Írassa ki a könyvtárba 2003-ban befizetett 10 legnagyobb
értékû késedelmi díjat! (Feltéve,
hogy a késedelmi díjakat a könyvek visszahozatalakor
fizették be; egy értéket csak egyszer írasson
ki!)
SELECT DISTINCT TOP 10 KDIJ
FROM KOLCS
WHERE YEAR(VDAT)=2003
ORDER BY KDIJ DESC;
Írassa ki a könyvtárba 2003 októberében
befizetett 10 legnagyobb értékû késedelmi díjat!
(Feltéve, hogy a késedelmi díjakat a könyvek
visszahozatalakor fizették be.)
SELECT TOP 10 KDIJ
FROM KOLCS
WHERE YEAR(VDAT)=2003 AND
MONTH(VDAT)=10
ORDER BY KDIJ DESC;
Írassa ki a könyvtárba befizetett késedelmi
díjak teljes összegét!
SELECT SUM(KDIJ)
FROM KOLCS;
Írassa ki a könyvtárba befizetett késedelmi
díjak teljes összegét "Késedelmi díjak"
néven!
SELECT SUM(KDIJ) AS "Késedelmi díjak"
FROM KOLCS;
vagy
SELECT SUM(KDIJ) AS [Késedelmi díjak]
FROM KOLCS;
(Utóbbi esetben a mezõnévben nem jelenik meg az
idézõjel.)
Írassa ki a könyvtárba 2003-ban befizetett késedelmi
díjak teljes összegét „Késedelmi díjak”
néven! (Feltéve, hogy a késedelmi díjakat a
könyvek visszahozatalakor fizették be.)
SELECT SUM(KDIJ) AS "Késedelmi díjak"
FROM KOLCS
WHERE YEAR(VDAT)=2003;
Írassa ki a könyvtárba 2003 szeptemberében
befizetett késedelmi díjak teljes összegét „Késedelmi
díjak” néven! (Feltéve, hogy a késedelmi díjakat
a könyvek visszahozatalakor fizették be.)
SELECT SUM(KDIJ) AS "Késedelmi díjak"
FROM KOLCS
WHERE YEAR(VDAT)=2003 AND
MONTH(VDAT)=9;
Írassa ki a könyvtárba 2003 szeptember 1 és
15 között befizetett késedelmi díjak teljes összegét
„Késedelmi díjak” néven! (Feltéve, hogy a késedelmi
díjakat a könyvek visszahozatalakor fizették be.)
SELECT SUM(KDIJ) AS "Késedelmi díjak"
FROM KOLCS
WHERE YEAR(VDAT)=2003 AND
MONTH(VDAT)=9 AND
DAY(VDAT) BETWEEN 15 AND 30;
vagy
SELECT SUM(KDIJ) AS "Késedelmi díjak"
FROM KOLCS
WHERE YEAR(VDAT)=2003 AND
MONTH(VDAT)=9 AND
(15<=DAY(VDAT) AND DAY(VDAT)<=30);
Írassa ki az egyes olvasók által befizetett késedelmi
díjak összegét „Késedelmi díj” néven!
SELECT SUM(KDIJ) AS "Késedelmi díj"
FROM KOLCS
GROUP BY OLVJ;
Írassa ki az olvasók olvasójegy-számát
és az egyes olvasók által befizetett késedelmi
díjak összegét „Késedelmi díj” néven!
SELECT OLVJ, SUM(KDIJ) AS "Késedelmi díj"
FROM KOLCS
GROUP BY OLVJ;
Írassa ki az olvasók olvasójegy-számát
és az egyes olvasók által 2003-ban befizetett késedelmi
díjak összegét „Késedelmi díj” néven!
(Feltéve, hogy a késedelmi díjakat a könyvek
visszahozatalakor fizették be.)
SELECT OLVJ, SUM(KDIJ) AS "Késedelmi díj"
FROM KOLCS
WHERE YEAR(VDAT)=2003
GROUP BY OLVJ;
Írassa ki az olvasók olvasójegy-számát
és az egyes olvasók által 2003 második felében
befizetett késedelmi díjak összegét „Késedelmi
díj” néven! (Feltéve, hogy a késedelmi díjakat
a könyvek visszahozatalakor fizették be.)
SELECT OLVJ, SUM(KDIJ) AS "Késedelmi díj"
FROM KOLCS
WHERE YEAR(VDAT)=2003 AND
MONTH(VDAT) BETWEEN 7 AND 12
GROUP BY OLVJ;
Írassa ki az olvasók olvasójegy-számát
és az egyes olvasók által 2003 szeptemberében
befizetett késedelmi díjak összegét „Késedelmi
díj” néven! (Feltéve, hogy a késedelmi díjakat
a könyvek visszahozatalakor fizették be.)
SELECT OLVJ, SUM(KDIJ) AS "Késedelmi díj"
FROM KOLCS
WHERE YEAR(VDAT)=2003 AND
MONTH(VDAT)=9
GROUP BY OLVJ;
Írassa ki az olvasók olvasójegy-számát
és az egyes olvasók által 2003-ban befizetett késedelmi
díjak összegét „Késedelmi díj” néven,
és rendezze a sorokat a befizetett díjak szerint! (Feltéve,
hogy a késedelmi díjakat a könyvek visszahozatalakor
fizették be.)
SELECT OLVJ, SUM(KDIJ) AS "Késedelmi díj"
FROM KOLCS
WHERE YEAR(VDAT)=2003
GROUP BY OLVJ
ORDER BY SUM(KDIJ);
Írassa ki az olvasók olvasójegy-számát
és az egyes olvasók által 2003-ban befizetett késedelmi
díjak összegét „Késedelmi díj” néven,
és rendezze a sorokat a befizetett díjak szerint fordított
sorrendben! (Feltéve, hogy a késedelmi díjakat a könyvek
visszahozatalakor fizették be.)
SELECT OLVJ, SUM(KDIJ) AS "Késedelmi díj"
FROM KOLCS
WHERE YEAR(VDAT)=2003
GROUP BY OLVJ
ORDER BY SUM(KDIJ) DESC;
Írassa ki a 2003-ban legtöbb késedelmi díjat
befizetõ olvasók közül az elsõ 10 olvasó
olvasójegy-számát és az egyes olvasók
által befizetett késedelmi díjak összegét
„Késedelmi díj” néven! (Feltéve, hogy a késedelmi
díjakat a könyvek visszahozatalakor fizették be.)
SELECT TOP 10 OLVJ, SUM(KDIJ) AS "Késedelmi díj"
FROM KOLCS
WHERE YEAR(VDAT)=2003
GROUP BY OLVJ
ORDER BY SUM(KDIJ) DESC;
Írassa ki az 1000 Ft-nál több késedelmi díjat
befizetõ olvasók olvasójegy-számát és
az egyes olvasók által befizetett késedelmi díjak
összegét „Késedelmi díj” néven!
SELECT OLVJ, SUM(KDIJ) AS "Késedelmi díj"
FROM KOLCS
GROUP BY OLVJ
HAVING SUM(KDIJ)>1000;
Írassa ki a 2003-ban 1000 Ft-nál több késedelmi
díjat befizetõ olvasók olvasójegy-számát
és az egyes olvasók által befizetett késedelmi
díjak összegét „Késedelmi díj” néven!
(Feltéve, hogy a késedelmi díjakat a könyvek
visszahozatalakor fizették be.)
SELECT OLVJ, SUM(KDIJ) AS "Késedelmi díj"
FROM KOLCS
WHERE YEAR(VDAT)=2003
GROUP BY OLVJ
HAVING SUM(KDIJ)>1000;
KÖLCSÖNZÉSEK ADATAINAK KIÍRATÁSA
Írassa ki a könyvtárból kölcsönzõ
olvasók olvasójegy-számát, valamint a kikölcsönzött
könyvek raktári jelzetét!
SELECT OLVJ, RAKTJ
FROM KOLCS;
Írassa ki a könyvtárból kölcsönzõ
olvasók olvasójegy-számát, valamint a kikölcsönzött
könyvek raktári jelzetét olvasójegy-szám,
azon belül pedig raktári jelzet szerint rendezve!
SELECT OLVJ, RAKTJ
FROM KOLCS
ORDER BY OLVJ, RAKTJ;
Írassa ki az olvasók olvasójegy-számát,
valamint a kikölcsönzött könyvek raktári jelzetét
azokra a kölcsönzésekre, amelyek 2003 második negyedévében
történtek! Rendezze a kapott sorokat elsõdlegesen olvasójegy-szám,
ezen belül pedig raktári jelzet szerint!
SELECT OLVJ, RAKTJ
FROM KOLCS
WHERE YEAR(KIDAT)=2003 AND
MONTH(KIDAT) IN (4,5,6)
ORDER BY OLVJ, RAKTJ;
Írassa ki a könyvtárból kölcsönzõ
olvasók olvasójegy-számát, valamint a kikölcsönzött
könyvek raktári jelzetét olvasójegy-szám,
azon belül pedig raktári jelzet szerint rendezve! (Ha egy olvasó
többször is kölcsönzött egy könyvet, csak
egyszer írassa ki!)
SELECT DISTINCT OLVJ, RAKTJ
FROM KOLCS
ORDER BY OLVJ, RAKTJ;
Írassa ki a könyvtárból kölcsönzõ
olvasók nevét és olvasójegy-számát,
valamint a kikölcsönzött könyvek raktári jelzetét
olvasójegy-szám, azon belül pedig raktári jelzet
szerint rendezve! (Ha egy olvasó többször is kölcsönzött
egy könyvet, csak egyszer írassa ki!)
SELECT DISTINCT KOLCS.OLVJ, NEV, RAKTJ
FROM KOLCS, OLV
WHERE KOLCS.OLVJ=OLV.OLVJ
ORDER BY KOLCS.OLVJ, RAKTJ;
vagy
SELECT DISTINCT KOLCS.OLVJ, NEV, RAKTJ
FROM KOLCS INNER JOIN OLV ON KOLCS.OLVJ=OLV.OLVJ
ORDER BY KOLCS.OLVJ, RAKTJ;
Írassa ki a könyvtárba beiratkozott olvasók
nevét és olvasójegy-számát, valamint
a kikölcsönzött könyvek raktári jelzetét
olvasójegy-szám, azon belül pedig raktári jelzet
szerint rendezve! (Ha egy olvasó többször is kölcsönzött
egy könyvet, csak egyszer írassa ki; ha pedig még egyszer
sem kölcsönzött, a nevét és olvasójegy-számát
akkor is írassa ki!)
SELECT DISTINCT KOLCS.OLVJ, NEV, RAKTJ
FROM KOLCS RIGHT JOIN OLV ON KOLCS.OLVJ=OLV.OLVJ
ORDER BY KOLCS.OLVJ, RAKTJ;
Írassa ki a könyvtárból kölcsönzõ
olvasók olvasójegy-számát, valamint a kikölcsönzött
könyvek számát "Kölcsönzések száma"
néven olvasójegy-szám szerint rendezve!
SELECT OLVJ, COUNT(RAKTJ) AS "Kölcsönzések száma"
FROM KOLCS
GROUP BY OLVJ
ORDER BY OLVJ;
Írassa ki a könyvtárból kölcsönzõ
olvasók olvasójegy-számát, valamint az általuk
kikölcsönzött könyvek számát "Kölcsönzések
száma" néven a kikölcsönzött könyvek
száma szerint fordított sorrendben rendezve!
SELECT OLVJ, COUNT(RAKTJ) AS "Kölcsönzések száma"
FROM KOLCS
GROUP BY OLVJ
ORDER BY COUNT(RAKTJ) DESC;
Hozzon létre egy új táblát TEMP néven
egy ún. "aktív" lekérdezéssel, amely az olvasók
olvasójegy-számait és az általuk kikölcsönzött
könyvek raktári jelzetét tartalmazza! (Ha egy olvasó
többször is kikölcsönzött egy könyvet, az
értékeket csak egyszer írassa ki!)
Ezután írassa ki a TEMP táblából
a könyvtárból kölcsönzõ olvasók
olvasójegy-számát, valamint az általuk kikölcsönzött
könyvek számát "Kölcsönzések száma"
néven a kikölcsönzött könyvek száma szerint
fordított sorrendben rendezve!
Fogalmazza meg, mi lesz a különbség akkor, ha nem a
TEMP, hanem az eredeti KOLCS táblát használja a második
lekérdezésben!
SELECT DISTINCT OLVJ, RAKTJ INTO TEMP
FROM KOLCS;
SELECT OLVJ, COUNT(RAKTJ) AS "Kölcsönzések száma"
FROM TEMP
GROUP BY OLVJ
ORDER BY COUNT(RAKTJ) DESC;
(Ha a TEMP táblát használjuk, nem tekintjük
különbözõ kölcsönzéseknek azokat,
amikor egy olvasó többször kölcsönözte
ki ugyanazt a könyvet. Ha viszont a KOLCS táblát hasnzáljuk,
ezek a kölcsönzések is benne lesznek a COUNT(RAKTJ) csoportfüggvény
által szolgáltatott értékben.)
Írassa ki egy megadott olvasó olvasójegy-számát,
valamint az általa kikölcsönzött könyvek számát
"Kölcsönzések száma" néven!
SELECT OLVJ, COUNT(RAKTJ) AS "Kölcsönzések száma"
FROM KOLCS
WHERE OLVJ=[Olvasójegy száma?]
GROUP BY OLVJ;
Írassa ki egy megadott olvasó olvasójegy-számát,
az általa kikölcsönzött, valamint a már visszahozott
könyvek számát "Kölcsönzések száma",
ill. "Visszahozott könyvek száma" néven!
SELECT OLVJ, COUNT(RAKTJ) AS "Kölcsönzések száma",
COUNT(VDAT) AS "Visszahozott könyvek száma"
FROM KOLCS
WHERE OLVJ=[Olvasójegy száma?]
GROUP BY OLVJ;
Írassa ki egy megadott olvasó nevét és
olvasójegy-számát, valamint az általa kikölcsönzött
könyvek számát "Kölcsönzések száma"
néven!
SELECT OLV.OLVJ, NEV, COUNT(RAKTJ) AS "Kölcsönzések
száma"
FROM KOLCS, OLV
WHERE (KOLCS.OLVJ=OLV.OLVJ) AND (OLV.OLVJ=[Olvasójegy száma?])
GROUP BY OLV.OLVJ, NEV;
Írassa ki Puk Kata és Zuzu Petasz kölcsönzéseinek
adatait kiviteli dátum szerint rendezve!
(Megjegyzés: lehet, hogy a hölgyeknek második
keresztnevük is van!)
SELECT *
FROM OLV INNER JOIN KOLCS ON OLV.OLVJ=KOLCS.OLVJ
WHERE (NEV LIKE "Puk Kata*") OR (NEV LIKE "Zuzu Petasz*")
ORDER BY KIDAT;
vagy
SELECT *
FROM OLV INNER JOIN KOLCS ON OLV.OLVJ=KOLCS.OLVJ
WHERE NEV LIKE "Puk Kata*"
ORDER BY KIDAT
UNION
SELECT *
FROM OLV INNER JOIN KOLCS ON OLV.OLVJ=KOLCS.OLVJ
WHERE NEV LIKE "Zuzu Petasz*"
ORDER BY KIDAT;
Írassa ki Puk Kata és Zuzu Petasz kölcsönzéseinek
adatait kiviteli dátum szerint rendezve! Ha a hölgyek egyszer
sem kölcsönöztek, a személyes adataikat akkor is
írassák ki!
(Megjegyzés: lehet, hogy a hölgyeknek második
keresztnevük is van!)
SELECT *
FROM OLV LEFT JOIN KOLCS ON OLV.OLVJ=KOLCS.OLVJ
WHERE (NEV LIKE "Puk Kata*") OR (NEV LIKE "Zuzu Petasz*")
ORDER BY KIDAT;
vagy
SELECT *
FROM OLV LEFT JOIN KOLCS ON OLV.OLVJ=KOLCS.OLVJ
WHERE NEV LIKE "Puk Kata*"
ORDER BY KIDAT
UNION
SELECT *
FROM OLV LEFT JOIN KOLCS ON OLV.OLVJ=KOLCS.OLVJ
WHERE NEV LIKE "Zuzu Petasz*"
ORDER BY KIDAT;
Írassa ki a könyvtárból kölcsönzõ
olvasók olvasójegy-számát, a könyvek kiviteli
és visszahozatali dátumát, valamint azt az idõtartamot
(napokban megadva) "Kölcsönzési idõ" néven,
ameddig az általuk kölcsönzött könyvek náluk
voltak! Az eredményül kapott sorokat rendezze olvasójegy-szám
szerint!
(A kölcsönzéseket csak akkor vegye figyelembe, ha
a kikölcsönzött könyvet már visszahozták!)
SELECT OLVJ, KIDAT, VDAT, VDAT-KIDAT AS "Kölcsönzési
idõ"
FROM KOLCS
WHERE VDAT IS NOT NULL
ORDER BY OLVJ;
Írassa ki a könyvtárból kölcsönzõ
olvasók olvasójegy-számát, valamint azt az
idõtartamot (napokban megadva) "Kölcsönzési idõ"
néven, ameddig az általuk kölcsönzött könyvek
náluk voltak! Az eredményül kapott sorokat rendezze
olvasójegy-szám szerint!
(A kölcsönzéseket akkor is vegye figyelembe az aktuális
dátum szerinti visszahozatali dátummal, ha a kikölcsönzött
könyvet még nem hozták vissza!)
SELECT OLVJ, IIF(VDAT IS NULL, DATE()-KIDAT, VDAT-KIDAT) AS "Kölcsönzési
idõ"
FROM KOLCS
ORDER BY OLVJ;
vagy
SELECT OLVJ, DATE()-KIDAT AS "Kölcsönzési idõ",
"Kölcsönzés alatt" AS "STÁTUSZ"
FROM KOLCS
WHERE VDAT IS NULL
ORDER BY OLVJ
UNION
SELECT OLVJ, VDAT-KIDAT AS "Kölcsönzési idõ",
"Visszahozták" AS "STÁTUSZ"
FROM KOLCS
WHERE VDAT IS NOT NULL
ORDER BY OLVJ;
(Megjegyzés: a második lekérdezést
kiegészítettük egy "STÁTUSZ" nevû mezõvel,
amely az egyes soroknak megfelelõ kölcsönzések
jelenlegi állapotát adja meg szöveges formában.)
Írassa ki a könyvtárból kölcsönzõ
olvasók olvasójegy-számát, valamint azt a legrövidebb
és leghosszabb idõtartamot (napokban), ameddig az általuk
kölcsönzött könyvek náluk voltak! Az eredményül
kapott sorokat rendezze olvasójegy-szám szerint!
(A kölcsönzéseket csak akkor vegye figyelembe, ha
a kikölcsönzött könyvet már visszahozták!)
SELECT OLVJ, MIN(VDAT-KIDAT) AS "Legrövidebb kölcsönzési
idõ", MAX(VDAT-KIDAT) AS "Leghosszabb kölcsönzési
idõ"
FROM KOLCS
WHERE VDAT IS NOT NULL
GROUP BY OLVJ
ORDER BY OLVJ;
Írassa ki a könyvtárból kölcsönzõ
olvasók olvasójegy-számát, valamint azt a legrövidebb
és leghosszabb idõtartamot (napokban), ameddig az általuk
kölcsönzött könyvek náluk voltak! Az eredményül
kapott sorokat rendezze olvasójegy-szám szerint!
(A kölcsönzéseket akkor is vegye figyelembe az aktuális
dátum szerinti visszahozatali dátummal, ha a kikölcsönzött
könyvet még nem hozták vissza!)
SELECT OLVJ, MIN(VDAT-KIDAT) AS "Legrövidebb kölcsönzési
idõ",
MAX(VDAT-KIDAT) AS "Leghosszabb kölcsönzési idõ"
FROM KOLCS
WHERE VDAT IS NOT NULL
GROUP BY OLVJ
ORDER BY OLVJ
UNION
SELECT OLVJ, MIN(DATE()-KIDAT) AS "Legrövidebb kölcsönzési
idõ",
MAX(DATE()-KIDAT) AS "Leghosszabb kölcsönzési idõ"
FROM KOLCS
WHERE VDAT IS NULL
GROUP BY OLVJ
ORDER BY OLVJ;
Írassa ki a kikölcsönzött, de még nem
visszahozott könyvekre a könyvek raktári jelzetét,
a kölcsönzõ olvasók olvasójegy-számát,
a könyvek kiviteli dátumát, valamint 20 nap kölcsönzési
idõt feltételezve
(1) ha a könyv kölcsönzése még nem járt
le, a várható visszahozatali dátumot,
(2) ha a könyv kölcsönzése már lejárt,
egy "Lejárt!" szöveget!
Az eredményül kapott sorokat rendezze olvasójegy-szám
szerint!
SELECT OLVJ, RAKTJ, KIDAT, IIF(DATE()-KIDAT>20, "LEJÁRT!", KIDAT+20)
AS "VISSZAHOZATAL"
FROM KOLCS
WHERE VDAT IS NULL
ORDER BY OLVJ;
vagy
SELECT OLVJ, RAKTJ, KIDAT, "Lejárt!" AS "VISSZAHOZATAL"
FROM KOLCS
WHERE (VDAT IS NULL) AND
(DATE()-KIDAT>20)
ORDER BY OLVJ
UNION
SELECT OLVJ, RAKTJ, KIDAT, KIDAT+20 AS "VISSZAHOZATAL"
FROM KOLCS
WHERE (VDAT IS NULL) AND
(DATE()-KIDAT<=20)
ORDER BY OLVJ;
Írassa ki a könyvek raktári jelzetét és
a könyvek kölcsönzéseinek számát!
SELECT RAKTJ, COUNT(RAKTJ) AS "Kölcsönzések száma"
FROM KOLCS
GROUP BY RAKTJ;
Írassa ki a könyvek raktári jelzetét és
a könyvek kölcsönzéseinek számát azokra
a könyvekre, amelyeket legalább ötször kikölcsönöztek
már!
SELECT RAKTJ, COUNT(RAKTJ) AS "Kölcsönzések száma"
FROM KOLCS
GROUP BY RAKTJ
HAVING COUNT(RAKTJ)>=5;
Írassa ki azoknak a könyveknek az adatait (raktári
jelzet, szerzõ, cím) és kölcsönzéseinek
számát, amelyeket legalább ötször kikölcsönöztek
már! (A kapott sorokat rendezze raktári jelzet szerint!)
SELECT RAKTJ, SZERZ, CIM
FROM KONYV
WHERE RAKTJ IN
(SELECT RAKTJ
FROM KOLCS
GROUP BY RAKTJ
HAVING COUNT(RAKTJ)>=5)
ORDER BY RAKTJ;
vagy
SELECT KONYV.RAKTJ, SZERZ, CIM, COUNT(OLVJ) AS "Kölcsönzések
száma"
FROM KONYV INNER JOIN KOLCS ON KONYV.RAKTJ=KOLCS.RAKTJ
GROUP BY KONYV.RAKTJ, SZERZ, CIM
HAVING COUNT(KONYV.RAKTJ)>=5
ORDER BY KONYV.RAKTJ;
(Megjegyzés: a második lekérdezésben
a könyvek kölcsönzéseinek számát is
ki tudjuk íratni.)
Írassa ki azoknak az olvasóknak az adatait (olvasójegy-szám,
név), akik olyan könyveket kölcsönöztek, amelyeket
legalább ötször kikölcsönöztek már!
Ha egy olvasó több ilyen könyvet is kölcsönzött,
az adatait csak egyszer írassa ki! A kapott sorokat rendezze olvasójegy-szám
szerint!
SELECT DISTINCT OLV.OLVJ, NEV
FROM OLV INNER JOIN KOLCS ON OLV.OLVJ=KOLCS.OLVJ
WHERE RAKTJ IN
(SELECT RAKTJ
FROM KOLCS
GROUP BY RAKTJ
HAVING COUNT(RAKTJ)>=5)
ORDER BY OLV.OLVJ;
Boda István, 2003. december 2.