Az SQL

Az alábbi gyakorlatokat a konyv_kolcsonzes adatbázisok végezzük el. Ez az egyszerűség kedvéért nem minden ponton jól tervezett (pl. egy könyvnek csak egy szerzője lehet) – ezt a lekérdezések elbonyolításának elkerülése érdekében választottuk meg így.

Milyen adatbázisok érhetők el? A mySQL esetében ezt a show databases paranccsal lehet listázni. Nem biztos, hogy minden, az adatbáziskezelő-rendszerben levő adatbázis megjelenik, csak azokat látjuk, amelyekhez hozzáférésünk van. Az alábbi lista négy adatbázist tartalmaz. A information_schema egy speciális, technikai adatbázis, amely a rendszer működéséhez szükséges.

SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| cdtar              |
| hackmageddon       |
| information_schema |
| konyv_kolcsonzes   |
+--------------------+

Megjegyzés

  • Az egyes adatbáziskezelőrendszerek által használt nyelv, bár nagyrészt azonos, helyenként akár gyökeresen eltérőek lehetnek. Az adatbázisok lekérdezésére a PostgreSQL esetében pl. a \t szolgál.

  • Az SQL parancsokat minden esetben pontosvesszővel kell zárni, ez teszi lehetővé, hogy egymás után több parancsot is kiadjunk.

Milyen táblák vannak az adatbázisban? A MySQL-ben erre a show tables parancsát kell alkalmazni.

SHOW TABLES;
+----------------------------+
| Tables_in_konyv_kolcsonzes |
+----------------------------+
| konyvek                    |
| konyvek__konyvtarak        |
| konyvek__olvasok           |
| konyvtarak                 |
| olvasok                    |
+----------------------------+

A megjelenő lista az adatbáziskezelő-rendszerben létrehozott adatbázisok neveit tartalmazza.

Az adatbázisunk felépítését az alábbi logikai ábra szemléletesebben fejezi ki (ezt a nézetet egy másik szoftverrel készítettem el, az adatbáziskezelőből ebben a formában nem nyerhető ki.)

Az adatbázis felépítése

Hogyan épül fel a konyvek tábla? Általánosságban, egy tábla oszlopainak listáját az DESC <tablaneve> paranccsal lehet lekérdezni. Ez felsorolja az egyes oszlopok nevét és típusát, valamint információt ad annak lehetséges null értékéről, arról, hogy az adott oszlop értékei kulcsmezők-e, az alapértelmezett értékről és egyéb kiegészítő információkról.

DESC konyvek;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| cim        | varchar(255)     | NO   |     |         |                |
| szerzo     | varchar(100)     | NO   |     |         |                |
| kiadas_eve | int(10) unsigned | NO   |     | 0       |                |
+------------+------------------+------+-----+---------+----------------+

Lekérdezések

Jelenítsük meg a konyvek tábla teljes adattartalmát! A megoldáshoz az SQL nyelv SELECT utasítását kell alkalmazni. Ez egy összetett, nagyon sokféleképpen alkalmazható parancs, mellyel egészen összetett lekérdezéseket is létre lehet hozni. Első példánkban a SELECT-nek megadjuk, hogy melyik táblából mely mezőket szeretnénk lekérdezni, a parancsunk így a SELECT * FROM konyvek lesz.

SELECT * FROM konyvek;
+----+-------------------------------------+---------------------------+------------+
| id | cim                                 | szerzo                    | kiadas_eve |
+----+-------------------------------------+---------------------------+------------+
|  1 | Harry Potter és a Halál ereklyéi    | J.K. Rowling              |       2007 |
|  2 | Harry Potter és a Tűz Serlege       | J.K. Rowling              |       2000 |
|  3 | Twilight - Alkonyat                 | Stephenie Meyer           |       2005 |
|  4 | A Gyűrűk Ura                        | J. R. R. Tolkien          |       1955 |
|  5 | Középfölde formálása                | J. R. R. Tolkien          |       1986 |
|  6 | A Da Vinci-kód                      | Dan Brown                 |       2003 |
|  7 | A lány a vonaton                    | Paula Hawkins             |       2015 |
|  8 | Az alkimista                        | Paulo Coelho              |       1988 |
|  9 | Galaxis útikalauz stopposoknak      | Douglas Adams             |       1979 |
| 10 | A kis herceg                        | Antoine de Saint-Exupéry  |       1943 |
+----+-------------------------------------+---------------------------+------------+

