Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Marosvásárhely. ABR ( Adatbázisrendszerek) 12. Előadás:

Hasonló dokumentumok
4. Előadás Az SQL adatbázisnyelv

7. Előadás tartalma A relációs adatmodell

Adatbázisrendszerek Tervezése Közgazdászoknak Munkapéldány

Adatbázis I. 11. előadás. Kulcsok az SQL ben. Hivatkozásépségi megszorítások és idegen kulcsok.

ABR ( Adatbázisrendszerek) 2. Előadás : Műveletek a relációs modellben

Adatbázis rendszerek tervezése

Adatbázis rendszerek SQL nyomkövetés

ABR ( Adatbázisrendszerek) 1. Előadás : Műveletek a relációs medellben

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Az SQL adatbázisnyelv: DML

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Adatbázis tartalmának módosítása

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

Adatbázisok elmélete 6. előadás

Adatbázis-kezelés. Harmadik előadás

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Tankönyv példák kidolgozása

BEVEZETÉS Az objektum fogalma

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

6. Előadás tartalma Adatmodellezés 2

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Adatbázisok elmélete 10. előadás

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

Adatbázisok elmélete 9. előadás

3. Előadás. Az SQL adatbázisnyelv (Tartalom) Az SQL története. Az SQL felépítése. Adattípúsok. SQL utasítások

SQL gyakorló feladatok. 6. Adatbázis gyakorlat április 5.

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

Bevezetés: az SQL-be

Adatbázisok elmélete 9. előadás

Adatbázis Rendszerek II. 8. Gyakorló környezet

Feladatok A mai előadáson: Tankönyv -- Termékek feladatai:

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 1. Előadás: Celko Joe tippjei Codd törvényei.

Adatbázisok elmélete 6. előadás

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

ADATBÁZIS RENDSZEREK I BEADANDÓ

Lekérdezések az SQL-ben 1.rész

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Lekérdezések az SQL-ben 1.rész

4.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Adatbázis Rendszerek II. 3. SQL alapok

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

SQL parancsok feldolgozása

SQL DDL-2 (aktív elemek) triggerek

B I T M A N B I v: T M A N

Nézetek és indexek. AB1_06C_Nézetek_Indexek - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

Adatbázis-kezelés, információs-rendszerek

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

Adatbázisok* tulajdonságai

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Java és web programozás

SQL DDL-1: táblák és megszorítások

Adatbázisok tavaszi félév Vizsgatételsor

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

SQL bevezetés. Select-From-Where záradékok Több relációt tartalmazó lekérdezések Alkérdések

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

Egyed-kapcsolat modell

WHERE záradék (további lehetıségek) SQL specialitások, nem írhatók át relációs algebrába: LIKE. NULL értékek. Az ismeretlen (unknown) igazságérték

Adatbázisok elmélete 6. előadás

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

Nézetek és indexek. 8. fejezet Nézettáblák

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Alkalmazói rendszerek ACCESS ZH - javítókulcs Informatika tanár MSC, levelező tagozat, január 06.

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Magas szintű adatmodellek Egyed/kapcsolat modell I.

Az SQL nyelv. SQL (Structured Query Language = Strukturált Lekérdező Nyelv).

N Y I L A T K O Z A T

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

6.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Spatial a gyakorlatban

Lekérdezések az SQL SELECT utasítással

SELECT DISTINCT deptno FROM emp; (distinct) SELECT STATEMENT HASH UNIQUE TABLE ACCESS FULL EMP

Adatbázis alapú rendszerek

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Relációs algebra 2.rész példák

B I T M A N B I v: T M A N

Adatbázis használat I. 2. gyakorlat

Adatbázis használat I. 5. gyakorlat

Adatbázisok elmélete 11. előadás

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 3. Előadás: Tárolt eljárások (folytatás) Nézetek

Készítette: Szabóné Nacsa Rozália

RELÁCIÓS ADATBÁZISSÉMÁK. Egyed-kapcsolat modellről átírás

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

Adatbázisok elmélete 6. előadás

Java és web programozás

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

Adatbázisok webalkalmazásokban

Relációs algebrai lekérdezések átírása SQL SELECT-re (példák)

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

