2020. április 21., kedd

SQL alapismeretek

Osztályok tábla


SQL parancsok

Feltételek
(egy adott oszlopra vonatkoznak):
PRIMARY KEY: elsődleges kulcs
UNIQUE: kulcs
REFERENCES tábla(oszlop) [ON-feltételek]: külső kulcs
NOT NULL: kötelező kitölteni
CHECK feltétel: értékbevitelnél ellenőrzi a feltétel teljesülését
DEFAULT érték:
alapértelmezett érték definiálható
AUTO_INCREMENT: számláló típus
Feltételek
SQL
Táblafeltételek
(az egész táblára vonatkoznak):
PRIMARY KEY (oszloplista): elsődleges kulcs
UNIQUE (oszloplista): kulcs
FOREIGN KEY (oszloplista) REFERENCES tábla(oszloplista) [ON-
feltételek]: külső kulcs
Táblafeltételek
SQL
CREATE TABLE felhasznalo(
email VARCHAR(100) PRIMARY KEY,
nick VARCHAR(20) NOT NULL,
teljesnev VARCHAR(40)
);
CREATE TABLE hozzaszolas(
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(100) REFERENCES felhasznalo(email),
tartalom TEXT ,
mikor TIMESTAMP
);
Tábla létrehozása
SQL
Az előzőekkel ekvivalens:
CREATE TABLE felhasznalo(
email VARCHAR(100),
nick VARCHAR(20) NOT NULL,
teljesnev VARCHAR(40),
PRIMARY KEY(email)
);
Tábla létrehozása
SQL
CREATE TABLE hozzaszolas(
id INT AUTO_INCREMENT,
email VARCHAR(100),
tartalom TEXT ,
mikor TIMESTAMP,
PRIMARY KEY(id),
FOREIGN KEY(email) REFERENCES felhasznalo(email)
);
Tábla létrehozása
SQL
ALTER TABLE táblanév
[ADD (újelem, ..., újelem)]
[MODIFY (módosítás, ..., módosítás)]
[DROP (oszlop, ..., oszlop)];
ALTER TABLE felhasznalo ADD (szul_ev VARCHAR(4));
ALTER TABLE felhasznalo MODIFY szul_ev YEAR;
//ALTER TABLE felhasznalo CHANGE szul_ev szul_ev YEAR;
ALTER TABLE felhasznalo DROP szul_ev;
Tábla módosítása
SQL
DROP TABLE táblanév;
DROP TABLE felhasznalo;
Tábla törlése
SQL
INSERT INTO táblanév [(oszloplista)] VALUES (értéklista);
INSERT INTO felhasznalo (email, nick, teljesnev) VALUES
('kovacs.pistike@gmail.com','pistike','Kovács Pisti');
Vagy:
INSERT INTO felhasznalo VALUES
('kovacs.pistike@gmail.com','pistike','Kovács Pisti');
Adatok beszúrása
SQL
UPDATE táblanév
SET oszlop = kifejezés, ..., oszlop = kifejezés
[ WHERE feltétel ];
UPDATE felhasznalo SET nick='pisti007'
WHERE email='kovacs.pistike@gmail.com';
Adatok módosítása
SQL
DELETE FROM táblanév
[ WHERE feltétel ];
DELETE FROM felhasznalo
WHERE email='kovacs.pistike@gmail.com';
Adatok módosítása
-----------

SQL
SELECT [DISTINCT] oszloplista FROM tablalista
[WHERE feltetel]
[GROUP BY oszloplista]
[HAVING feltetel]
[ORDER BY oszloplista];
Lekérdezések
SQL
Összesítő függvények:

AVG: átlagérték.

SUM: összeg.

MAX: maximális érték.

MIN: minimális érték.

COUNT: elemek száma. Ennél a függvénynél
oszlopnév
helyére * is
írható, amely
valamennyi oszlopot együtt jelenti.
Lekérdezések (függvények)
SQL
Relációjelek:
=, <=, >=, !=, <>
Logikai m
ű
veletek:
AND, OR, NOT
x BETWEEN a AND b
: igaz, ha a

x

b.
x LIKE minta
: igaz, ha az x karaktersorozat megfelel a megadott
mintának. Ha a mintában "%" illetve "_" jel szerepel, az tetszőleges
karaktersorozatot illetve tetszőleges karaktert jelent.
Lekérdezések (függvények)
SQL
SELECT * FROM felhasznalo;
SELECT nick, szul_ev FROM felhasznalo;
SELECT * FROM felhasznalo, hozzaszolas; (Descartes-szorzat)
SELECT * FROM felhasznalo WHERE szul_ev<1990;
SELECT nick, szul_ev FROM felhasznalo ORDER BY szul_ev DESC;
ORDER BY oszlopnév [DESC], ..., oszlopnév [DESC]

ASC: (alapértelmezett) növekvő sorrend

DESC: csökkenő sorrend
Lekérdezések
 -----------

Tábla létrehozása, feltöltése SQL-ben

Az SQL relációs adatbázisok létrehozására és lekérdezésére kifejlesztett nyelv. (SQL= Structured Query Language)

