34
Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 3. Előadás Az SQL adatbázisnyelv (Tartalom) Az SQL története Az SQL felépítése Adattípúsok SQL utasítások 1

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE ) Csíkszereda

Embed Size (px)

DESCRIPTION

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE ) Csíkszereda. 3. El ő ad á s Az SQL adatb á zisnyelv ( Tartal om ) Az SQL története A z SQL fel építése Adattípúsok SQL utasítások. Sapientia - Erdélyi Magyar TudományEgyetem (EMTE ) Csíkszereda. Az SQL története - PowerPoint PPT Presentation

Citation preview

1

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

3. Előadás

Az SQL adatbázisnyelv (Tartalom)

• Az SQL története

• Az SQL felépítése

• Adattípúsok

• SQL utasítások

2

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

Az SQL története

• SEQUEL (Structured English QUEry Language): az IBM kísérleti relációs adatbázis-kezelő rendszerének (System R) relációs nyelve.

• SQL (Structured Query Language):az IBM kereskedelmi adatbázis-kezelő rendszereinek (DB2, SQL/DS) relációs nyelve

• SQL1: ANSI 1986• SQL2: ISO 1992• SQL3: (rekurzió, triggerek, objektum-relációs modell)

3

Az SQL felépítése(Szintaxis)

Kisbetű és nagybetű a nyelv alapszavaiban egyenértékű.• Utasítások sorfolytonosan írhatók, lezárás

pontosvesszővel.• Változó nincs, csak tábla- és oszlopnevekre lehet

hivatkozni. Kifejezésben hivatkozás egy tábla adott oszlopára: tábla.oszlop (ha a tábla egyértelmű, akkor elhagyható).

• Alias név: név AS másodnév (egyes implementációkban AS elhagyható).

• Szövegkonstans: 'szöveg'

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

4

Az SQL felépítése(Szintaxis)2

• Dátum: DATE '1968-05-12'. Egyes rendszerek az SQL szabványtól eltérő konvenciót alkalmaznak, például 13-NOV-94 (Oracle), 02/15/1994 (dBase).

• Idő: TIME '15:31:02.5' (óra, perc, másodperc).• Stringek konkatenációja: + (xBase), || (Oracle).• Relációjelek: =, <=, >=, !=, <>• Logikai műveletek: AND, OR, NOT. Egy logikai

kifejezés értéke ISMERETLEN (UNKNOWN), ha benne NULL érték szerepel

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

5

Az adattípusok (rendszerenként eltérők lehetnek):

CHAR(n) n hosszúságú karaktersorozatVARCHAR(n) legfeljebb n hosszúságú karaktersorozatINTEGER egész szám (röviden INT)REAL valós (lebegőpontos) szám, más néven

FLOATDECIMAL(n[,d]) n jegyű decimális szám, ebből d tizedesjegyDATE dátumTIME idő

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

6

Adattípusok a MySQL-ben Numerikus típusok

BIT[(M)]TINYINT[(M)] [UNSIGNED] [ZEROFILL]BOOL, BOOLEANSMALLINT[(M)] [UNSIGNED] [ZEROFILL]MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]INT[(M)] [UNSIGNED] [ZEROFILL]INTEGER[(M)] [UNSIGNED] [ZEROFILL]BIGINT[(M)] [UNSIGNED] [ZEROFILL]FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]REAL[(M,D)] [UNSIGNED] [ZEROFILL]FLOAT(p) [UNSIGNED] [ZEROFILL]DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL], FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]

7

Dátum és idő reprezentációja

DATE

DATETIME

TIMESTAMP

TIME

YEAR[(2|4)]

Data Type “Zero” Value

DATETIME '0000-00-00 00:00:00'

DATE '0000-00-00'

TIMESTAMP '0000-00-00 00:00:00'

TIME '00:00:00'

YEAR 0000

8

String tipusokCHARACTER SETCHARACTER SET binaryASCIIUNICODEBINARY[NATIONAL] CHAR[(M)][NATIONAL] VARCHAR(M)BINARY(M)VARBINARY(M)TINYBLOBTINYTEXT [CHARACTER SET charset_name]BLOB[(M)]TEXT[(M)] [CHARACTER SET charset_name]MEDIUMBLOBMEDIUMTEXT [CHARACTER SET charset_name]LONGBLOBLONGTEXT [CHARACTER SET charset_name]ENUM('value1','value2',...) [CHARACTER SET charset_name]SET('value1','value2',...) [CHARACTER SET charset_name]