Átírás:

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Marosvásárhely ABR ( Adatbázisrendszerek) 12. Előadás: 0. Egyes érdekesebb lekérdezésekről 1. NULL értékek használata alkérdésekben 2. Számlanyilvántartási feladat megoldása Illyés László 1

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda b) Keressük meg a legdrágább nyomtatókat? c) Keressük meg azokat a laptopokat, amelyek minden PC-nél lassúbbak? d) Keressük meg a modellszámát a legdrágább terméknek (PC, laptop vagy nyomtató) SELECT modell FROM Nyomtato WHERE ar=(select MAX(ar) FROM Nyomtato); SELECT modell FROM Laptop WHERE sebesseg< ALL (SELECT sebesseg FROM PC); Q1=(SELECT modell,ar FROM PC) UNION (SELECT modell,ar FROM Laptop) UNION (SELECT modell,ar FROM Nyomtato); SELECT modell FROM Q1 WHERE ar=(select MAX(ar) FROM Q1) 2

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda e) Keressük meg a legolcsóbb színes nyomtatók gyártóit? e1 e2 SELECT gyarto FROM Termek WHERE modell IN (SELECT modell FROM Nyomtato WHERE szines AND ar=(select MIN(ar) FROM Nyomtato)); SELECT gyarto FROM Termek WHERE modell IN (SELECT modell FROM Nyomtato WHERE ar=(select MIN(ar) FROM Nyomtato WHERE szines)); Három variáns Melyik a jó És miért e3 SELECT gyarto FROM Termek WHERE modell IN (SELECT modell FROM Nyomtato WHERE szines AND ar=(select MIN(ar) FROM Nyomtato WHERE szines)); 3

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda f) Keressük meg annak a PC-nek a gyártóját, amely a leggyorsabb processzorú PC-t gyártja a legkisebb memóriájú PC-k között. Q2=SELECT gyarto, sebesseg FROM Termek INNER JOIN PC ON Termek.modell=PC.modell WHERE sebesseg IN (SELECT sebesseg FROM PC WHERE memoria=(select MIN(memoria) FROM PC)); SELECT gyarto FROM Q2 WHERE sebesseg =(SELECT MAX(sebesseg) FROM Q2) 4

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda d) Keressük meg a D gyártó által gyártott PC-k és laptopok átlagos árát? e) Keressük meg minden egyes PC-sebességéhez az ilyen sebességű PC-k átlagos árát? f) Keressük meg minden gyártó esetén a laptopok átlagos képernyőméretét? d)q1=(select ar FROM Termek INNER JOIN PC ON Termek.modell=PC.modell WHERE Termek.gyarto= D ) UNION ALL (SELECT ar FROM Termek INNER JOIN Laptop ON Termek.modell=Laptop.modell WHERE Termek.gyarto= D ); SELECT AVG(ar) FROM Q1; e) SELECT sebesseg, AVG(ar) FROM PC GROUP BY (sebesseg); f) SELECT gyarto, AVG(kepernyo) FROM Termek INNER JOIN laptop ON 5 Termek.modell=laptop.modell GROUP BY (gyarto);

NULL érték használata alkérdésekben (Celko J., SQL felsőfokon, Kiskapu, 117-119) CREATE TABLE table1(kod INTEGER PRIMARY KEY, ertek INTEGER); CREATE TABLE table2(kod INTEGER PRIMARY KEY, ertek INTEGER); INSERT INTO table1 VALUES (1,1),(2,2); INSERT INTO table2 VALUES (1,1),(2,2),(3,3),(4,4),(5,5); SELECT ertek FROM table2 WHERE ertek NOT IN (SELECT ertek FROM table1); Eredmény: 3,4,5 INSERT INTO table1 VALUES (6,null); Eredmény: NULL ugyanazzal a lekérdezéssel Egy megoldás: SELECT ertek FROM table2 WHERE ertek NOT IN (SELECT ertek FROM table1 WHERE ertek IS NOT null); 6

