SQL

SQL: Structured Query Language
más néven Structured English Query Language (SEQUEL)

azaz struktúrált lekérdező nyelv

alapvetően 2 csoportba rendezzük a nyelvi elemeket, írásra és olvasásra
 

Olvasás(O) során nem módosítjuk az adatot a tárolt helyén, azaz csak megjelenés szinten manipulálható az adat

Irás(Í) során módosítjuk a tárolt adatokat

SQL nyelvi elemek / műveletek

Az SQL nyelvi elemeket 4 részre, adatdefiníciós (Data Definition Language, DDL), adatkezelési (Data Manipulation Language, DML), lekérdező (QUERY (Language - QL)) és adatvezérlő (Data Control Language, DCL) részekre lehet bontani.

Adat definíciós utasítások

adatbázis séma módosító utasítások

Create(Í) - Adatbázis objektum létrehozása. (pl Create Table, Create Database)

Alter(Í) - Adatbázis objektum módosítás (Pl Alter Table)

Drop(Í) - Adatbázis objektum megszüntetés (Pl Drop Table, Drop Index)

Truncate(Í) - Adatbázis tábla kiürítés (Pl Truncate <table name>)
Show(O) - információt ad az adatbázisról (Pl Show tables)
Desc(O) - adatbázis tábla információt közöl (Pl Desc <table name>)

 CREATE TABLE Invoice (
   invoice_NO NUMERIC(24),
   customer VARCHAR(60),
   date_of_invoice DATE,
   status VARCHAR(1),
     PRIMARY KEY (invoice_NO)
 );
DESC INVOICE;
ALTER TABLE Invoice MODIFY COLUMN invoice_NO VARCHAR(26);

ALTER TABLE Invoice ADD INDEX cust (customer);
SHOW INDEXES IN Invoice;
ALTER TABLE Invoice DROP INDEX cust;
TRUNCATE Invoice;

DROP TABLE Invoice;

Adatlekérdező utasítások
(Célja, hogy egy vagy több adathalmazból (reláció) egy adathalmazt állítson elő. A bemeneti adatokon, a relációs algebra műveletei hajthatóak végre, aminek következményeként egy eredmény táblát kap a felhasználó.)

SELECT(O) - utasítás az adatok egy halmazát válogatja ki egy táblázatba (*-al minden oszlopot kérünk)
FROM(O) - Meghatározza, hogy mely adatbázis-táblákból szeretnénk összegyűjteni az adatokat.

WHERE(O) - Szűrési feltételeket fogalmaz meg, amelyek szűkítik az eredményhalmazt

GROUP BY - Egyes sorok összevonását, csoportosítását írja elő az eredménytáblában
ORDER BY - Az eredményhalmaz rendezését adja meg
HAVING - szűrést fogalmaz meg a csoportosítási eredmény halmazra
CASE WHEN - logikai vizsgálat alapján jelenít meg adatokat

SELECT Last_name,First_name FROM PEOPLE WHERE date_of_birth>'1990-01-01' Order BY Last_name;

Adatmanipulációs nyelv
(Adatok módosítását végre hajtó utasítások)

INSERT(Í) - új sor beszúrása egy táblába
INSERT INTO Szamla (Szamlaszam, Tulajdonos, Nyitas, Allapot)
 VALUES (123456, 'H. Kovács Géza', '1996.05.14.', 'N');

UPDATE(Í) - meglévő adat módosítás

UPDATE Szamla SET Allapot = 'D' WHERE Szamlaszam = 123456;

DELETE(Í) - sor törlés
DELETE FROM Beteg WHERE TAJ = '123 456 789';

Irás problémája, azaz miért használjunk tranzakciót

Képzeljük el azt az esetet, hogy A felhasználó éppen hóvégi elszámolást próbál kinyerni
B felhasználó, közben éppen felül ír 4 rendelést

A felhasználó
SELECT sum(price) FROM sales WHERE orderID in(1345,2325,2335,7732);

B felhasználó
UPDATE sales set price=price*1,2 WHERE orderID in(1345,2325,2335,7732);

A felhasználó
SELECT sum(price) FROM sales WHERE productID in(1345,2325,2335,7732);

B felhasználó
UPDATE sales set price=price*1,2 WHERE productID in(1345,2325,2335,7732);

Első ránézésre, nem mindegy, hogy A felhasználó mikor is kéri le, hogy mennyi a termékek összege

A legjobb az lenne, ha a B felhasználó által végzett módosítások után tudná lekérdezni
(Persze A felhasználó nem tudja, hogy B mikor csinálja az UPDATE-et)


Megoldás pedig a tranzakció, egy olyan folyamat, mely "lezárja" az adott elemet amíg műveletet végzünk rajta.
Gyakorlatilag addig más felhasználó nem tudja elérni az elemet és várni kell míg felszabadul

Milyen művelet sor, hogyan zárolja a táblát

De még mire jó a tranzakció?

UPDATE table set ID=1;

VS.

SELECT ID FROM table;
BEGIN;
UPDATE table SET ID=1;
SELECT ID FROM table;
ROLLBACK;

(azaz ne kapjunk pánikot egy UPDATE-nél ha elírunk valamit)

Adatelérést Vezérlő Nyelv
(adatelérési jogosultságok vezérlése)

GRANT(Í) - új jogosúltság adás
grant create table to user1;


REVOKE(Í) - meglévő jogosultság elvétele
revoke create table from user1;

 

KILL(Í) - futó(vagy beragadó) query-k megállítása
KILL 12242;

De akkor hogy épül fel egy lekérdezés

Avagy itt az ideje a gyakorlásnak :)
kövi lineken találjátok a gyakorló felületet:
http://sqlfiddle.com/#!9/528bcc/3/0


Feladat
1) kérjük le az össze állat gyepis és mföek nevét mföek név szerinti sorrendben
2) kérjük le a gyepis nevét az összes Kisvárdai kannak
3) kérjük le az mföek nevét, korát,gyepi-t és idi nevét az összes mentvénynek akit Kitti vagy Kati koordizott

Megoldás

1) SELECT mfoek_nev,gyepi_nev FROM Mentesek ORDER BY mfoek_nev;

2) SELECT gyepi_nev FROM Mentesek WHERE gyepi='Kisvárda';

3) SELECT mfoek_nev,kor,gyepi,idi FROM Mentesek WHERE koordi='FK' OR koordi='BK';

VÉGE

SQL

By Gábor Opitzer