Az SQL parancsokat funkciójuk szerint 4 csoportba sorolhatjuk:

    Adatdefiníciós parancsok: (DDL - Data Definition Language, szokás adatleíró parancsoknak is nevezni.) Adatbázist, táblákat hozhatunk létre, feltölthetjük, módosíthatjuk vagy törölhetjük őket.
    CREATE, ALTER, DROP
    Adatmódosító utasítások: (DML - Data Manipulation Language) Ezek szolgálnak az adatok beírására, módosítására és törlésére.
    INSERT, UPDATE, DELETE
    Lekérdező parancsok: (DQL - Data Query Language) Lekérdezések készítésére alkalmas parancsok.
    SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, CASE
    Vezérlő parancsok: Fájlok megnyitását, lezárását, a rekordmutatók mozgatását, parancsok végrehajtásának jóváhagyását tudjuk elvégezni.

Adatdefiníciós parancsok - DDL

    Adatbázis létrehozása

    CREATE DATABASE adatbázisnév;

    Adatbázis megnyitása

    START DATABASE adatbázisnév;

    Ha hozzá akarunk férni az adatbázishoz, dolgozni akarunk vele, akkor meg kell gyitni az adatbázist.
    Adatbázis lezárása

    STOP DATABASE;

    Adatbázis törlése

    DROP DATABASE adatbázisnév;

    Ezzel nagyon vigyázzunk!
    Tábla létrehozása

    CREATE TABLE táblanév (oszlopnév1 adattípus(méret), oszlopnév2 adattípus(méret), ...);

    Az oszlopneveknél az adattípus mellé beírható a NULL vagy NOT NULL opció.
    Tábla módosítása

    ALTER TABLE táblanév ADD (oszlopnév1 adattípus, oszlopnév2 adattípus, ...);

    Olyan verziókban, ahol lehet módosítani az oszlopokat az ALTER TABLE táblanév MODIFY (oszlopnév1 adattípus, oszlopnév2 adattípus, ...); parancsot használhatjuk.
    Tábla törlése az adatbázisból

    DROP TABLE táblanév;

Adatmódosító parancsok - DML

    Új rekord felvitele

    INSERT INTO táblanév (oszlopnevek) VALUES (értékek);

    A tábla rekordjainak módosítása

    UPDATE táblanév SET oszlopnév1 = kifejezés1, oszlopnév2 = kifejezés2, ... WHERE logikai kifejezés;

    Rekord törlése

    DELETE FROM táblanév WHERE feltétel;
-----------
Adatbázis
Kulcsok fajtái

Szuperkulcs: Az oszlopoknak olyan halmaza, melyre igaz, hogy a táblázatnak nincs két olyan sora, amelyben ezeknek az oszlopoknak az értékei rendre megegyeznének. (Szuperkulcs mindig van, hiszen az összes attribútum együtt tuti, hogy szuperkulcsot alkot.)

Kulcs: Oszlopoknak olyan halmaza, amely minimális elemszámú szuperkulcs. (Az az attribútum vagy attribútumok halmaza, melynek értékei egyértelműen azonosítják a relációt. Ez a definíció séma (szerkezet) szintű, ami azt jelenti, hogy független a tábla aktuális tartalmától.)
(Más megfogalmazásban: Ha egy olyan attribútum halmazból, amely szuperkulcs, kiveszünk egy attribútumot és a maradék attribútum(ok) már nem alkot(nak) szuperkulcsot, akkor kulcsról beszélünk.)

Egyszerű kulcs: A kulcs egyetlen attribútumból áll.

Összetett kulcs: A kulcsot kettő vagy több oszlop kombinációja alkotja. Előfordulhat az is, hogy az összes oszlop szerepel a kulcsban.

Minimális kulcs: Ha összetett kulcs esetén bármely attribútumot elhagyjuk a kulcsból, és az így megmaradt oszlopok kombinációja már nem rendelkezik kulcs tulajdonsággal, akkor az összetett kulcsot minimálisnak nevezzük. Az egyszerű kulcs mindig minimális.

Kulcsjelöltek: Egy relációban több különböző oszlop vagy oszlopkombináció létezhet, amely eleget tesz a minimális kulcs definíciójának, ezeket a lehetséges kulcsokat kandidate kulcsoknak vagy kulcsjelölteknek nevezzük.

Elsődleges kulcs (primary key): Az a kulcs, melyet kiválasztunk a kulcsjelöltek közül és kulcsként használunk. A ki nem választott kulcsjelölteket alternatív kulcsnak nevezzük. Az elsődleges kulcsnak nem lehet NULL az értéke!!!

Idegen kulcs (foreign key): Olyan attribútum vagy attribútum halmaz egy adott relációban, amelyik egy másik relációban elsődleges kulcsként szerepel. Az idegen kulcsot tartalmazó relációt hivatkozó relációnak, a másikat, melyben ez a kulcs elsődleges, hivatkozott relációnak nevezzük. Az idegen kulcsot nagyon gyakran külső kulcsnak is hívják.
------------

Tábla létrehozása, feltöltése SQL-ben

Az SQL relációs adatbázisok létrehozására és lekérdezésére kifejlesztett nyelv. (SQL= Structured Query Language)
Az SQL parancsokat funkciójuk szerint 4 csoportba sorolhatjuk:
  1. Adatdefiníciós parancsok: (DDL - Data Definition Language, szokás adatleíró parancsoknak is nevezni.) Adatbázist, táblákat hozhatunk létre, feltölthetjük, módosíthatjuk vagy törölhetjük őket.
    CREATE, ALTER, DROP
  2. Adatmódosító utasítások: (DML - Data Manipulation Language) Ezek szolgálnak az adatok beírására, módosítására és törlésére.
    INSERT, UPDATE, DELETE
  3. Lekérdező parancsok: (DQL - Data Query Language) Lekérdezések készítésére alkalmas parancsok.
    SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, CASE
  4. Vezérlő parancsok: Fájlok megnyitását, lezárását, a rekordmutatók mozgatását, parancsok végrehajtásának jóváhagyását tudjuk elvégezni.

