Edukáció

SQL, MySQL-hogyan használjuk őket? Élő példákkal!

SQL, MySQL-hogyan használjuk őket? Élő példákkal!

Manapság mindenkinek érdemes tisztában lennie az SQL nyelv alapjaival, amennyiben programozásra adja fejét. Mire használható fel remekül, és hogyan?

Bizonyára sokan hallottátok már azt a kifejezést, ha programozással foglalkoztok, hogy „MySQL”. Sokan azzal is tisztában vannak, hogy mire való: rengeteg applikációban szükség van arra, hogy különféle adatokat tároljunk, kezeljünk: például a felhasználók adatait.

Ebben a cikkünkben kicsit ezt a témakört szerettük volna körüljárni: mik a relációs adatbázisok? Hogyan használjuk őket? Mindezt élő példákkal bemutatva.

Mi az az adatbázis?

Az adatbázis egy rendezett gyűjteménye különféle adatoknak, melyeket általában valamilyen számítógépes rendszerben tárolunk, és innen is érjük el. Az adatok-amennyiben azokat manipulálni szeretnénk, mindig rendelkeznek valamilyen hozzáférési felülettel (interface).

Mi az a DBMS?

A DBMS az angol Database Management System (adatbázis kezelő rendszer) rövidítése. A MySQL is ilyen, és sokszor az adatbázis kifejezéssel keverik össze, pedig valójában nem az: a DMBS az, ami lehetővé teszi, hogy az adatbázissal kommunikáljunk. Általában a DMBS-t, és az adatbázist szokták együtt adatbázisnak nevezni.

Ha pontosan szeretnénk fogalmazni: egy szoftver, ami arra jó, hogy adatokat tároljunk, visszakeressünk, módosítsunk, töröljünk a megfelelő biztonsági elveket figyelembe véve. Egy applikációval kommunikálunk, és ez az operációs rendszert bírja rá arra, hogy az a megfelelő utasításokat elvégezze. Tulajdonképpen ez jelenti a korábban említett hozzáférési felületet, az interface-t.

Ezeknek az egyik fajtái a relációs adatbázisok, melyeket a leggyakrabban használunk.

Mi az az RDBMS?

Az RDBMS-Relational Database Management System-egy DBMS, ahol az adatok az úgynevezett relációs adatmodell szerint vannak szervezve. Ez, rendezettségéből adódóan egy könnyen kezelhető, és átlátható szisztémát biztosít számunkra, ezért ezt is használják a legtöbbször. 

Relációs adatbázis kezelő rendszer például a MySQL, SQLite, Oracle Database, vagy a PostgreSQL is. 

Mi az az SQL? 

Aki találkozott már a MySQL fogalmával, az valószínűleg az Sql-ről is hallhatott. Én eleinte azt hittem, hogy igazából ugyanaz a kettő, csak máshogy hívjuk őket. Nagyon hasonlóak, viszont mint fogalom, különböznek.

Az SQL az a Structured Query Language rövidítése. Az SQL tulajdonképpen az a „nyelv”, amit használunk, mikor az adatbázissal kommunikálunk. Rengeteg relációs adatbázis valójában ezt használja, erre épül: a MySQL, PostgreSQL egyaránt. Ebből adódóan nagyon hasonlítanak az SQL-hez, és egymáshoz is.

Ezért lehet azt mondani, hogy aki mondjuk tisztában van a MySQL használatával, az nagyjából tud SQLite-t, és PostgreSQL-t is használni. Valójában minimális eltérés van közöttük.

Ez nagyjából olyan, mint a szakács szakma: mindegyik étteremben picit máshogy készítik a húslevest, viszont ugyanazokat az alapanyagokat használják hozzájuk, és amelyik szakács az egyik étteremben el tudja készíteni ezt az ételt, az a másikban is el fogja tudni.

Mi az a NoSQL?

A NoSql az szintén egy DBMS, amelyik nem relációs (Non relational Sql). Alapvetően azért van rá szükség, mert a relációs adatbázisok használata sok esetben nem kifejezetten előnyös. Az adatokat nem táblákba rendezzük, és a háttérben nem SQL-t használ azok kezeléséhez, módosításához. Nagy mennyiségű adat esetén sokszor kedvezőbb a használata, mint a relációs adatbázisok esetén. 