9

Ekvivalens adattipusok más szállítók tipusaival

Other Vendor Type MySQL Type

BOOL TINYINT

BOOLEAN TINYINT

CHARACTER VARYING(M) VARCHAR(M)

FIXED DECIMAL

FLOAT4 FLOAT

FLOAT8 DOUBLE

INT1 TINYINT

INT2 SMALLINT

INT3 MEDIUMINT

INT4 INT

INT8 BIGINT

LONG VARBINARY MEDIUMBLOB

LONG VARCHAR MEDIUMTEXT

LONG MEDIUMTEXT

MIDDLEINT MEDIUMINT

NUMERIC DECIMAL

10

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

SQL utasítások

Az SQL utasításait két fő csoportba szokták sorolni:- DDL (= Data Definition Language): adatstuktúra definiáló utasítások.- DML (= Data Manipulation Language): adatokon műveletet végző utasítások.

Jelen anyagban - az RDBMS fő feladatai alapján - az alábbi csoportokban tárgyaljuk az SQL utasításokat:- adatbázisséma definiálása (DDL)- adatok aktualizálása (DML)- lekérdezési lehetőségek (DML)

11

Adatbázissémák definiálása (DDL)

Adatbázisséma létrehozására a CREATE DATABASE/ SCHEMA utasítás szolgál.

CREATE {DATABASE/SCHEMA} [IF NOT EXISTS] db_name[create_specification] ...

create_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name

Adatbázisséma átnevezése

RENAME {DATABASE | SCHEMA} db_name TO new_db_name;

12

Adatbázisséma törlése (eldobása)

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;

Adatbázisséma módosítása

ALTER {DATABASE | SCHEMA} [db_name] alter_specification ...

ALTER {DATABASE | SCHEMA} db_name UPGRADE DATA DIRECTORY NAME (5.1 előtti feljavítása)

alter_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name

Adatbázisséma megnyitása (aktuálissá tétele):USE db_name;

13

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

Relációsémák definiálása (DDL)

Relációséma létrehozására a CREATE TABLE utasítás szolgál, amely egyben egy üres táblát is létrehoz a sémához. Az attribútumok definiálása mellett a kulcsok és külső kulcsok megadására is lehetőséget nyújt:

CREATE TABLE táblanév ( oszlopnév adattípus [feltétel], ... ..., oszlopnév adattípus [feltétel] [, táblaFeltételek] );

14

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

Feltételek (egy adott oszlopra vonatkoznak):

PRIMARY KEY: elsődleges kulcsUNIQUE: kulcs (egyértékűség)REFERENCES tábla(oszlop) [ON-feltételek]: külső kulcs

Táblafeltételek (az egész táblára vonatkoznak):

PRIMARY KEY (oszloplista): elsődleges kulcsUNIQUE (oszloplista): kulcsFOREIGN KEY (oszloplista) REFERENCES tábla(oszloplista) [ON-feltételek]: külső kulcs

15

1. Példa.

SZAMLA (szamlaszam, AFA, Datum, kliensKod)KLIENS(klienskod, név, Bank, Bankszamla, adoszam)

CREATE TABLE Kliens ( klienskod integer PRIMARY KEY, nev CHAR(20), Bank CHAR(20), Bankszamla CHAR(30), adoszam CHAR(30) );CREATE TABLE Szamla ( szamlaszam integer PRIMARY KEY, AFA integer, datum Date, Osszeg Decimal(10,2), klienskod integer REFERENCES Kliens(klienskod) );

16

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

Relációséma törlése:

DROP TABLE táblanév;Hatására a séma és a hozzá tartozó adattábla törlődik.

Relációséma módosítása:

ALTER TABLE táblanév [ADD (újelem, ..., újelem)] [MODIFY (módosítás, ..., módosítás)] [DROP (oszlop, ..., oszlop)];

17

- újelem: egy "oszlopnév adattípus [feltétel]", vagy egy "táblafeltétel", mint a CREATE TABLE utasításban.

- módosítás: "oszlopnév adattípus [feltétel]".Oszlopok törlését nem minden rendszer engedi meg.

Példák: ALTER Table Termek Add (gyartoEV integer);ALTER Table Termek DROP Column gyartoEv;

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