A SELECT parancsot mindig a megjelenítendő oszlopok felsorolása követi. Amennyiben minden oszlopot meg szeretnénk jeleníteni, nem kell azokat felsorolni, ehelyett alkalmazható a * karakter. Ez után meg kell adni, hogy pontosan melyik táblára vonatkozik a lekérdezés, amit a FROM <tabla_neve> alakban kell megtenni. A SELECT * FROM konyvek jelentése tehát: jelenítsd meg az összes oszlop adatát a könyvek táblából.

Jelenítsük meg a 6-os rekordban levő könyv adatait! Most nem akarjuk az összes sort látni, csak azokat, amelyek eleget tesznek egy megadott feltételnek. Az ilyen típusú feladatokban szerepelnie kell egy WHERE résznek (záradéknak) is; ennek adhatunk meg különféle feltételeket. A példában ez az id=6 lesz:

SELECT * FROM konyvek WHERE id=6;
+----+-----------------+-----------+------------+
| id | cim             | szerzo    | kiadas_eve |
+----+-----------------+-----------+------------+
|  6 | A Da Vinci-kód  | Dan Brown |       2003 |
+----+-----------------+-----------+------------+

Melyek azok a könyvek, amelyeknek az id-je nagyobb mint 4 de kisebb, mint 8? Ez a feladat hasonló az előzőhöz, de a feltétel most összetett: abban a két követelménynek egyidőben kell teljeseülnie. Ezért azokat az AND kulcsszóval kötjük össze.

SELECT * FROM konyvek WHERE id<8 AND id>4;
+----+---------------------------+------------------+------------+
| id | cim                       | szerzo           | kiadas_eve |
+----+---------------------------+------------------+------------+
|  5 | Középfölde formálása      | J. R. R. Tolkien |       1986 |
|  6 | A Da Vinci-kód            | Dan Brown        |       2003 |
|  7 | A lány a vonaton          | Paula Hawkins    |       2015 |
+----+---------------------------+------------------+------------+

Megjegyzés

Az AND logikai művelet pontosan úgy működik, ahogyan azt a mindennapi beszélt nyelvben is használjuk. Ha két állítást ÉS-sel kötünk össze, a teljes állítás akkor lesz igaz, ha annak minden része igaz. Például az „Ez az autó fehér ÉS nyitva van” mondat csak abban az esetben igaz, ha a szóban forgó autó valóban fehér és nyitva is van. H az autó nem fehér, vagy zárva van, tehát bármelyik részállítás hamis, az a teljes mondat hamisságát eredményezi. Röviden megfogalmazva: az ÉS-sel összekapcsolt állításokat tartalmazó mondat csak abban az esetben igaz, ha annak minden részállítása igaz.

Melyek a 2003-ban kiadott könyvek? A válaszhoz azokat a rekordokat kell megjeleníteni, amelyekben a kiadas_eve mező értéke pontosan 2003. Az eddigiek alapján a lekérdezés könnyen elvégezhető:

SELECT * FROM konyvek WHERE kiadas_eve=2003;
+----+-----------------+-----------+------------+
| id | cim             | szerzo    | kiadas_eve |
+----+-----------------+-----------+------------+
|  6 | A Da Vinci-kód  | Dan Brown |       2003 |
+----+-----------------+-----------+------------+

Listázzuk a 2000-től kiadott könyveket! A kérdést úgy is meg lehet fogalmazni, hogy jelenítsük meg azokat a rekordokat, amelyekben a kiadas_eve nagyobb vagy egyenló 2000-rel.