Adatdefiníciós parancsok - DDL

  • Adatbázis létrehozása
    CREATE DATABASE adatbázisnév;
  • Adatbázis megnyitása
    START DATABASE adatbázisnév;
    Ha hozzá akarunk férni az adatbázishoz, dolgozni akarunk vele, akkor meg kell gyitni az adatbázist.
  • Adatbázis lezárása
    STOP DATABASE;
  • Adatbázis törlése
    DROP DATABASE adatbázisnév;
    Ezzel nagyon vigyázzunk!
  • Tábla létrehozása
    CREATE TABLE táblanév (oszlopnév1 adattípus(méret), oszlopnév2 adattípus(méret), ...);
    Az oszlopneveknél az adattípus mellé beírható a NULL vagy NOT NULL opció.
  • Tábla módosítása
    ALTER TABLE táblanév ADD (oszlopnév1 adattípus, oszlopnév2 adattípus, ...);
    Olyan verziókban, ahol lehet módosítani az oszlopokat az ALTER TABLE táblanév MODIFY (oszlopnév1 adattípus, oszlopnév2 adattípus, ...); parancsot használhatjuk.
  • Tábla törlése az adatbázisból
    DROP TABLE táblanév;

Adatmódosító parancsok - DML

  • Új rekord felvitele
    INSERT INTO táblanév (oszlopnevek) VALUES (értékek);
  • A tábla rekordjainak módosítása
    UPDATE táblanév SET oszlopnév1 = kifejezés1, oszlopnév2 = kifejezés2, ... WHERE logikai kifejezés;
  • Rekord törlése
    DELETE FROM táblanév WHERE feltétel;
    ------------------
    Választó lekérdezések
    A legegyszerűbb SQL utasítás a következő

    SELECT mezőnevek FROM táblák;

    Adott táblák adott mezőinek értékét adja vissza.

    SELECT név, cím FROM Beteg;

    A lekérdezés kilistázza minden beteg nevét és címét a Beteg táblából. Amennyiben a tábla összes mezőjét látni szeretnénk, a mezőnevek felsorolása helyett írhatunk * karaktert.

    SELECT * FROM Beteg;

    Ez a lekérdezés kilistázza a betegek minden adatát, vagyis minden mezőt.
    Rekordok szűrése feltételekkel

    A mezőkre vonatkozó feltételeket a WHERE kulcsszó után írhatjuk be.

    SELECT mezőnevek FROM táblák WHERE feltételek;

    SELECT név, cím FROM Beteg WHERE szoba=120;

    A lekérdezés kilistázza azon betegek nevét és címét, akik a 120-as szobában laknak.
    Számokra vonatkozó feltételek

    SELECT név, cím FROM Beteg WHERE szoba=120;

    Akik a 120-as szobában laknak.

    SELECT név, cím FROM Beteg WHERE szoba<120;

    Akiknek a szobaszáma kisebb, mint 120.

    SELECT név, cím FROM Beteg WHERE szoba>120;

    Akiknek a szobaszáma nagyobb, mint 120.

    SELECT név, cím FROM Beteg WHERE szoba<>120

    Akik nem a 120-as szobában laknak.

    SELECT név, cím FROM Beteg WHERE szoba BETWEEN 120 AND 140;

    Ahol a szobaszám 120 és 140 közé esik - beleértve a határokat is.
    Szövegre vonatkozó feltételek

    Szövegre kétféleképpen is szabhatunk feltételt: Vagy egy fix értékre keresünk rá, vagy valamilyen mintára illeszkedő értékeket keresünk meg.

    SELECT név, szoba FROM Beteg WHERE név = "Nyúl Béla";

    Ebben az esetben fix értékre (Nyúl Béla) kerestünk rá. Vagyis kilistáztuk Nyúl Béla nevét és szobaszámát.

    A másik lehetőség a LIKE operátor használata, melynek segítségével mintát lehet illeszteni a szövegre. A LIKE operátort az "=" helyére kell írni, és a LIKE után idézőjelek között adható meg a minta.

    SELECT név, szoba FROM Beteg WHERE név LIKE "Nyúl*";

    A "Nyúl"-lal kezdődő nevű betegek neve és szobaszáma.

    A minta tartalmazhat *-t és ?-t is, ezek használata megegyezik a fájlkelzelésből ismert * és ? használatával. A * 0, egy, vagy több tetszőleges karaktert helyettesít, míg a ? mindig pontosan egy karaktert helyettesíthet. Ha speciális karakterre akarunk keresni, akkor ezeket szögletes zárójelek között kell megadni (pl. [*]). Szintén szögletes zárójelek között kell megadni, ha intervallumba eső karaktert keresünk (pl. [a-z]).

    A következő táblázat összefoglalja a LIKE művelettel végrehajtható kereséseket.

    Helyettesítendő    Minták    Megfelelő érték    Nem megfelelő érték
    Több karakter    a*a
    *ab*    aa, aBa, aBBBa
    abc, AABB, Xab    aBC
    aZb, bac
    Speciális karakter    a[*]a    a*a    aaa
    Több karakter    ab*    abcdefg, abc    cab, aab
    Egyetlen karakter    a?a    aaa, a3a, aBa    aBBBa
    Egyetlen számjegy    a#a    a0a, a1a, a2a    aaa, a10a
    Karakter tartomány    [a-z]    f, p, j    2, &
    Tartományon kívüli    [!a-z]    9, &, %    b, a
    Nem számjegy    [!0-9]    A, a, &, ~    0, 1, 9
    Kombinált    a[!b-m]#    An9, az0, a99    abc, aj0
    Dátumra vonatkozó feltételek

    Dátumokkal kapcsolatos feltételek kialakításához általában a dátumkezelő függvényeket használjuk. Ezek a következők:

        Year(dátum) - Visszaadja a dátum év részét.

        Month(dátum) - Visszaadja a dátum hónap részét (1..12).

        Day(dátum) - Visszaadja a dátum nap részét.

        Date() - Visszaadja a mai dátumot.

        DateSerial(év, hó, nap) - A három megadott értékből dátumot csinál.

        DateDiff(tartomány, dátum1, dátum2) - Visszaadja a megadott két dátum közötti különbséget, mely különbség lehet nap, hónap és év is a tartománytól függően. Az "yyyy" jelöli az évet, a "m" jelöli a hónapot, "d" jelöli a napot.

        DateAdd(tartomány, növekmény, dátum) - A DateAdd függvény segítségével dátumhoz lehet hozzáadni napokat, heteket, hónapokat, ill. éveket is. Hogy mit az előbbiek közül, azt a tartomány határozza meg, és hogy mennyit azt pedig a növekmény.

        SELECT név,szül FROM Beteg WHERE YEAR(szül)<1974;

        Kilistázza az 1974 előtt született betegek nevét és születési dátumát.

        SELECT név,szül FROM Beteg WHERE Dátum = DATESERIAL(1965, 4, 3)

        Kilistázza az 1965. április 3-án született betegek nevét és születési dátumát.

        SELECT név FROM Beteg WHERE DATEDIFF("yyyy", szül, Date()=12)

        Kilistázza a 12 éves betegeket.

    Logikai értékre vonatkozó feltételek

    Egy logikai érték már önmagában feltétel, hiszen értéke igaz vagy hamis lehet csak. Éppen ezért a következő módon vizsgálhatunk logikai értéket, mint feltételt:

    SELECT név,szül FROM Beteg WHERE neme;

    Kikeresi azokat az értékeket, ahol a neme mező értéke igaz.

    SELECT név,szül FROM Beteg WHERE NOT(neme);

    Kikeresi azokat az értékeket, ahol a neme mező értéke hamis.
    Összetett feltételek kialakítása

    Lekérdezésünk tartalmazhat több feltételt is, melyeket és-sel (AND) ill. vagy-gyal (OR) kapcsolhatunk össze. A WHERE kulcsszót több feltétel esetén is csak egyszer kell leírni.

    SELECT név,cím FROM Beteg WHERE szoba=120 AND YEAR(szül)=1963;

    Kilistázzuk azon betegek nevét és címét, akik a 120-as szobában laknak és 1963-ban születtek.

        Kifejezések és függvények, mint oszlopok

        Eddigi lekérdezéseinkben minden oszlop megfelelt egy mezőnek a táblából. Lehetőségünk van azonban olyan oszlopokat is elhelyezni a lekérdezésben, melyek nem mezői a táblának, hanem más mezőkből számított értékeket tartalmaznak.

        Például szeretnénk látni minden betegről, hogy hány gyógyszert fogyaszt összesen a kórházban tartózkodása alatt. Olyan mezőnk nincs, amely ezt az értéket tárolná, viszont van egy mezőnk, ami megmutatja, hogy mennyi a beteg napi gyógyszeradagja (gyadag) és van egy mezőnk, ami megmutatja, hogy hány napig marad a kórházban (napok). Ha ezt a két értéket összeszorozzuk minden betegnél külön-külön, akkor megkapjuk, hogy melyik beteg hány gyógyszert vesz be összesen a benntartózkodása alatt.

        A lekérdezés a következőképpen néz ki:

        SELECT név,napok*gyadag FROM Beteg;

        Kifejezéseink kialakításához függvényeket is használhatunk.

        SELECT név,felvétel,napok,DATEADD("d",napok,felvétel) FROM Beteg;

        Ez a lekérdezés kiírja a betegek nevét, felvételének időpontját, azt hogy hány napig maradnak bent, és hogy mikor mennek haza. A négy érték közül csak hármat tartalmaz a tábla, a távozás időpontját nem. Viszont a felvétel időpontjából, és a bent eltöltendő napok számából ki tudjuk ezt számolni, mégpedig a DateAdd függvénnyel.
        Adatok rendezése

        Az eddigi lekérdezésekben a rekordok olyan sorrendben jelentek meg, amilyen sorrendben a táblába felvittük őket. Lehetőségünk van viszont valamely mező (ill. mezők) értékei szerint sorba rendezni adatainkat az ORDER BY kulcsszó segítségével, melyet a feltétel rész után adhatunk meg.

        SELECT név,cím FROM Beteg WHERE szoba=120 ORDER BY név;

        A 120-as szoba lakóinak nevét és címét kapjuk vissza, név szerint rendezve.

        A rendezés lehet növekvő és csökkenő egyaránt. Az alapértelmezett rendezés a növekvő.

        ORDER BY név;

        Növekvő sorrend.

        ORDER BY név DESC;

        Csökkenő sorrend.
        Csoportosító függvények, adatok csoportosítása
        Csoportosító, összesítő függvények

        Az eddig megismert függvények mindegyike egy adott rekordon végzett el valamilyen műveletet. Arra idáig nem volt lehetőségünk, hogy különböző rekordok valamely mezőit összegezzük, vagy átlagoljuk, stb. Erre a célra a következő függvények állnak rendelkezésünkre:

        SUM(mező)

        Összegzi a mező értékeit.

        AVG(mező)

        Átlagolja a mező értékeit

        MIN(mező)

        A mező értékei közül a legkisebb.

        MAX(mező)

        A mező értékei közül a legnagyobb.

        COUNT(*)

        A rekordok száma.

        STD(mező)

        A mező értékének szórását adja meg.

        SELECT SUM(gyadag) FROM Beteg;

        Ekkor visszakapjuk a kórház teljes napi gyógyszerfogyasztását.

        SELECT AVG(gyadag) FROM Beteg;

        Ekkor visszakapjuk a kórház átlagos napi gyógyszerfogyasztását.

        SELECT COUNT(*) FROM Beteg WHERE szoba=120;

        Visszakapjuk, hogy hányan laknak a 120-as szobában.
        Csoportosítás

        A csoportosító függvények nem csak a teljes táblára vonatkozhatnak, hanem kiszámolhatjuk őket csoportonként is, ha az adatokat csoportosítjuk valamely mező értékei szerint. Csoportosítás a GROUP BY kulcsszó segítségével történik:

        SELECT szoba, COUNT(*) FROM Beteg GROUP BY szoba;

        Minden szobaszám mellet láthatjuk, hogy hányan laknak az adott szobában.
        Rekordokra vonatkozó feltételek

        A rekordok szűrése a WHERE kulcsszóval természetesen itt is megengedett.

        SELECT szoba, AVG(napok) FROM Beteg WHERE NOT(neme);

        Szobánként visszakapjuk a nők átlagos bentmaradási idejét.
        Csoportosító függvényekre vonatkozó feltételek

        Ha a csoportosító függvényekre vonatkozó feltételt akarunk megadni, azt a HAVING kulcsszóval tehetjük meg. A HAVING résznek a GROUP BY rész után kell állnia.

        SELECT szoba, AVG(napok) FROM Beteg GROUP BY szoba HAVING COUNT(*)>10;

        Listát kapunk szobánként az átlag bentmaradási időről, de csak azokban a szobákban, ahol több, mint 10 beteg lakik.

    Akciólekérdezések

    Az akciólekérdezések nem listáznak ki adatokat, hanem mindig csak módosítanak, törölnek, stb. (valamilyen műveletet végeznek velük). Ha elmentünk egy ilyen lekérdezést arttól még nem változnak az adatok, csak akkor, ha le is futtatjuk ezt. (Access-ben ez a lekérdezés futtatása szerkesztő nézetben a piros színű felkiáltójellel történhet.)
    Törlő lekérdezés

    DELETE * FROM Orvos WHERE fizetés>500000;

    Törli a lekérdezés azokat a rekordokat az Orvos táblából, akiknek a fizetése nagyobb, mint 500000 Ft.
    Frissítő lekérdezés

    UPDATE Beteg SET gyadag=gyadag*2 WHERE szoba=120;

    Növeljük a gyógyszeradagját a kétszeresére a 120. szoba lakóinak.
    Hozzáfűző lekérdezés

    INSERT INTO Orvos(név, cím, osztály, fizetés, dátum) VALUES "Fülorrgé Gergely", "Hajdúnánás", "sebészet", 100000, date();

    vagy

    INSERT INTO Orvos(név, cím, osztály, fizetés, dátum) SELECT Fogorvos(név, cím, "fogászat", 100000, date());

    (Ebben az esetben az Orvos táblába név, cím oszlopaiba szúrjuk be a Fogorvos tábla név, cím oszlopainak értékeit, valamint az Orvos tábla osztály oszlopába a "fogászat" értéket, az Orvos tábla fizetés oszlopába a 100000-et, az Orvos tábla dátum oszlopába pedig a date() fv. által visszaadott értéket.)