Ilyen például a MongoDB, ami kulcs-érték párokból tevődik össze.

Hogyan lehet SQL műveleteket végezni?

Én magam egy ideig azt hittem, hogy SQL műveleteket csak és kizárólag egy működő, "megfogható" applikáción keresztül lehet kivitelezni: például egy például egy PHP-ból, és MySQL-ből álló alkalmazáson keresztül.

A valóság az, hogy több különféle klienssel lehet csatlakozni egy adazbázist kezelő rendszerhez/szerverhez. Ennek a kliensnek lehet grafikus felülete (phpMyAdmin), ez lehet egy programozási nyelvhez tartozó csomag, vagy driver (például PHP esetén a PDO), illetve akár parancssorból is van interakcióra lehetőség.

Parancssoron keresztül ezt megtehető például az alábbi módon: amennyiben XAMPP szervert használunk, menjünk az xampp/mysql/bin mappába, és itt nyissuk meg a terminált. Itt írjuk be az alábbiakat:

mysql -u root -p 

Ezek után adjuk meg a jelszavunkat, ami alapértelmezettként egy sima Enter. Innentől kezdve használhatjuk is. 

Mik a legjellemzőbb SQL műveletek?

Mik lennének a legjellemzőbb adatbzis-kezelő metódusok?

CREATE

Amennyiben egy adatbázist, vagy táblát szeretnénk létrehozni, azt a CREATE utasítással tehetjük meg. Abban az esetben, ha egy „ÁLLATOK” nevű adatbázist, és egy „MACSKÁK” nevű táblát szeretnénk létrehozni, azt így kell megtennünk:

CREATE DATABASE ÁLLATOK;
CREATE TABLE MACSKÁK;

Amennyiben egy táblázatnak szeretnénk megadni oszlopokat is annak létrehozásakor, azt is megtehetjük: ez esetben az oszlopokat, és azok típusait vesszővel kell felsorolnunk. Az alábbi példa a ZSIRÁFOK táblát hozza létre, a NAME varchar típussal,  és AGE oszloppal, ami természetesen integer típus.

CREATE TABLE ZSIRÁFOK
(
  NAME varchar(100),
  AGE INT
);

DROP

Hasonló módon van lehetőség arra, hogy egy táblázatot, vagy adatbázist töröljünk, amennyiben arra nincs szükségünk többet. Amennyiben a „MACSKÁK” nevű táblát, és az „ÁLLATOK” nevű adatbázist ki akarjuk törölni, ezt az alábbi módon tehetjük meg:

DROP TABLE MACSKÁK;
DROP DATABASE ÁLLATOK;

INSERT

Ha egy táblába egy elemet szeretnénk beszúrni, akkor az INSERT parancsot kell használnunk.

INSERT INTO MACSKA (NAME,AGE) VALUES('gombóc',3);

Amennyiben több elemet szeretnénk egyszerre beszúrni, az is megtehető lesz, hasonló módon, mint egy felsorolás:

INSERT INTO MACSKÁK (NAME,AGE) VALUES
('Arthúr',2),
('Palóc',1),
('Vadóc',3);

UPDATE

Amennyiben az adatbázisunk egy adott sorát, vagy több sorát szeretnénk valamilyen módon módosítani, az UPDATE metódusra lesz szükségünk. Ha a „Tóbiás” nevű macska életkorát szeretnénk módosítani 12-re, akkor ezt így tehetjük meg:

UPDATE MACSKÁK SET AGE=12 WHERE NAME='Tóbiás';

Ha az összes macska életkorát szeretnénk 13-ra módosítani, akkor azt így tehetjük meg:

UPDATE MACSKÁK SET AGE=12;

DELETE

Ha egy bizonyos adattábla elemeit szeretnénk kitörölni, akkor azt is megtehetjük, különféle feltételeket szabva.

Amennyiben nem szabunk meg feltételt, minden sort ki fog törölni az adott táblából.

DELETE FROM MACSKÁK;

SELECT