SELECT * FROM konyvek WHERE kiadas_eve>=2000;
+----+-------------------------------------+-----------------+------------+
| id | cim                                 | szerzo          | kiadas_eve |
+----+-------------------------------------+-----------------+------------+
|  1 | Harry Potter és a Halál ereklyéi    | J.K. Rowling    |       2007 |
|  2 | Harry Potter és a Tűz Serlege       | J.K. Rowling    |       2000 |
|  3 | Twilight - Alkonyat                 | Stephenie Meyer |       2005 |
|  5 | A szürke ötven árnyalata            | E.L. James      |       2011 |
|  6 | A Da Vinci-kód                      | Dan Brown       |       2003 |
|  7 | A lány a vonaton                    | Paula Hawkins   |       2015 |
+----+-------------------------------------+-----------------+------------+

Az ilyen típusú feladatok megoldásához az alábbi relációs jeleket érdemes ismerni:

a < b:

a kisebb, mint b,

a <= b:

a kisebb vagy egyenlő, mint b,

a = b:

a és b értéke azonos,

a >=b:

a nagyobb vagy egyenlő, mint b,

a > b:

a nagyobb, mint b,

a <> b:

a nem egyenlő b-vel.

Jelenítsd meg a Twilight - Alkonyat című könyv adatait! Ebben a feladatban is összehasonlítást végzünk, ez szövegre is működik, de ilyenkor pontos egyezést várunk el, azaz a kis- és nagybetűs írásmódnak is stimmelnie kell!

SELECT * FROM konyvek WHERE cim='Twilight - Alkonyat';
+----+---------------------+-----------------+------------+
| id | cim                 | szerzo          | kiadas_eve |
+----+---------------------+-----------------+------------+
|  3 | Twilight - Alkonyat | Stephenie Meyer |       2005 |
+----+---------------------+-----------------+------------+

Melyek azok a könyvek amelyeknek címe A-val kezdődik? Ezekhez a feladatokhoz nem elég az eddigi összehasonlító műveleteket ismerni, egy újabb nyelvi elemet kell megtanulnunk. Ha nem tudjuk a keresendő szöveget pontosan megadni, akkor a like kulcsszót kell alkalmazni. Emellett le kell tudnunk írni a kezdődőséget is, amihez a % karaktert használjuk.

SELECT * FROM konyvek WHERE cim like 'A%';
+----+----------------------+---------------------------+------------+
| id | cim                  | szerzo                    | kiadas_eve |
+----+----------------------+---------------------------+------------+
|  4 | A Gyűrűk Ura         | J. R. R. Tolkien          |       1955 |
|  6 | A Da Vinci-kód       | Dan Brown                 |       2003 |
|  7 | A lány a vonaton     | Paula Hawkins             |       2015 |
|  8 | Az alkimista         | Paulo Coelho              |       1988 |
| 10 | A kis herceg         | Antoine de Saint-Exupéry  |       1943 |
+----+----------------------+---------------------------+------------+
A%:

A keresendő szöveg első karaktere A, utána bármi állhat.

A%B:

A keresendő szöveg A-val kezdődik és B-re végződik.

A%x%B:

A keresendő szöveg A-val kezdődik és B-re végződik, és valahol tartalmaz egy x-et is.

Megjegyzés

A korábbiakkal ellentétben a like nem tesz különbséget a kis- és nagybetűk közt. Ennek ellenőrzésére érdemes kipróbálni pl. a SELECT * FROM konyvek WHERE cim like 't%N%t'; lekérdezést.

Melyek azok a könyvek amelyeket 2003-ban adtak ki és címük A-val kezdődik? Ezt a lekrédezést az eddigiek alapján könnyen összerakjuk, alkalmazzuk a like-ot, és az összehasonlítást!

SELECT * FROM konyvek WHERE cim like 'A%' AND kiadas_eve = 2003;
+----+-----------------+-----------+------------+
| id | cim             | szerzo    | kiadas_eve |
+----+-----------------+-----------+------------+
|  6 | A Da Vinci-kód  | Dan Brown |       2003 |
+----+-----------------+-----------+------------+

