300 likes | 391 Views
SQL történelem. 1970 Edgar F. Codd (IBM) cikke 12 szabály a relációs adatmodellekre 1979 első kereskedelmi forgalmazású relációs adatbáziskezelő 1986 az ANSI elfogadta az első SQL szabvány t Mára minden jelentősebb relácós-adatbázis kezelő SQL alapú (Oracle,IBM DB2…). Az SQL nyelv.
E N D
SQL történelem • 1970 Edgar F. Codd (IBM) cikke 12 szabály a relációs adatmodellekre • 1979 első kereskedelmi forgalmazású relációs adatbáziskezelő • 1986 az ANSI elfogadta az első SQL szabványt • Mára minden jelentősebb relácós-adatbázis kezelő SQL alapú (Oracle,IBM DB2…)
Az SQL nyelv • SQL= Structured Query Language • (nem a fizikai tárolás, az algoritmus a fontos, hanem a feldolgozás eredményének meghatározásán van a hangsúly) • A nyelvi elemeket szokásos adatdefiníciós(Data Definition Language, DDL) és adatkezelési (Data Manipulation Language, DML) részekre bontani. • A nyelvben az utasításokat a pontosvessző választja el egymástól.
Adatdefiníciós utasítások (pl.) • CREATE • Adatbázis objektum létrehozása. • CREATE TABLE Szamla (Szamlaszam NUMERIC(24),Tulajdonos VARCHAR(60),Nyitas DATE,Allapot VARCHAR(1), PRIMARY KEY (Szamlaszam)); • ...
Adatkezelő utasítások • SELECT • Az utasítás az adatok egy halmazát válogatja ki egy táblázatba a relációs adatbázisból (az ACCESS választó lekérdezése) • Záradékai (majdnem mind opcionális): • FROM, WHERE, GROUP BY, HAVING, ORDER BY
SELECT • A SELECT mögött az eredményhalmaz oszlopait kell itt felsorolni. • Nagyon hasznos, hogy további SELECT-ek is lehetnek benne! • SELECT Vevő.NÉV • SELECT Vevő.* • SELECT Vevő.NÉV, Vevő.LAKCÍM • SELECT Csalad.GYERMEK, [meddig]-[mettől] AS hossz
FROM • Meghatározza, hogy mely adatbázis-táblákból szeretnénk összegyűjteni az adatokat. • SELECT * • FROM Vevő • SELECT Vevő. NÉV • FROM Vevő • Több táblánál minden sort minden sorral párosít • SELECT * (Ez így persze nem jó semmire, Descartes szorzat) • FROM Beteg, Kezeles
WHERE • Szűrési feltételeket fogalmaz meg, amelyek szűkítik az eredményhalmazt (a Descartes-szorzathoz képest) • SELECT Csalad.SZÜLŐ • FROM Csalad • WHERE (((Csalad.SZÜLŐ)="ENDRE")); • SELECT *FROM Beteg, KezelesWHERE Beteg.ID = Kezeles.BetegID • Feltételben AND, OR, BETWEEN…
GROUP BY • Egyes sorok összevonását, csoportosítását írja elő az eredménytáblában • SELECT SZÜLŐ, Count(SZÜLŐ) AS Gyermekszám • FROM Csalad • GROUP BY Csalad.SZÜLŐ;
GROUP BY 2 • SELECT SZÜLŐ, Count(*) • FROM Csalad • GROUP BY Csalad.SZÜLŐ; SQL-es megoldás
GROUP BY 3 • Feltétel is megadható • SELECT COUNT(*), Tulajdonos • FROM Szamla • WHERE Allapot = 'N‘ • GROUP BY Tulajdonos • A fenti példa a Tulajdonos oszlop alapján csoportosítja a sorokat. A csoportosítás előtt kivehetjük a feltételnek nem megfelelő rekordokat.
HAVING (group by megelőzi) • A WHERE-hez hasonlóan itt is szűrést fogalmaz-hatunk meg, azonban itt a csoportosítás utáni eredményhalmazra. • SELECT COUNT(*), Tulajdonos • FROM Szamla • WHERE Allapot = 'N‘ • GROUP BY Tulajdonos • HAVING COUNT(*) > 1 • Az előző példához képest itt annyi a módosulás, hogy csak azok a csoportok jelennek meg, amelyek egynél több sorból lettek összevonva.
ORDER BY • Az eredményhalmaz rendezését adja meg. • SELECT Csalad.SZÜLŐ • FROM Csalad • ORDER BY Csalad.SZÜLŐ; • Vagy csökkenőben rendezve • SELECT Csalad.SZÜLŐ • FROM Csalad • ORDER BY Csalad.SZÜLŐ DESC;
További adatkezelő utasítások • INSERT • Adatokat ad hozzá egy táblához. • INSERT INTO Szamla(Szamlaszam,Tulajdonos,Nyitas, Allapot) VALUES (123456, 'H. Kovács Géza', '1996.05.14.', 'N'); • UPDATE • Módosítást hajt végre az adatokon. • UPDATE Szamla SET Allapot = 'D' WHERE Szamlaszam = 123456; • DELETE • Adatokat töröl egy táblából. • DELETE FROM Beteg WHERE TAJ = '123 456 789';
Mi legyen ebből? • A kiválasztott adatok: • Név, cím, adószám, rendelés dátuma, rendelésszám, termékkód, terméknév, mennyiség, bruttó egységár, vállalt határidő • Elnevezések: • Név, cím, adószám, rend_dátum, rend_szám, kód, név, darab, dátum
Az adatok csoportosítása Egy bizonylaton csak egyszer fordulhat elő Egy bizonylaton többször is előfordulhat Most így állunk: RENDELÉSFEJ{rend_szám, név, cím, adószám, rend_dátum} RENDELÉS{rend_szám,kód, név, darab, ár, dátum}
További alakítások • Vegyük ki a megrendelőre vonatkozó adatokat és helyettesítsük egyetlen kóddal (partner_kód) • Hasonlóan vegyük ki a termékre jellemző adatokat és csak a kód-ot hagyjuk meg (kód) • Tudni szeretnénk, hogy elkészült-e már a termék, ezért a RENDELÉS táblában legyen egy új mező • Így tehát: • PARTNER{partner_kód, név, cím, adószám} • RENDELÉSFEJ{rend_szám, partner_kód, rend_dátum} • RENDELÉS{rend_szám,kód, darab, dátum, kész} • TERMÉK{kód, név, ár}
További alakítások 2 • A PARTNER táblát a további példáinkban nem használjuk (a rendelésre koncentrálunk) • Egy termék többféle anyagból készül. Tárolni szeretnénk a termékek milyen anyagokból épülnek fel (ez egy N:M kapcsolt lenne) • Ezért egy új, szerkezet nevű táblát hozunkÍgy:TERMÉK : SZERKEZET 1:NSZERKEZET : ANYAG N:1
Nézzük az adatbázist! • Az adatbázis szerkezete tehát:
A feladatok (SQL)1 • Írassuk ki azoknak az anyagoknak az azonosítóját, amelyek 2-vel kezdődnek! • Készítsünk listát a ‘cm’-ben és a ‘m’-ben mért anyagok azonosítójáról! • Keressük azokat a 2000. január 1.-re és 2.-ra vállalt rendeléseket, amelyekben ‘A’ betűvel kezdődő kódú terméket rendeltek meg. Írassuk ki a feltételnek megfelelő rendelések minden adatát a rendelés táblából!
A feladatok (SQL)2 • Azon termékek kódját, darabszámát és megrendelésszámát keressük, amelyeket a mai naptól számítva 1 héten belül kell elkészíteni és még nincs kész! • Egyszerű lekérdezések 1 táblából • Véletlen szám (FROM nélküli SELECT) • A mértékegységek listája • Tábla sorainak száma • Hány anyag neve kezdődik az egyes betükkel?
A feladatok (SQL)3 • Csak azokat a betűket írassuk ki, amelyikkel legalább 2 anyag neve kezdődik! • Számoljuk össze, hogy az anyagok közül melyikből áll rendelkezésre 15-nél több, 15, vagy kevesebb! • Paraméteres lekérdezésKeressük meg, hogy egy a lekérdezés idején definiált karaktersorozattal kezdődő nevű termék van-e az adatbázisban?
A feladatok (SQL)4 • Táblák összekapcsolása Határozzuk meg, hogy az egyes termékek mely anyagokból épülnek fel! (direktszorzat) • Egymásba ágyazott SELECT Keressük meg azokat a termékeket, amelyekhez kell a 113-as kódú anyag!
SELECT Rnd() AS véletlen; • SELECT mért_egys • FROM anyag; • SELECT DISTINCT mért_egys • FROM anyag; • SELECT mért_egys • FROM anyag • GROUP BY mért_egys;
SELECT COUNT(DISTINCT mért_egys) • FROM anyag; • SELECT Left(neve, 1) AS első • FROM anyag • GROUP BY Left(neve,1) • HAVING COUNT(*)>=2;