---------------
Példa tábla létrehozására

DROP DATABASE IF EXISTS iskola;
CREATE DATABASE  iskola;
USE  iskola;
CREATE TABLE osztalyok (
    osztaly varchar(60),
    osztalyfonok varchar(15),
    tanterem int,
     szakma varchar(60), );
-------------------
GYAKORLÁS
-------------------
A suli adatbázisban adott a diakok tábla, melynek egy részlete látható az alábbi táblázatban.
veznev    kernev    osztaly    eletkor
Alma    Alma    10.A    14
Akar    Aranka    10.A    15
Bunkó    Balambér    10.A    15
Borzasztó    Béla    10.A    15
Cumi    Cecília    10.B    16
Dankó    Dániel    10.B    17
Éles    Elemér    12.E    17
Felettes    Ferenc    12.E    21
Galamb    Géza    12.E    18
Humor    Hunor    12.E    18
Izgága    Ilona    12.E    18

Adjuk meg a megfelelő SQL parancsokat a következő feladatokban!

    Listázza ki a 10.A osztály 15 éves tanulóit!
    Listázza ki a 10. évfolyam tanulóit névsorba rendezve!
    Hány tanuló jár a 10.A-ba?
        Adja meg az egyes osztályok létszámát!
        Adja meg az osztályok létszámát! Csak azok az osztályok jelenjenek meg, amelyekbe 20-nál kevesebb tanuló jár!
    Hány "E" osztály van az iskolába?
    Listázza ki Galamb Géza osztálytársait névsorba rendezve!

    Listázza ki a 10.A osztály 15 éves tanulóit!

    SELECT * FROM tanulok WHERE osztaly = "10.A" AND eletkor = 15;
    Listázza ki a 10. évfolyam tanulóit névsorba rendezve!

    SELECT * FROM tanulok WHERE osztaly LIKE "%10%" ORDER BY veznev + ' ' + kernev;
    Hány tanuló jár a 10.A-ba?

    SELECT count(*) FROM tanulok WHERE osztaly = "10.A";
        Adja meg az egyes osztályok létszámát!

        SELECT count(*) AS [osztályok száma] FROM tanulok GROUP BY osztaly;
        Adja meg az osztályok létszámát! Csak azok az osztályok jelenjenek meg, amelyekbe 20-nál kevesebb tanuló jár!

        SELECT osztaly AS osztály, count(*) AS létszám FROM tanulok GROUP BY osztaly HAVING count(*)<20;
    Hány "E" osztály van az iskolába?

    SELECT count(DISTINCT osztaly) FROM tanulok WHERE osztaly LIKE "%E%";
    MS Access-ben:
    SELECT count(*) AS [az E osztályok száma] FROM (SELECT DISTINCT osztaly FROM tanulok WHERE osztaly LIKE "*E*");
    Listázza ki Galamb Géza osztálytársait névsorba rendezve!

    SELECT veznev+" "+kernev FROM tanulok WHERE osztaly = (SELECT osztaly FROM tanulok WHERE veznev="Galamb" AND kernev="Géza") ORDER BY veznev, kernev;