Melyek azok a könyvek amelyeknek címe A-val kezdődik vagy 2003-ban adták ki? Ez a feladat most más, mert most azokat a könyveket keressük, amelyek címe A-val kezdődik, de a címtől függetlenül azok is jók, amelyek kiadási éve 2003. Ezért a két feltételt most nem az AND-del, hanem OR-ral, azaz vaggyal kell összekapcsolni.

SELECT * FROM konyvek WHERE cim like 'A%' OR kiadas_eve = 2003;
+----+----------------------+---------------------------+------------+
| id | cim                  | szerzo                    | kiadas_eve |
+----+----------------------+---------------------------+------------+
|  4 | A Gyűrűk Ura         | J. R. R. Tolkien          |       1955 |
|  6 | A Da Vinci-kód       | Dan Brown                 |       2003 |
|  7 | A lány a vonaton     | Paula Hawkins             |       2015 |
|  8 | Az alkimista         | Paulo Coelho              |       1988 |
| 10 | A kis herceg         | Antoine de Saint-Exupéry  |       1943 |
+----+----------------------+---------------------------+------------+

Megjegyzés

A OR logikai művelet szintén a hétköznapi nyelvnek megfelelően működik: két állítás OR-ral történő összekötésekor a teljes állítás igazságához elég az egyik részfeltétel teljesülése. Például az „Ez az autó fehér VAGY nyitva van” mondat igaz lesz, ha az autó fehér ás zárva van, de akkor is, ha a nem fehér autó nyitott. Az sem baj, ha mindkét részfeltétel igaz. Röviden megfogalmazva: az OR-ral összekapcsolt állításokat tartalmazó mondat csak abban az esetben hamios, ha annak minden részállítása hamis, egyetlen rész igazsága már a teljes állítás igazságát eredményezi.

Melyek azok a könyvek amelyeknek címe A-val kezdődik de nem 2003-ban adták ki? Az új elemünk most a NOT, ami a feltételt tagadja: a NOT kiadas_eve = 2003 pontosan a feladatban megfogalmazott, kiadás évére vonatkozó követelményt írja le.

SELECT * FROM konyvek WHERE cim like 'A%' AND NOT kiadas_eve = 2003;
+----+----------------------+---------------------------+------------+
| id | cim                  | szerzo                    | kiadas_eve |
+----+----------------------+---------------------------+------------+
|  4 | A Gyűrűk Ura         | J. R. R. Tolkien          |       1955 |
|  7 | A lány a vonato n    | Paula Hawkins             |       2015 |
|  8 | Az alkimista         | Paulo Coelho              |       1988 |
| 10 | A kis herceg         | Antoine de Saint-Exupéry  |       1943 |
+----+----------------------+---------------------------+------------+

Egy másik megoldás:

SELECT * FROM konyvek WHERE cim like 'A%' AND kiadas_eve <> 2003;
+----+----------------------+---------------------------+------------+
| id | cim                  | szerzo                    | kiadas_eve |
+----+----------------------+---------------------------+------------+
|  4 | A Gyűrűk Ura         | J. R. R. Tolkien          |       1955 |
|  7 | A lány a vonato n    | Paula Hawkins             |       2015 |
|  8 | Az alkimista         | Paulo Coelho              |       1988 |
| 10 | A kis herceg         | Antoine de Saint-Exupéry  |       1943 |
+----+----------------------+---------------------------+------------+

Megjegyzés

A logikai kifejezésekkel kapcsolatos szabály az, hogy azok tagadása a NOT nélkül is leírható úgy, hogy az AND-eket OR-ral cseréljük fel és viszont, és minden feltételt az ellenkezőjére fordítunk.

Melyek azok a könyvek, amelyeknek címe A-val vagy H-val kezdődik és 1960 előtt, vagy 2007-ben adták ki?

SELECT * FROM konyvek
WHERE
    (cim like 'A%' OR cim like 'H%') AND
    (kiadas_eve=2007 OR kiadas_eve<1960);