Az IN predikátumot a következő képpen határozzuk meg: SELECT ertek FROM table2 WHERE NOT (ertek= ANY(SELECT ertek FROM table1)); Ebből következik, hogy: SELECT ertek FROM table2 WHERE NOT((ertek=1) OR (ertek=2) OR (ertek=3) OR (ertek=4) OR (ertek=5) OR (ertek=null)); DeMorgan azonosságokat alkalmazva SELECT ertek FROM table2 WHERE((ertek<>1) AND (ertek<>2) AND (ertek<>3) AND (ertek<>4) AND (ertek<>5) AND UNKNOWN) Eredmény mindíg UNKNOWN lesz, ami a WHERE záradékban nem lehet. 7

NULL érték kiküszöbölése a gyakorlatban 0 ismeretlen 1 férfi 2 nő 9 N/A 8

hossz cím év szalagfajta szerep Filmek Hangok azegy azegy fegyver Rajzfilmek Bűnűgyi filmek azegy azegy Bűnűgyi Rajzfilmek 9

Film(cím, év, hossz, szalagfajta) BűnűgyiFilm(cím, év, hossz, szalagfajta, fegyver) Rajzfilm(cím, év, hossz, szalagfajta) Hang(filmCím, gyártév, színésznév, szerep) BűnűgyiRajzfilm(cím, év, hossz, szalagfajta, fegyver) Egyedhalmazok összevonása nullérték használatával Film(cím, év, hossz, szalagfajta, fegyver, hang) Hang(filmCím, gyártév, színésznév, szerep) 10

Sapientia - Erdélyi Magyar Tudományegyetem (EMTE) Marosvásárhely Egy lehetséges megkülönböztetés NULL érték használatával Hang Fegyver Filmtipús NULL -1 NULL Film NULL -1 Érték Bűnűgyi film 0 0 NULL Néma rajzfilm 0 0 Érték Néma bűnűgyi rajzfilm 1 1 NULL Hangos rajzfilm 1 1 Érték Hangos bűnűgyi rajzfilm 11

Feladat: Egy cégnél adatbázisban szeretnénk tárolni a kimenő és bejövő számlák információit. Szeretnénk tudni, hogy mindenik számlán milyen terméket adtunk el, hogy a kimenő számlák melyik cégnek voltak kibocsájtva, a cégek milyen kifizetéseket eszközöltek ezen számlákra és hogy mennyivel tartoznak, vagy késésben vannak-e a megadott határidő szerint. A határidő a számlához tartozik, nem a céghez. Ugyanakkor nyilvántartjuk a bejövő számláinkat is, de csak összeg szerint és a saját kifizetéseink szerint. Az ügyfeleink, a beszállítók és a vevők egy táblában tárolódnak. A mi kifizetéseinket is nyilvántartjuk. Egy számlára történhetnek részleges kifizetések is. 12

Zölddel írva a számla általános adatait láthatjuk Pirossal a számlasorok attribútumai vannak Kékkel írva láthatóak a számlasorok. 13

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Marosvásárhely számlaszám ÁFA Sorszám határidő Számlák sorai Számlasorok Dátum számlája egységár mennyiség azonosító Ügyfelek termékid terméke név név bank bszámla adószám bejegyzés Termékek mértékegység 14

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Marosvásárhely Az ábrához tartozó relációk: Ugyfel(azonosito, nev, adoszam, cim, bejegyzes, bank, bszamla) Termek(termekID, nev, mertekegyseg) Szamla(szamlaszam, AFA, datum, hatarido, klienskod) Szamlasor(szamlaszam, sorszam, egysegar, mennyiseg, termekid) Mivel a Szamla a bejövő és kimenő számlákat is jelenti, még egy attribútumot adunk hozzá: összeg, amelyik az össz-számlaösszeget jelenti. Ez a kimenő számlák esetében lehet NULL, ezzel meg tudjuk különböztetni a bejövő és kimenő számlákat egymástól. Szamla(szamlaszam, AFA, datum, hatarido, klienskod, osszeg) 15

A megvalósítás ACCESS-ban 16