18

Adattábla aktualizálása (DML)

Új sor felvétele táblába

INSERT INTO táblanév [(oszloplista)] VALUES (értéklista);

Ha oszloplista nem szerepel, akkor valamennyi oszlop értéket kap a CREATE TABLE-ben megadott sorrendben. Egyébként, az oszlopnév-listában nem szereplő mezők NULL értéket kapnak.

Példák:INSERT INTO Szamla(AFA, szamlaszam, klienskod) VALUES (0.19, 12345, 6783);

INSERT INTO Szamla VALUES (12345, 0.19,’2008-04-21’ , 6783);

19

Sor(ok) módosítása

UPDATE táblanév SET oszlop = kifejezés, ..., oszlop = kifejezés [ WHERE feltétel ];

Az értékadás minden olyan soron végrehajtódik, amely eleget tesz a WHERE feltételnek. Ha WHERE feltétel nem szerepel, akkor az értékadás az összes sorra megtörténik.

Példák:UPDATE Kliens SET lakcím = "Szeged, Rózsa u. 5." WHERE klienskod = 6783;UPDATE Kliens SET Bank = “Reiffeisen" WHERE Bank = “Banca Agricola";

20

Sor(ok) törlése

DELETE FROM táblanév [ WHERE feltétel ];

Hatására azok a sorok törlődnek, amelyek eleget tesznek a WHERE feltételnek. Ha a WHERE feltételt elhagyjuk, akkor az összes sor törlődik (de a séma megmarad).

Példa:DELETE FROM Kliens WHERE klienskod>200 AND klienskod<400;

DELETE FROM Kliens; !!!!! – mindent töröl

21

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

Lekérdezések(SELECT)

Egy vagy több adattáblából egy eredménytáblát állít elő

A SELECT utasítás általános alakja

SELECT [DISTINCT] oszloplista projekció FROM táblanévlista Descartes-szorzat [WHERE feltétel] szelekció [GROUP BY oszloplista] csoportosítás [HAVING feltétel] csoport-feltétel [ORDER BY oszloplista]; rendezés

22

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

Egyszerű lekérdezések SQL-ben

Szelekció:f(R) SELECT * FROM R WHERE f;

Példa: Film(cim, ev, hossz, szines, studioNev, producerAzon);Szinesz(nev, cim, nem, szuletesnap);

SELECT *FROM FilmWHERE hossz>100 AND szines;

23

Vetítés(Projekció):

SELECT FROM R;

Példa:

SELECT studioNev, cimFROM Film;

Alias (AS) használata - másodnév

SELECT cim AS nev, hossz*0,016667 AS hosszOrakbanFROM FilmWHERE studioNev=‘Disney’;

kiii AAA

R,,,