+----+-------------------------------------+---------------------------+------------+
| id | cim                                 | szerzo                    | kiadas_eve |
+----+-------------------------------------+---------------------------+------------+
|  1 | Harry Potter és a Halál ereklyéi    | J.K. Rowling              |       2007 |
|  4 | A Gyűrűk Ura                        | J. R. R. Tolkien          |       1955 |
| 10 | A kis herceg                        | Antoine de Saint-Exupéry  |       1943 |
+----+-------------------------------------+---------------------------+------------+

Melyek azok a könyvek, amelyek címe nem A-val kezdődik?

SELECT * FROM konyvek WHERE cim NOT like 'A%';
+----+-------------------------------------+------------------+------------+
| id | cim                                 | szerzo           | kiadas_eve |
+----+-------------------------------------+------------------+------------+
|  1 | Harry Potter és a Halál ereklyéi    | J.K. Rowling     |       2007 |
|  2 | Harry Potter és a Tűz Serlege       | J.K. Rowling     |       2000 |
|  3 | Twilight - Alkonyat                 | Stephenie Meyer  |       2005 |
|  5 | Középfölde formálása                | J. R. R. Tolkien |       1986 |
|  9 | Galaxis útikalauz stopposoknak      | Douglas Adams    |       1979 |
+----+-------------------------------------+------------------+------------+

Melyek azok a könyvek, amelyeknek a címében nincs E?

SELECT * FROM konyvek WHERE cim NOT like '%E%' AND cim not like '%e%';
+----+---------------------------------+------------------+------------+
 | id | cim                             | szerzo           | kiadas_eve |
 +----+---------------------------------+------------------+------------+
 |  3 | Twilight - Alkonyat             | Stephenie Meyer  |       2005 |
 |  4 | A Gyűrűk Ura                    | J. R. R. Tolkien |       1955 |
 |  6 | A Da Vinci-kód                  | Dan Brown        |       2003 |
 |  7 | A lány a vonaton                | Paula Hawkins    |       2015 |
 |  8 | Az alkimista                    | Paulo Coelho     |       1988 |
 |  9 | Galaxis útikalauz stopposoknak  | Douglas Adams    |       1979 |
 +----+---------------------------------+------------------+------------+

Listázz 3 könyvet, amelynek címe nem A-val kezdődik!

SELECT * FROM konyvek WHERE cim NOT like 'A%' LIMIT 3;
+----+-------------------------------------+-----------------+------------+
| id | cim                                 | szerzo          | kiadas_eve |
+----+-------------------------------------+-----------------+------------+
|  1 | Harry Potter és a Halál ereklyéi    | J.K. Rowling    |       2007 |
|  2 | Harry Potter és a Tűz Serlege       | J.K. Rowling    |       2000 |
|  3 | Twilight - Alkonyat                 | Stephenie Meyer |       2005 |
+----+-------------------------------------+-----------------+------------+

Listázd a második elemtől számított 3 könyvet, amelynek címe nem A-val kezdődik!

SELECT * FROM konyvek WHERE cim NOT like 'A%' LIMIT 2,3;
+----+---------------------------------+------------------+------------+
| id | cim                             | szerzo           | kiadas_eve |
+----+---------------------------------+------------------+------------+
|  3 | Twilight - Alkonyat             | Stephenie Meyer  |       2005 |
|  5 | Középfölde formálása            | J. R. R. Tolkien |       1986 |
|  9 | Galaxis útikalauz stopposoknak  | Douglas Adams    |       1979 |
+----+---------------------------------+------------------+------------+

Listázd az első 3 könyvet, amelynek címe nem A-val kezdődik!

SELECT * FROM konyvek WHERE cim NOT like 'A%' LIMIT 0,3;
+----+-------------------------------------+-----------------+------------+
| id | cim                                 | szerzo          | kiadas_eve |
+----+-------------------------------------+-----------------+------------+
|  1 | Harry Potter és a Halál ereklyéi    | J.K. Rowling    |       2007 |
|  2 | Harry Potter és a Tűz Serlege       | J.K. Rowling    |       2000 |
|  3 | Twilight - Alkonyat                 | Stephenie Meyer |       2005 |
+----+-------------------------------------+-----------------+------------+