számlaszám ÁFA Sorszám dokszam határidő Számlák Kifizetései Kifizetések Dátum Dátum összeg tipús A számlák kifizetései ugyancsak hasonló a számlasorok struktúrához, mert a kifizetések is egy számlára vonatkoznak. Ezért gyenge egyedhalmaz. Kifizetes(szamlaszam, sorszam, dokszam, Datum, tipus, összeg) A tipus lehet pl. {OP, cash} vagy más (kompenzáció) stb. Ebben nyilvantarthatjuk a mi kifizeteseinket és a nekünk fizetett összegeket is. A különbséget az adja meg, hogy milyen SZÁMLÁHOZ tartozik, a bejövőhöz-e, vagy a kimenőhöz. 17

A kifizetések nyilvántartásával kiegészült ACCESS megvalósítás 18

A kimenő és bejövő számláknak nyilvántartása jobb, ha külön történik: A kimenő számláknál az összeg attribútumot kivettük, mert kiszámítható a számlasorokból. A kifizetéseket is külön vettük. A beviteli sorrend a következő: 1. Termek, Ugyfel 2. BeSzamla, KiSzamla 3. Szamlasor, bejovopenz, Kifizetés 19

Ugyanaz OpenBaseban 20

CREATE TABLE UGYFEL( azonosito integer PRIMARY KEY, nev VARCHAR(40), cim VARCHAR(40), ADOSZAM VARCHAR(20), BEJEGYZES VARCHAR(20), BANK VARCHAR(50), BANKSZAMLA VARCHAR(40) ); CREATE TABLE TERMEK( TERMEKID INTEGER PRIMARY KEY, NEV VARCHAR(50), MERTEKEGYSEG VARCHAR(30) ); 21

CREATE TABLE BESZAMLA( SZAMLASZAM INTEGER PRIMARY KEY, AFA INTEGER, DATUM DATE, HATARIDO DATE, UGYFELID INTEGER, OSSZEG NUMERIC(16,2), FOREIGN KEY (UGYFELID) REFERENCES UGYFEL(AZONOSITO) ); 22

CREATE TABLE KISZAMLA( SZAMLASZAM INTEGER PRIMARY KEY, AFA INTEGER, DATUM DATE, HATARIDO DATE, UGYFELID INTEGER, FOREIGN KEY (UGYFELID) REFERENCES UGYFEL(AZONOSITO) ); CREATE TABLE KIFIZETES( SZAMLASZAM INTEGER, SORSZAM INTEGER, DATUM DATE, OSSZEG NUMERIC(16,2), TIPUS VARCHAR(30), PRIMARY KEY(SZAMLASZAM,SORSZAM), FOREIGN KEY (SZAMLASZAM) REFERENCES BESZAMLA(SZAMLASZAM) ); 23

CREATE TABLE BEJOVOPENZ( SZAMLASZAM INTEGER, SORSZAM INTEGER, DATUM DATE, OSSZEG NUMERIC(16,2), TIPUS VARCHAR(30), PRIMARY KEY(SZAMLASZAM,SORSZAM), FOREIGN KEY (SZAMLASZAM) REFERENCES KISZAMLA(SZAMLASZAM) ); CREATE TABLE SZAMLASOR( SZAMLASZAM INTEGER, SORSZAM INTEGER, EGYSEGAR NUMERIC(16,2), MENNYISEG NUMERIC(16,2), TERMEKID INTEGER, PRIMARY KEY(SZAMLASZAM,SORSZAM), FOREIGN KEY (SZAMLASZAM) REFERENCES KISZAMLA(SZAMLASZAM), FOREIGN KEY (TERMEKID) REFERENCES TERMEK(TERMEKID) ); 24

Beviteli sorrend és függőség Ügyfél 1 1 Termék 1 BeSzámla 1 KiSzámla 1 1 Kifizetés BejövőPénz Számlasor 25

1. Melyik ügyfélnek a neve kezdődik A betűvel? SELECT Ugyfel.nev FROM Ugyfel WHERE Ugyfel.nev LIKE A% ; 2. Melyik ügyfél nevében van benne az ama betűkombináció? SELECT Ugyfel.nev FROM Ugyfel WHERE Ugyfel.nev LIKE %ama% % mindent helyettesít (mint Windowsban a *) _ helyettesít egy karaktert (mint Windowsban a?) 26