A ceg adatbázisban adott a dolgozok tábla, melynek egy részlete látható az alábbi táblázatban.
veznev    kernev    osztaly    munkaviszony
Ha    László    informatika    4
Szag    Olga    személyügy    15
Ul    Tibor    termelés I.    9
Kapa    Róbert    pénzügy    6
Sü    Tibor    karbantartás    1
Nemm    Erika    marketing    17
Tú    Róbert    termelés I.    10
Fő    Alajos    termelés I.    23
Bartelen    Bertalan    biztonság    7
Humor    Hunor    termelés II.    11
Bazsa    Rózsa    fejlesztés    8

Adja meg a megfelelő SQL parancsokat a következő feladatokban!

    Listázza ki az informatika osztályon dolgozókat névsorba rendezve!
    Listázza ki a marketing osztályályon dolgozók közül azokat, akik 5 éve dolgoznak a cégnél!
    Adja meg, hogy hány különböző osztályon dolgoznak a cég alkalmazottjai!
        Adja meg az egyes osztályok létszámát!
        Írassa ki a Bartelen Bertalannal azonos osztályon dolgozók nevét sorba rendezve!
    Hányan dolgoznak a fejlesztésen?

    Listázza ki az informatika osztályon dolgozókat névsorba rendezve!

    SELECT veznev+" "+kernev FROM dolgozok WHERE osztaly="informatika" ORDER BY nev;
    Listázza ki a marketing osztályályon dolgozók közül azokat, akik 5 éve dolgoznak a cégnél!

    SELECT * FROM dolgozok WHERE osztaly="marketing" AND munkaviszony=5;
    Adja meg, hogy hány különböző osztályon dolgoznak a cég alkalmazottjai!

    SELECT count(DISTINCT osztaly) FROM dolgozok GROUP BY osztaly;
    MS Access-ben:
    SELECT count(*) AS [különböző osztályok száma] FROM (SELECT DISTINCT osztaly FROM dolgozok);
        Adja meg az egyes osztályok létszámát!

        SELECT osztaly, count(*) AS "dolgozók száma" FROM dolgozok GROUP BY osztaly;
        Írassa ki a Bartelen Bertalannal azonos osztályon dolgozók nevét sorba rendezve!

        SELECT veznev+" "+kernev FROM dolgozok WHERE osztaly=(SELECT osztaly FROM dolgozok WHERE veznev="Bartelen" AND kernev="Bertalan") ORDER BY nev;
    Hányan dolgoznak a fejlesztésen?

    SELECT count(*) AS [ennyien dolgoznak a fejlesztésen] FROM dolgozok WHERE osztaly="fejlesztés";