Mely könyvek címe kezdődik A-val és végződik g-re?

SELECT * FROM konyvek WHERE cim like 'A%g';
+----+-----------------+---------------------------+------------+
| id | cim             | szerzo                    | kiadas_eve |
+----+-----------------+---------------------------+------------+
| 10 | A kis herceg   | Antoine de Saint-Exupéry   |       1943 |
+----+-----------------+---------------------------+------------+

Mi a legrégibb kiadási év?

SELECT min(kiadas_eve) FROM konyvek;
+-----------------+
| min(kiadas_eve) |
+-----------------+
|            1943 |
+-----------------+

Mi a legfrissebb kiadási év?

SELECT max(kiadas_eve) FROM konyvek;
+-----------------+
| max(kiadas_eve) |
+-----------------+
|            2015 |
+-----------------+

Melyik a legfrissebb kiadású, A-val kezdődő című könyv kiadási éve?

SELECT max(kiadas_eve) FROM konyvek WHERE cim like 'A%';

Mennyi a kiadási évek összege? (OK, ennek nincs értelme, ez csak egy gyakorlat.)

SELECT sum(kiadas_eve) FROM konyvek;
+-----------------+
| max(kiadas_eve) |
+-----------------+
|            2015 |
+-----------------+

Hány könyv van a konyvek táblában?

SELECT count(*) FROM konyvek;
+----------+
| count(*) |
+----------+
|       10 |
+----------+

Hány nem A-val kezdődő című könyv van a konyvek táblában?

SELECT count(id) FROM konyvek WHERE cim NOT like 'A%';
+-----------+
| count(id) |
+-----------+
|         5 |
+-----------+

Beágyazott SELECT: mi az id-je és címe a legrégebbi könyvnek?

SELECT
    id, cim
FROM konyvek
WHERE
    kiadas_eve=(
        SELECT
            min(kiadas_eve)
        FROM konyvek
    );
+----+-----------------+
| id | cim             |
+----+-----------------+
| 10 | A kis herceg    |
+----+-----------------+

Mi az id-je és címe a legújabb könyvnek?

SELECT
    id, cim
FROM konyvek
WHERE
    kiadas_eve=(
        SELECT
            max(kiadas_eve)
        FROM konyvek
    );
+----+----------------------+
| id | cim                  |
+----+----------------------+
|  7 | A lány a vonaton    |
+----+----------------------+

Listázd a könyveket szerző szerint!

SELECT * FROM konyvek ORDER BY szerzo;
+----+-------------------------------------+---------------------------+------------+
| id | cim                                 | szerzo                    | kiadas_eve |
+----+-------------------------------------+---------------------------+------------+
| 10 | A kis herceg                        | Antoine de Saint-Exupéry  |       1943 |
|  6 | A Da Vinci-kód                      | Dan Brown                 |       2003 |
|  9 | Galaxis útikalauz stopposoknak      | Douglas Adams             |       1979 |
|  4 | A Gyűrűk Ura                        | J. R. R. Tolkien          |       1955 |
|  5 | Középfölde formálása                | J. R. R. Tolkien          |       1986 |
|  1 | Harry Potter és a Halál ereklyéi    | J.K. Rowling              |       2007 |
|  2 | Harry Potter és a Tűz Serlege       | J.K. Rowling              |       2000 |
|  7 | A lány a vonaton                    | Paula Hawkins             |       2015 |
|  8 | Az alkimista                        | Paulo Coelho              |       1988 |
|  3 | Twilight - Alkonyat                 | Stephenie Meyer           |       2005 |
+----+-------------------------------------+---------------------------+------------+

Listázd a könyveket kiadás éve szerint!