21

)(

1 2, , ,

ki i iA A A

24

Konstansok használata a SELECT záradékban

SELECT cim , hossz*0,016667 AS hosszOrakbanFROM FilmWHERE studioNev=‘Disney’;

Karakterláncok összehasonlítása:s LIKE p , ahol s karakterlánc és p egy minta Helyettesítő karakterek (standard SQL): %, _Helyettesítő karakterek (Access): *, ?

SELECT * SELECT *FROM Film FROM FilmWHERE cim LIKE ‘csill*’ WHERE cim LIKE

‘*lága’

25

SELECT * SELECT *FROM Film FROM FilmWHERE cim LIKE ‘*or*’ WHERE cim LIKE

‘Wayne???world’

Speciális karakterek használata a mintában ‘ (egyszeres idézőjel) keressük a következő kombinációt: ‘s

SELECT *FROM FilmWHERE cim LIKE ‘*’’s*’ megduplázzuk az egyszeres idézőjelet

s LIKE ‘x%%x%’ ESCAPE ‘x’Az x% egy % karakternek fog megfelelni.A minta olyan karaktersornak felel meg, amelyik % al kezdődik és %-al végződik

26

Null értékre vonatkozó szabályok:

1. Amikor egy aritmetikai műveletben, mint x vagy +, legalább az egyik tag NULL, akkor az eredmény is NULL

2. Amikor egy NULL értéket hasonlítunk össze bármely más értékkel, beleértve a NULL-t is, egy összehasonlítási operá-tor segítségével, mint = vagy >, az eredmény ISMERETLEN.

Logikai műveletek a háromértékű logikábanSzabály: könnyen megjegyezhető, ha az IGAZ=1, HAMIS=0,

ISMERETLEN=1/2.3. Két logikai értékre alkalmazott AND eredménye a két érték

minimuma.4. Két logikai értékre alkalmazott OR eredménye a két érték

maximuma.5. A v logikai érték tagadásának értéke 1-v

27

x y x AND y x OR y NOT x

IGAZ IGAZ IGAZ IGAZ HAMIS

IGAZ ISMERETLEN ISMERETLEN IGAZ HAMIS

IGAZ HAMIS HAMIS IGAZ HAMIS

ISMERETLEN IGAZ ISMERETLEN IGAZ ISMERETLEN

ISMERETLEN ISMERETLEN ISMERETLEN ISMERETLEN ISMERETLEN

ISMERETLEN HAMIS HAMIS ISMERETLEN ISMERETLEN

HAMIS IGAZ HAMIS IGAZ IGAZ

HAMIS ISMERETLEN HAMIS ISMERETLEN IGAZ

HAMIS HAMIS HAMIS HAMIS IGAZ

28

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

SELECT címFROM FilmWHERE cím LIKE ‘Halálos _______’ (7 db. alulhúzás)(Halálos fegyver v. Halálos játszma)

Szűrőfeltételek:

WHERE <oszlop> BETWEEN <kifejezés_1> AND <kifejezés_2 >WHERE <oszlop> IN (<kifejezés_1>, <kifejezés_2> [,...])

29

Példa: SELECT NévFROM AlkalmazottakWHERE Fizetés BETWEEN 300 AND 500;

Legyen az Egyetem nevű adatbázis a következő relációsémákkal:

Szak (SzakKod, SzakNév, Nyelv); Csoport (CsopKod, Evfolyam, SzakKod); Diák(Törzsszám, Név, SzemSzám, Cím, SzületésiDatum, CsopKod, Átlag);

SELECT NévFROM DiákWHERE CsopKod IN (’531’, 532’, ’631’);

30

Több relációra vonatkozó lekérdezések

Descartes szorzat: R1 x R2 SELECT *FROM R1, R2

Théta-összekapcsolás: R1 ⋈ θ R2 SELECT *FROM R1, R2WHERE θ;

Természetes összekapcsolás: R1 ⋈ R2 =SELECT *FROM R1, R2WHERE 1 1 2 1 1 2 2 2 1 2. . AND . . AND AND . .p pR A R A R A R A R A R A

31

Példa:

SELECT Diak.Név, Csoport.CsopKod, Csoport.Evfolyam, SzakKodFROM Diák, CsoportWHERE Diák.CsopKod = Csoport.CsopKod;

SELECT Diak.Név, Csoport.CsopKod, Evfolyam, SzakKodFROM Diák INNER JOIN CsoportON Diák.CsopKod = Csoport.CsopKod;

SELECT NévFROM Diák, CsoportWHERE Diák.CsopKod = Csoport.CsopKod AND Evfolyam = 3;

32

Halmazműveletek (egyesítés, különbség és metszet) :

(SELECT Név, UtcaSzámFROM SzállítókWHERE Helység = “Kolozsvár”)

UNION(SELECT Név, UtcaSzámFROM VevőkWHERE Helység = “Kolozsvár”);

(SELECT SzemSzám FROM Alkalmazottak)EXCEPT

(SELECT SzemSzám FROM Managerek);

(SELECT Név FROM Tanárok)INTERSECT

(SELECT Név FROM Diákok);

33

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

Ismétlődő sorok (DISTINCT )

A SELECT kulcsszó után a DISTINCT szó segítségével kérhetjük az azonos sorok megszüntetését.

Példa: Az Egyetem adatbázis esetén keressük azon csoportokat, amelyekben vannak diákok, akik átlaga kisebb, mint 7.

SELECT DISTINCT CsopKod FROM DiákokWHERE Átlag < 7;

34

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

Összefoglaló kérdések

1. Az SQL szintaxisa

2. Adattípusok az SQL-ben

3. SQL utasítások típusai

4. Relációs sémák definiálása, törlése, módosítása

5. Oszlopra és sorra vonatkozó feltételek

6. Adattáblák aktualizálása

7. Karakterláncok összehasonlítása

8. Szorzat és összekapcsolás az SQL –ben

9. Egyesítés , metszet és különbség a SQL –ben