Adja meg a megfelelő SQL parancsokat a következő feladatokban!

    Hozzon létre egy táblát nyilvantartas néven! A tábla az alábbi mezőket tartalmazza!
    veznev char – 40, kernev char - 30, irszam integer, varos char - 30, utca char – 40, hazszam char – 10
    Bővítse a táblát szulev integer mezővel!
    Jelenítse meg az emberek teljes nevét és korát, névsor szerint növekvő sorrendben!
    Jelenítse meg azon települések neveit, ahol az irányítószám 2-essel kezdődik!
    Hányan laknak Biharröcsögén?
    Ki a legidősebb Károly?

    Hozzon létre egy táblát nyilvantartas néven! A tábla az alábbi mezőket tartalmazza!
    veznev char – 40, kernev char - 30, irszam integer, varos char - 30, utca char – 40, hazszam char – 10

    CREATE TABLE (veznev char(40), kernev char(30), irszam integer, varos char(30), utca char(40), haszam char(10));
    Bővítse a táblát szulev integer mezővel!

    ALTER TABLE nyilvantartas ADD COLUMN szulev integer;
    Jelenítse meg az emberek teljes nevét és korát, névsor szerint növekvő sorrendben!

    SELECT veznev + '  ' + kernev AS teljes_név, year(curdate())-szulev AS kor FROM nyilvantartas ORDER BY teljes_név;
    Jelenítse meg azon települések neveit, ahol az irányítószám 2-essel kezdődik!

    SELECT varos FROM nyilvantartas WHERE irszam>=2000 AND irszam<3000;
    Hányan laknak Biharröcsögén?

    SELECT count(*) FROM nyilvantartas WHERE varos="Biharröcsöge";
    Ki a legidősebb Károly?

    SELECT veznev + '  ' + kernev AS teljes_név, max(year(curdate())-szulev AS kor) FROM nyilvantartas WHERE kernev="Károly";

    Hozzon létre egy táblát a következő mezőkkel:
    név char – 40, szemszám char - 11, ivar boolean, kor integer!
    A szemszám legyen a kulcsmező! A tábla neve osztály legyen! (Az ivar mezőnél a true jelentse a nőt!)
    Egészítsse ki az osztály táblát a magasság mezővel, amely integer típusú legyen!
    Számítsa ki a magasságok összegét!
    Számítsa ki a magasság átlagát!
    Számolja meg hogy hány rekord van!
    Melyik a legnagyobb magasság?
    Melyik a legkisebb magasság?
    Kiknek a nevében van "e" karakter!
    Írassa ki a 165 cm-nél magasabbak nevét és magasságát!
    Írassa ki a neveket és magasságokat csökkenő sorban!
    Írassa ki ugyanezeket növekvő sorban!
    Írassa ki a 12 és 16 év közötti lányok adatait!

    Hozzon létre egy táblát a következő mezőkkel:
    név char – 40, szemszám char - 11, ivar boolean, kor integer!
    A szemszám legyen a kulcsmező! A tábla neve osztály legyen! (Az ivar mezőnél a true jelentse a nőt!)

    CREATE TABLE (név char(40), szemszám char(11), ivar boolean, kor integer, primary key(szemszám));
    Egészítsse ki az osztály táblát a magasság mezővel, amely integer típusú legyen!

    ALTER TABLE osztály ADD magasság integer;
    Számítsa ki a magasságok összegét!

    SELECT sum(magasság) AS [magasságok összege] FROM osztály;
    Számítsa ki a magasság átlagát!

    SELECT avg(magasság) AS [magasságok átlaga] FROM osztály;
    Számolja meg hogy hány rekord van!

    SELECT count(név) AS [rekordok száma] FROM osztály;
    Melyik a legnagyobb magasság?

    SELECT max(magasság) AS [legmagassabb] FROM osztály;
    Melyik a legkisebb magasság?

    SELECT min(magasság) AS [legkisebb] FROM osztály;
    Kiknek a nevében van "e" karakter!

    SELECT név FROM osztály WHERE osztály.név LIKE "%e%";
    (MS Access-ben: név LIKE "*e*")
    Írassa ki a 165 cm-nél magasabbak nevét és magasságát!

    SELECT név, magasság FROM osztály WHERE magasság>165;
    Írassa ki a neveket és magasságokat csökkenő sorban!

    SELECT név, magasság FROM osztály ORDER BY magasság DESC;
    Írassa ki ugyanezeket növekvő sorban!

    SELECT név, magasság FROM osztály ORDER BY magasság ASC;
    Írassa ki a 12 és 16 év közötti lányok adatait!

    SELECT * FROM osztály WHERE ivar = true AND kor BETWEEN 12 AND 16;

    Hozzon létre egy tanulok nevű táblát a következő mezőkkel:
    kod integer, nev char - 30, zsebpenz integer!
    A kod legyen az elsődleges kulcs!
    Lekérdezés segítségével írassuk ki az átlag zsebpénz, az összes zsebpénz és a legkevesebb zsebpénz értékét! A mezők neve értelemszerűen átlag, össz, legkevesebb legyen!
    Duplázza meg a zsebpénzek értékét!
    Adjon új mezőt szemuveges néven a táblához! Az új mező típusa logikai legyen! A true érték jelenti azt, hogy az adott tanuló visel szemüveget.
    Jelenítse meg a szemüveges tanulók nevét!
    Jelenítse meg a 2, 3, 5 kóddal rendelkező tanulók összes adatát!
    Azon tanulók kódját és zsebpénzét jelenítse meg, akik zsebpénze 5000 és 15000 Ft közé esik!
    Azon tanulók nevét és zsebpénzét jelenítse meg, akik zsebpénze az átlagtól kevesebb!
    Azon tanulók nevét és zsebpénzét jelenítse meg, akiknek az átlag másfélszeresétől is több zsebpénze van!

    Hozzon létre egy tanulok nevű táblát a következő mezőkkel:
    kod integer, nev char - 30, zsebpenz integer!
    A kod legyen az elsődleges kulcs!

    CREATE TABLE tanulok (kod integer, nev char(30), zsebpenz integer, PRIMARY KEY (kod));
    Lekérdezés segítségével írassuk ki az átlag zsebpénz, az összes zsebpénz és a legkevesebb zsebpénz értékét! A mezők neve értelemszerűen átlag, össz, legkevesebb legyen!

    SELECT avg(zsebpenz) AS átlag, sum(zsebpenz) AS össz, min(zsebpenz) AS legkevesebb FROM tanulok;
    Duplázza meg a zsebpénzek értékét!

    UPDATE tanulok SET zsebpenz = 2*zsebpenz;
    Adjon új mezőt szemuveges néven a táblához! Az új mező típusa logikai legyen! A true érték jelenti azt, hogy az adott tanuló visel szemüveget.

    ALTER TABLE tanulok ADD szemuveges LOGICAL;
    Jelenítse meg a szemüveges tanulók nevét!

    SELECT nev FROM tanulok WHERE szemuveges = true;
    Jelenítse meg a 2, 3, 5 kóddal rendelkező tanulók összes adatát!

    SELECT * FROM tanulok WHERE kod IN (2,3,5);
    Azon tanulók kódját és zsebpénzét jelenítse meg, akik zsebpénze 5000 és 15000 Ft közé esik!

    SELECT kod AS kód, zsebpenz AS zsebpénz FROM tanulok WHERE zsebpenz BETWEEN 5000 AND 15000;
    Azon tanulók nevét és zsebpénzét jelenítse meg, akik zsebpénze az átlagtól kevesebb!

    SELECT nev, zsebpenz FROM tanulok WHERE zsebpenz < (SELECT avg(zsebpenz) FROM tanulok);
    Azon tanulók nevét és zsebpénzét jelenítse meg, akiknek az átlag másfélszeresétől is több zsebpénze van.

    SELECT nev, zsebpenz FROM tanulok WHERE zsebpenz > (SELECT avg(zsebpenz)*1.5 FROM tanulok);