Melyik ügyfélhez nem tartozik számla SELECT Ugyfel.nev FROM Ugyfel WHERE Ugyfel.azonosito Not In (SELECT ugyfelid FROM KiSzamla) And (Ugyfel.azonosito) Not In (SELECT ugyfelid FROM BeSzamla); Melyik számlához nem tartozik számlasor (ez hiba, vagy még nem vittük be) SELECT szamlaszam FROM KiSzamla WHERE szamlaszam NOT IN (SELECT szamlaszam FROM Szamlasor); Kik a beszállítók (akikhez bejövő számla tartozik) SELECT DISTINCT Ugyfel.nev FROM Ugyfel INNER JOIN BeSzamla ON Ugyfel.azonosito=BeSzamla.ugyfelID; 27

Melyik ügyfelek a kliensek (akikhez kimeno szamla tartozik (nem ures)) SELECT DISTINCT Ugyfel.nev FROM Ugyfel INNER JOIN KiSzamla ON Ugyfel.azonosito = KiSzamla.ugyfelID WHERE KiSzamla.szamlaszam IN (SELECT szamlaszam FROM Szamlasor); Melyek azok az ügyfelek, akik egyben beszállítók és vásárlók is SELECT DISTINCT Ugyfel.nev FROM Ugyfel INNER JOIN KiSzamla ON Ugyfel.azonosito=KiSzamla.ugyfelID WHERE szamlaszam IN (SELECT szamlaszam FROM Szamlasor) AND azonosito IN (SELECT ugyfelid FROM BeSzamla); 28

SELECT KiSzamla.szamlaszam, Szamlasor.sorszam, Termek.nev, Termek.mertekegyseg, Szamlasor.egysegar, Szamlasor.darabszam, (egysegar)*(mennyiseg) AS sorossz FROM Termek INNER JOIN (KiSzamla INNER JOIN Szamlasor ON KiSzamla.szamlaszam = Szamlasor.szamlaszam) ON Termek.termekID = Szamlasor.termekID; Számlák a soraikkal együtt. 29

SELECT KiSzamla.szamlaszam, Szamlasor.sorszam, Termek.nev, Termek.mertekegyseg, Szamlasor.egysegar, Szamlasor.darabszam, (egysegar)*(mennyiseg) AS sorossz FROM Termek INNER JOIN (KiSzamla INNER JOIN Szamlasor ON KiSzamla.szamlaszam = Szamlasor.szamlaszam) ON Termek.termekID = Szamlasor.termekID WHERE (((KiSzamla.szamlaszam)=[Hanyas szamla?])); Ez a kiegészítés ACCESSben paraméterezett lekérdezést ad. A felhasználótól bekéri a számlaszámot, s csak azt az egy számlát adja meg. 30

SELECT Ugyfel.nev, KiSzamla.szamlaszam, Sum((egysegar)*(mennyiseg)*(1+KiSzamla.AFA/100)) AS osszszamlaertek, (Datum)+(hatarido) AS hatardatum FROM Ugyfel INNER JOIN (KiSzamla INNER JOIN Szamlasor ON KiSzamla.szamlaszam=Szamlasor.szamlaszam) ON Ugyfel.azonosito=KiSzamla.ugyfelID GROUP BY Ugyfel.nev, KiSzamla.szamlaszam, (Datum)+(hatarido); Megadja minden ügyfélhezt tartozó minden számla összértékét 31 és fizetési határidejét.

32 Az előző lekérdezés részleges eredménye (jelentés formájában).

Bejövő számláink az ügyfelekkel, összegekkel és határidőkkel SELECT Ugyfel.nev, BeSzamla.szamlaszam, BeSzamla.osszeg, (Datum)+ (hatarido) AS hatardatum FROM Ugyfel INNER JOIN BeSzamla ON Ugyfel.azonosito=BeSzamla.ugyfelID; Az ügyfelek által vásárolt termékek, mennyiségre: 33