SELECT * FROM konyvek ORDER BY kiadas_eve;
+----+-------------------------------------+---------------------------+------------+
| id | cim                                 | szerzo                    | kiadas_eve |
+----+-------------------------------------+---------------------------+------------+
| 10 | A kis herceg                        | Antoine de Saint-Exupéry  |       1943 |
|  4 | A Gyűrűk Ura                        | J. R. R. Tolkien          |       1955 |
|  9 | Galaxis útikalauz stopposoknak      | Douglas Adams             |       1979 |
|  5 | Középfölde formálása                | J. R. R. Tolkien          |       1986 |
|  8 | Az alkimista                        | Paulo Coelho              |       1988 |
|  2 | Harry Potter és a Tűz Serlege       | J.K. Rowling              |       2000 |
|  6 | A Da Vinci-kód                      | Dan Brown                 |       2003 |
|  3 | Twilight - Alkonyat                 | Stephenie Meyer           |       2005 |
|  1 | Harry Potter és a Halál ereklyéi    | J.K. Rowling              |       2007 |
|  7 | A lány a vonaton                    | Paula Hawkins             |       2015 |
+----+-------------------------------------+---------------------------+------------+

Listázd a könyveket kiadás éve szerint csökkenő sorrendben!

SELECT * FROM konyvek ORDER BY kiadas_eve DESC;
+----+-------------------------------------+---------------------------+------------+
| id | cim                                 | szerzo                    | kiadas_eve |
+----+-------------------------------------+---------------------------+------------+
|  7 | A lány a vonaton                    | Paula Hawkins             |       2015 |
|  1 | Harry Potter és a Halál ereklyéi    | J.K. Rowling              |       2007 |
|  3 | Twilight - Alkonyat                 | Stephenie Meyer           |       2005 |
|  6 | A Da Vinci-kód                      | Dan Brown                 |       2003 |
|  2 | Harry Potter és a Tűz Serlege       | J.K. Rowling              |       2000 |
|  8 | Az alkimista                        | Paulo Coelho              |       1988 |
|  5 | Középfölde formálása                | J. R. R. Tolkien          |       1986 |
|  9 | Galaxis útikalauz stopposoknak      | Douglas Adams             |       1979 |
|  4 | A Gyűrűk Ura                        | J. R. R. Tolkien          |       1955 |
| 10 | A kis herceg                        | Antoine de Saint-Exupéry  |       1943 |
+----+-------------------------------------+---------------------------+------------+

Listázd a könyveket szerző szerint, az azonos szerzők esetén a rendezés a kiadás éve szerint csökkenő sorrendben történjen!

SELECT * FROM konyvek ORDER BY szerzo, kiadas_eve DESC;
+----+-------------------------------------+---------------------------+------------+
| id | cim                                 | szerzo                    | kiadas_eve |
+----+-------------------------------------+---------------------------+------------+
| 10 | A kis herceg                        | Antoine de Saint-Exupéry  |       1943 |
|  6 | A Da Vinci-kód                      | Dan Brown                 |       2003 |
|  9 | Galaxis útikalauz stopposoknak      | Douglas Adams             |       1979 |
|  5 | Középfölde formálása                | J. R. R. Tolkien          |       1986 |
|  4 | A Gyűrűk Ura                        | J. R. R. Tolkien          |       1955 |
|  1 | Harry Potter és a Halál ereklyéi    | J.K. Rowling              |       2007 |
|  2 | Harry Potter és a Tűz Serlege       | J.K. Rowling              |       2000 |
|  7 | A lány a vonaton                    | Paula Hawkins             |       2015 |
|  8 | Az alkimista                        | Paulo Coelho              |       1988 |
|  3 | Twilight - Alkonyat                 | Stephenie Meyer           |       2005 |
+----+-------------------------------------+---------------------------+------------+

Szerzőnként hány könyv van a konyvek táblában?

SELECT count(szerzo), szerzo FROM konyvek GROUP BY szerzo;
+---------------+---------------------------+
| count(szerzo) | szerzo                    |
+---------------+---------------------------+
|             1 | Antoine de Saint-Exupéry  |
|             1 | Dan Brown                 |
|             1 | Douglas Adams             |
|             2 | J. R. R. Tolkien          |
|             2 | J.K. Rowling              |
|             1 | Paula Hawkins             |
|             1 | Paulo Coelho              |
|             1 | Stephenie Meyer           |
+---------------+---------------------------+