Adott egy adatbázis következő két táblája.

ember (id, nev, varos, szuldat)
auto (rendsz, tulajId, tipus, szin, ar, evjarat)

    Írassa ki a hajdúnánási emberek nevét névsorban!
    Mennyi a Honda típusú autók átlagára?
    Mennyi a hajdúnánási autók darabszáma?
    Írassa ki az autók darabszámát városonként, városok szerinti sorrendben!
    Kik azok az emberek (névsorban!), akiknek van Hondája?
    Írassa ki azoknak az embereknek a nevét fordított sorrendben, akiknek nincs Hondája! (Szegények! ☺)
    Írassa ki a Hondák átlagáránál olcsóbb autók darabszámát!
    Kik azok (név), akiknek a Hondák átlagáránál drágább autója van?
    Ki a legdrágább Honda tulajdonosa? (név, város)
    Hol van (város) 3-nál kevesebb Honda?
    Írassa ki az összes emberek nevét, címét, autójának rendszámát és típusát! Azok az emberek is szerepeljenek az eredményben, akiknek nincs autójuk!
    Kik azok, akik a saját városukra jellemző átlagárnál drágább autóval rendelkeznek?
Adott egy adatbázis következő két táblája.

ember (id, nev, varos, szuldat)
auto (rendsz, tulajId, tipus, szin, ar, evjarat)

    Írassa ki a hajdúnánási emberek nevét névsorban!

    SELECT nev FROM ember WHERE varos="Hajdúnánás" ORDER BY nev;
    Mennyi a Honda típusú autók átlagára?

    SELECT avg(ar) FROM auto WHERE tipus="Honda";
    Mennyi a hajdúnánási autók darabszáma?

    SELECT count(*) FROM auto, ember WHERE auto.tulajId = ember.id AND varos LIKE "Hajdúnánás%";
    Írassa ki az autók darabszámát városonként, városok szerinti sorrendben!

    SELECT varos, count(*) FROM auto, ember WHERE auto.tulajId=ember.id GROUP BY varos ORDER BY varos;
    Kik azok az emberek (névsorban!), akiknek van Hondája?

    SELECT nev FROM ember, auto WHERE ember.id = auto.tulajId AND tipus="Honda" ORDER BY nev;

    vagy

    SELECT nev FROM ember WHERE id IN (SELECT tulajId FROM auto WHERE tipus="Honda") ORDER BY nev;
    Írassa ki azoknak az embereknek a nevét fordított sorrendben, akiknek nincs Hondája! (Szegények! ☺)

    SELECT nev FROM ember WHERE id NOT IN (SELECT tulajId FROM auto WHERE tipus="Honda") ORDER BY nev DESC;

    vagy

    (SELECT nev FROM ember) - (SELECT nev FROM ember, auto WHERE ember.id = auto.tulajId AND tipus="Honda") ORDER BY nev DESC;
    Írassa ki a Hondák átlagáránál olcsóbb autók darabszámát!

    SELECT count(*) FROM auto WHERE ar < (SELECT avg(ar) FROM auto WHERE tipus="Honda");
    Kik azok (név), akiknek a Hondák átlagáránál drágább autója van?

    SELECT nev FROM ember, auto WHERE ember.id=auto.tulajId AND ar > (SELECT avg(ar) FROM auto WHERE tipus="Honda");
    Ki a legdrágább Honda tulajdonosa? (név, város)

    SELECT nev, varos FROM ember, auto WHERE ember.id=auto.tulajId AND ar = (SELECT max(ar) FROM auto WHERE tipus="Honda");
    Hol van (város) 3-nál kevesebb Honda?

    SELECT varos, count(*) AS db FROM auto, ember WHERE ember.id=auto.tulajId AND tipus="Honda" GROUP BY varos HAVING count(*)<3;
    Írassa ki az összes emberek nevét, címét, autójának rendszámát és típusát! Azok az emberek is szerepeljenek az eredményben, akiknek nincs autójuk!

    SELECT nev, varos, rendsz, tipus FROM ember LEFT OUTER JOIN auto ON ember.id = auto.tulajId;
    Kik azok, akik a saját városukra jellemző átlagárnál drágább autóval rendelkeznek?

    SELECT e1.nev FROM ember e1, auto a1 WHERE e1.id = a1.tulaj AND a1.ar > (SELECT AVG(a2.ar) FROM ember e2, auto a2 WHERE e2.id = a2.tulaj GROUP BY e2.varos HAVING e1.varos = e2.varos);


Nincsenek megjegyzések:

Megjegyzés küldése