Előfordulhat, hogy bizonyos sorokat le akarunk kérni az adatbázisból, mert ki akarjuk listázni azokat valahonnét. A SELECT-nek számos részeleme van, ami csak azzal együtt értelmezhető: ilyenek például a a GROUP BY, a JOIN-ok, a CONCATINATION, a COUNT, és még sok egyéb SQL parancs. 

Ha minden sort meg akarunk kapni:

SELECT * FROM MACSKÁK;

Ha csak azokat a macskákat, melyek 2 évesek:

SELECT * FROM MACSKÁK WHERE AGE=2;

Abban az esetben, ha csak bizonyos elemeket szeretnénk, szabjunk meg erre feltételt: azokat töröljük ki, amelyeknek az életkora 12.

DELETE FROM MACSKÁK WHERE AGE=12;

CONCATINATION

Ha lekérjük az adatokat az egy táblából, akkor azokat gyakran máshogy kombinálva szeretnénk megkapni, mint ahogy azok ott találhatók. Ha van egy FELHASZNALOK adattábla, és abban van a KERESZTNEV, és VEZETEKNEV oszlopok, akkor előfordulhat, hogy a neveket együtt szeretnénk megkapni onnét, és nem pedig külön-külön. Ahhoz, hogy ezt megtehessük, az úgynevezett CONCAT metódust kell használnunk.  

SELECT CONCAT(KERESZTNEV,' ', VEZETEKNEV) AS TELJES_NEV FROM FELHASZNALOK;

LIMIT

A LIMIT arra jó, hogy megszabjuk vele, hogy hány elemet szeretnénk az adattáblánkból visszakapni. Ha például a lekérdezés végére írjuk, hogy LIMIT 3, akkor az egyéb feltételektől függetlenül maximum 3 elemet fogunk megkapni:

SELECT * FROM MACSKÁK LIMIT 3;

COUNT

Ez arra használható, hogy megadjuk, hogy az adott feltételeket teljesítő elemekből hány található egy adott táblán belül. Ha azt akarjuk megkapni, hogy hány macska van összesen, vagy ezek közül mennyi 12 éves:

SELECT COUNT(*) FROM MACSKÁK;
SELECT COUNT(*) FROM MACSKÁK WHERE AGE=12;

GROUP BY

A GROUP BY arra jó, hogy azokat az elemeket egy sorba rendezzük vele, amelyek teljesítik az adott kritériumokat. Mindig a SELECT-el együtt kell értelmezni. Ha például van egy BOOK táblánk, ami a könyv szerzőit, és a könyv címeit tárolja, és azt szeretnénk megkapni, hogy melyik szerző hány könyvet írt, így tehetjük meg:

SELECT COUNT(*), AUTHOR_NAME FROM BOOKS GROUP BY AUTHOR_NAME;

LEFT JOIN

Előfordulhat, hogy két táblának az értékeit „együtt” szeretnénk megkapni, úgy, hogy valamilyen feltétel teljesüljön. A LEFT JOIN minden egyes esetben megmutatja a bal oldali tábla minden elemét, még akkor is, ha azoknak nincs meg a megfelelő párja. Érdemes megemlíteni, hogy sokféle JOIN létezik, a cikkben mi csupán a LEFT, és a RIGHT JOINT szerettük volna bemutatni. 

SELECT * FROM CUSTOMERS
LEFT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Tehát, megmutatja az összes vásárlót, az összes rendeléssel együtt, viszont minden vásárló minimum egyszer kilistázásra kerül.

RIGHT JOIN

Tulajdonképpen ugyanaz, mint a LEFT JOIN, azzal a különbséggel, hogy a másodjára megadott tábla lesz az, aminek az elemeit mindig meg fogja mutatni.

SELECT * FROM CUSTOMERS
RIGHT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Tehát, megadja az összes vásárlót, az összes rendeléssel együtt, viszont minden rendelés minimum egyszer kilistázásra kerül. A kérdés az, hogy ennek milyen körülmények között van értelme: nyilvánvalóan minden egyes rendelésnek van párja a CUSTOMERS táblából. Technikailag lehetséges ez a fajta JOINOLÁS, viszont kevesebbszer használjuk.

módosítva: 2020-05-16