Az előző listát jelenítsd meg a könyvek száma szerint csökkenő sorrendben rendezve!

SELECT
    count(szerzo) AS cnt,
    szerzo
FROM konyvek
GROUP BY szerzo
ORDER BY cnt DESC;
+-----+---------------------------+
| cnt | szerzo                    |
+-----+---------------------------+
|   2 | J. R. R. Tolkien          |
|   2 | J.K. Rowling              |
|   1 | Stephenie Meyer           |
|   1 | Douglas Adams             |
|   1 | Antoine de Saint-Exupéry  |
|   1 | Dan Brown                 |
|   1 | Paula Hawkins             |
|   1 | Paulo Coelho              |
+-----+---------------------------+

Csoportosítsd azokat a könyveket, melyeknek szerzője J-vel kezdődik, jelenítsd meg a számukat és a szerző nevét, a lista a darabszám szerint csökkenő sorrendben jelenjen meg!

SELECT
    count(szerzo) AS cnt,
    szerzo
FROM konyvek
WHERE
    szerzo like 'J%'
GROUP BY szerzo
ORDER BY cnt DESC;
+-----+------------------+
| cnt | szerzo           |
+-----+------------------+
|   2 | J. R. R. Tolkien |
|   2 | J.K. Rowling     |
+-----+------------------+

Csoportosítsd azokat a könyveket, melyeknek szerzője legalább két könyvet írt, jelenítsd meg a számukat és a szerző nevét, a lista a darabszám szerint csökkenő sorrendben jelenjen meg!

SELECT
    count(szerzo) AS cnt,
    szerzo
FROM konyvek
GROUP BY szerzo
HAVING cnt > 1
ORDER BY cnt DESC;
+-----+------------------+
| cnt | szerzo           |
+-----+------------------+
|   2 | J. R. R. Tolkien |
|   2 | J.K. Rowling     |
+-----+------------------+

Jelenítsd meg az első találatban levő mennyiséget és szerzőt a konyvek táblából, melyeknek szerzője legalább két könyvet írt, a lista a darabszám szerint csökkenő sorrendben jelenjen meg! (Mi az értelmetlen ebben a kérdésben?)

SELECT
    count(szerzo) AS cnt,
    szerzo
FROM konyvek
GROUP BY szerzo
HAVING cnt > 1
ORDER BY cnt DESC
LIMIT 0,1;
+-----+------------------+
| cnt | szerzo           |
+-----+------------------+
|   2 | J. R. R. Tolkien |
+-----+------------------+

Jelenítsd meg a szerzők listáját! Minden szerző csak egyszer legyen a listában!

SELECT distinct(szerzo) FROM konyvek ORDER BY szerzo;
+---------------------------+
| szerzo                    |
+---------------------------+
| Agatha Christie           |
| Antoine de Saint-Exupéry  |
| Dan Brown                 |
| Douglas Adams             |
| J. R. R. Tolkien          |
| J.K. Rowling              |
| Paula Hawkins             |
| Paulo Coelho              |
| Stephenie Meyer           |
+---------------------------+

Hány szerzőtől származnak a könyveink?

SELECT count(distinct(szerzo)) AS db FROM konyvek;
+----+
| db |
+----+
|  9 |
+----+

Feladatok:

  1. Jeleníts meg minden adatot az olvasok táblából! (Ez az olvasók adatait tartalmazza).

  2. Végezd el az előző feladatot úgy, hogy az csak az olvasók nevét és korát tartalmazza.

  3. Az előző listát jelenítsd meg kor szerint rendezve, az azonos korúak névsor szerint visszafelé legyenek rendezve!

  4. Listázd az első három legöregebb olvasó nevét ábécé rendben!

  5. Listázd a három legidősebb női olvasó adatait!

  6. Listázd a 20 évnél fiatalabb női és 30 évnél idősebb férfi olvasók adatait!

  7. Listázd azokaz, akiknek a neve R betűre végződik!

  8. Jelenítsd meg az olvasók számát!

  9. Listázd életkor alapján csoportosítva, hogy hány olvasó van az olvasok táblában!