Ha az ügyfeleink által vásárolt termékekről szeretnénk információt fel kell vennünk a lekérdezésbe az összes táblát, amelyen keresztül a kapcsolat megoldható : SELECT Ugyfel.nev, Termek.nev, Sum(Szamlasor.darabszam) AS SumOfdarabszam FROM Ugyfel INNER JOIN (Termek INNER JOIN (KiSzamla INNER JOIN Szamlasor ON KiSzamla.szamlaszam = Szamlasor.szamlaszam) ON Termek.termekID = Szamlasor.termekID) ON Ugyfel.azonosito = KiSzamla.ugyfelID GROUP BY Ugyfel.nev, Termek.nev; Az összekötések zárójelezéssel történnek, amint fentebb a színes kiemelések vannak. 34

Teljesen kifizetetlen számlák SELECT Ugyfel.nev, KiSzamla.szamlaszam, Sum((egysegar)*(mennyiseg)*KiSzamla.AFA/100) AS osszszamlaertek FROM Ugyfel INNER JOIN (KiSzamla INNER JOIN Szamlasor ON KiSzamla.szamlaszam=Szamlasor.szamlaszam) ON Ugyfel.azonosito=KiSzamla.ugyfelID WHERE KiSzamla.szamlaszam NOT IN (SELECT bejovopenz.szamlaszam FROM bejovopenz) GROUP BY Ugyfel.nev, KiSzamla.szamlaszam; Az alkérdés megadja azokat a számlákat, amelyekre kifizetések történtek. Ezeknek a kivonása eredményezi azon számlákat és összegeket, amelyek teljesen kifizetetlenek voltak. 35

Meg szeretnénk tudni, hogyan állnak a részlegesen fizetett számláink is. Reszlegesen fizetett számlák és a rajtuk levő összeg SELECT Ugyfel.nev, KiSzamla.szamlaszam, Sum((egysegar)*(mennyiseg)*KiSzamla.AFA/100) AS osszszamlaertek FROM Ugyfel INNER JOIN (KiSzamla INNER JOIN Szamlasor ON KiSzamla.szamlaszam=Szamlasor.szamlaszam) ON Ugyfel.azonosito=KiSzamla.ugyfelID WHERE (((KiSzamla.szamlaszam) In (SELECT bejovopenz.szamlaszam FROM bejovopenz))) GROUP BY Ugyfel.nev, KiSzamla.szamlaszam; Minden számlára az összkifizetés SELECT bejovopenz.szamlaszam, Sum(bejovoPenz.osszeg) AS SumOfosszeg FROM bejovopenz GROUP BY bejovopenz.szamlaszam; 36

A két lekérdezést kombinálva kapjuk meg a tényleges állást SELECT ReszlegesenFizetettSzamlak.nev, ReszlegesenFizetettSzamlak.szamlaszam, ReszlegesenFizetettSzamlak.osszSzamlaErtek, SzamlaraFizetes.SumOfosszeg, (osszszamlaertek)-(sumofosszeg) AS kulonbseg FROM ReszlegesenFizetettSzamlak INNER JOIN SzamlaraFizetes ON ReszlegesenFizetettSzamlak.szamlaszam = SzamlaraFizetes.szamlaszam; 37

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Marosvásárhely Csak a kifizetetlen számlák, s rajtuk levő összegek (SELECT * FROM TeljesenKifizetetlenSzamlak) UNION (SELECT nev,szamlaszam,kulonbseg FROM ReszlegesAllas WHERE kulonbseg<>0); Kik vannak késésben a számla-kifizetéssel SELECT KiSzamla.szamlaszam, CsakTartozasok.osszSzamlaErtek, (Datum)+(hatarido)AS Expr1 FROM KiSzamla INNER JOIN CsakTartozasok ON KiSzamla.szamlaszam=CsakTartozasok.szamlaszam WHERE Datum+hatarido>Date(); 38

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Marosvásárhely Kik fizettek egyáltalán késve SELECT Ugyfel.nev, KiSzamla.szamlaszam, bejovopenz.datum- KiSzamla.datum-[hatarido] AS kesesnap, bejovopenz.osszeg FROM Ugyfel INNER JOIN (KiSzamla INNER JOIN bejovopenz ON KiSzamla.szamlaszam=bejovoPenz.szamlaszam) ON Ugyfel.azonosito=KiSzamla.ugyfelID WHERE (((bejovopenz.datum-kiszamla.datum-(hatarido))>0)); 39