9. sql alapok (ddl esettanulmány)szucs/ab1/oa/1809_ddl.pdf · 2018-11-27 · 66/4 b it man tábla...

70
B IT M A N 66/1 v: 2018.11.25 B IT M A N 9. SQL alapok (DDL esettanulmány) Adatbázis Rendszerek I.

Upload: others

Post on 05-Jan-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/1 v: 2018.11.25B IT MAN

9. SQL alapok (DDL esettanulmány)

Adatbázis Rendszerek I.

Page 2: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/2

DDL – Adatstruktúra definiáló utasítások

DDL – Data Definition Language

Adatszerkezetek (elsősorban táblák) létrehozása,

módosítása, törlése

Egy tábla szerkezete, sémája a táblához tartozó

mezőkkel egyértelműen megadható

A mezők megadása a mező nevének és a mező

adattípusának, valamint az integritási feltételeknek a

kijelölésével történik

Több tábla is létezhet ugyanazzal a szerkezettel, de a

nevük nem lehet egyforma

Page 3: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/3

Tábla (vagy más objektum) létrehozása

CREATE objektumtípus objektumnév paraméterek;

CREATE TABLE táblanév (

mezőnév adattípus [integritási feltétel],

mezőnév adattípus [integritási feltétel],

• • •

mezőnév adattípus [integritási feltétel]

[ ,további integritási feltételek]

);

CREATE TABLE Autó (Rendszám char(7) primary key,Típus char(25) not null,Szín char(15) default 'Fehér',Kor number(3) check (Kor >= 0)

);

Rendszám Típus Szín Kor

GBC-765 Opel Fehér 6

JED-123 Nissan Ezüst 5

AKT-392 Trabant Kék 32

Page 4: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/4

Tábla (vagy más objektum) létrehozása

CREATE INDEX RIndexON Autó (Rendszám);

Kód

1

2

3

Rendszám

AKT-392

GBC-765

JED-123

Kód

3

1

2

Rendszám Típus Szín

GBC-765 Opel Fehér

JED-123 Nissan Ezüst

AKT-392 Trabant Kék

CREATE VIEW OpelAutó AS Select Kód, Rendszám, Színfrom AutóWhere Tipus='Opel';

Kód

1

Rendszám Szín

GBC-765 Fehér

CREATE SEQUENCE k_s;

insert into Autó values (k_s.nextval, ...

Page 5: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/5

Adattípusok

Alap adattípusok:

Char(n) – fixen n hosszúságú karaktersorozat,

– Hossza max. 2000 karakter

– A rövidebb szövegek végére szóközök kerülnek

Number(n,m) – n jegyű decimális szám, ebből m tizedes jegy;

– Number(8,2) ↔ 12345.12

– Max. 38 számjegyből állhat

Date – dátum.

Page 6: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/6

Oracle adattípusok

Szöveges adattípusok

– CHAR (1-2000), fix hosszúságú adatok

– NCHAR (1-2000) Unicode kódolással

– VARCHAR (1-4000)

• változó hosszúságú adatok

• (null ≠ üres karakterlánc)

– VARCHAR2 (1-4000) Unicode kódolással

• (null = üres karakterlánc)

– LONG (max. 2 GB)

– CLOB (max. 4 GDb-1 adathoz)

– NCLOB (max. 4 GDb-1 adathoz, Unicode kódolással)

Page 7: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/7

Oracle adattípusok

Numerikus adattípusok

– NUMBER (±10125) Max. 38 számjegy

– INT (INTEGER) (±231)

– SMALLINT (±215)

– DECIMAL (±10308) Max. 15 számjegy

Page 8: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/8

Oracle adattípusok

Dátum és időpont adattípusok

– DATE (ie. 4712.01.01 – isz. 9999.12.31)

– TIMESTAMP (másodperc pontossággal)

Page 9: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/9

Integritási feltételek megadása

Primary key – elsődleges kulcs

References – hivatkozás másik táblára

Foreign key (mezőlista) References táblanév(mezőlista)

– idegen kulcs megadása ha a kulcs több mezőből áll

Not null – nem maradhat üresen a mező, kötelező

kitölteni

Unique – a mező egyedi, nem kerülhet bele két

egyforma érték

Default – alapérték megadása

Check – értékellenőrzés

Page 10: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/10

Adattáblák létrehozása – Megszorítások

Az idm mező megadása különböző megszorításokkal:

create table worker(

idm int,

idm int primary key,

idm int default '29',

idm int check(idm >500),

idm int unique,

idm int not null,

);

pk

nn

uq

df

ch

Page 11: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/11

Példák

create table pld1 (id int primary key,nev varchar2(100),datum date,suly float(8)

);

create table pld3 (id int default id_seq.nextval primary key, nev varchar2(50) not null unique,darab number(10) default '0' not null,idopont timestamp default sysdate,

);

create table pld2 (az int primary key,hely varchar2(30),darab int check (darab>=0),foreign key (az)

references pld1(id));

Fontos a sorrend!create sequence id_seq;

1 2

3

4

Page 12: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/12

Kapcsolatok kialakítása – 1:1 kapcsolat

Ha egy idegen kulccsal összekapcsoljuk a két táblát, akkor csak azt

jelezzük, hogy csak olyan értékek kerülhetnek a táblába, amelyek a

másik tábla elsődleges kulcs mezőjében megtalálhatók, de ezek az

adatok ismétlődhetnek a mezőben, vagyis ez egy 1:N kapcsolat.

Az 1:1 kapcsolathoz le kell tiltani az ismétlődést, vagyis elő kell írni

az Unique integritást.

Ha az Unique integritást előírjuk, értékes adat csak egyszer

szerepelhet az oszlopban, de null érték többször is. A null értékre

nem vonatkozik az Unique integritás!

Page 13: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/13

Kapcsolatok kialakítása – 1:1 kapcsolat

create table ember(

ekód number(3) primary key,

név varchar2(40)

);

create table autó(

rendszám char(7) primary key,

tipus varchar2(25),

ekód number(3) unique,

foreign key(ekód) references ember(ekód)

);

Több null érték az oszlopban

Page 14: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/14

Kapcsolatok kialakítása – 1:N kapcsolat

create table ember(

ekód number(3) primary key,

név varchar2(40)

);

create table autó(

rendszám char(7) primary key,

tipus varchar2(25),

ekód number(3),

foreign key(ekód) references ember(ekód)

);

Ha nem írjuk elő az idegen kulcsra az Unique integritást, 1:N

kapcsolatot alakítunk ki.

Több azonos érték az oszlopban

Page 15: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/15

Kapcsolatok kialakítása – N:M kapcsolat

Az N:M kapcsolatot egy kapcsolótáblával hozzuk létre

create table ember(

ekód number(3) primary key,

név varchar2(40)

);

create table autó(

akód number(3) primary key,

rendszám char(7),

tipus varchar2(25)

);

create table e_a(

ekód number(3),

akód number(3),

foreign key(ekód) references ember(ekód),

foreign key(akód) references autó(akód)

);

Page 16: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/16

Kapcsolatok kialakítása – N:M kapcsolat

Ha nem tiltjuk le az ismétlődést, egy rekord többször is bekerülhet a

kapcsolótáblába!

Több azonos

rekord!

alter table e_a add constraint ea_pk primary key (ekód, akód)M1

alter table e_a add constraint ea_uq unique (ekód, akód)M2

Page 17: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/17

Kapcsolatok kialakítása – N:M kapcsolat

Az N:M kapcsolat kapcsolótáblájának helyes kialakítása:

create table ember(

ekód number(3) primary key,

név varchar2(40)

);

create table autó(

akód number(3) primary key,

rendszám char(7),

tipus varchar2(25)

);

create table e_a(

ekód number(3),

akód number(3),

primary key (ekód, akód),

foreign key(ekód) references ember(ekód),

foreign key(akód) references autó(akód)

);

Page 18: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/18

Többértékű tulajdonság kialakítása

create table ember(

ekód number(3) primary key,

név varchar2(40)

);

create table nyelvism(

ekód number(3),

nyelv varchar2(25),

primary key (ekód, nyelv),

foreign key(ekód) references ember(ekód)

);

A helyesen megválasztott elsődleges kulccsal próbáltuk megvédeni az

adatok ismétlődését. Erre megfelelő, de az elírásokat (kisbetű-nagybetű,

elírt adat) nem akadályozza meg

Ember

ekód

Nyelv

Név

Page 19: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/19

Többértékű tulajdonság kialakítása

Javasolt kialakítás

create table ember(

ekód number(3) primary key,

név varchar2(40)

);

create table nyelvism(

nykód number(3) primary key,

nyelv varchar2(25)

);

create table e_ny(

ekód number(3),

nykód number(3),

primary key (ekód, nykód),

foreign key(ekód) references ember(ekód),

foreign key(nykód) references nyelvism(nykód)

);

Page 20: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/20

Tábla módosítása, átnevezése

ALTER TABLE táblanév

[ADD (oszlopnév definíció, ..., oszlopnév definíció)]

[ALTER COLUMN (oszlopnév definíció, ..., oszlopnév definíció)]

[DROP COLUMN (oszlopnév, ..., oszlopnév)]

[RENAME COLUMN régi_név TO új_név]

– Fontos: a mezők mérete általában csak növelhető!

RENAME táblanév TO új_táblanév

– Tábla átnevezése

ALTER TABLE Autó ADD Tulaj varchar(35);

Page 21: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/21

ALTER TABLE személy ADD szülév number(4);ALTER TABLE személy RENAME COLUMN szülév TO szüldátum;ALTER TABLE személy MODIFY szüldátum date;ALTER TABLE személy MODIFY id primary key;DESC személy;

Tábla módosításacreate table személy(

id number(4),

név varchar2(30)

);

ALTER TABLE személy DROP primary key;ALTER TABLE személy DROP COLUMN szüldátum;RENAME személy TO person;

Page 22: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/22

comment on column person.id is '100 és 300 közötti adatok';

Tábla módosítása

alter table person modify név default null;

alter table person modify név default 'Kis Béla';

Page 23: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/23

Tábla módosítása: megszorítások – Javaslat

ALTER TABLE person ADD CONSTRAINT cn1 PRIMARY KEY(id);ALTER TABLE person ADD CONSTRAINT cn2 UNIQUE (név);ALTER TABLE person ADD CONSTRAINT cn3 CHECK (id > 200);

create table department(dpno int,dpname varchar2(30)

);

ALTER TABLE person ADD dp int;ALTER TABLE person ADD CONSTRAINT cn5 FOREIGN KEY (dp)

REFERENCES department(dpno);

ALTER TABLE departmentADD CONSTRAINT cn4 primary key(dpno);

ALTER TABLE person DROP CONSTRAINT cn1;

Page 24: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/24

Megszorítások listázása

SELECT * FROM user_constraints WHERE table_name = 'PERSON'

C – check constraint on a table

P – primary key

U – unique key

R – referential integrity

V – with check option, on a view

O – with read only, on a view

Csupa nagybetű!

Page 25: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/25

Tábla törlése

DROP TABLE táblanév;

Azok a táblák amelyekre más tábla hivatkozik, nem

törölhetők!

DROP TABLE Autó;

Page 26: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/26

Termek

Vasarlas

Idopont DarabTkod VID

Nev

Kategoria

Leiras

FizModok

NevTkod Ar Leiras

Vasarlo

Nev

Kategoria

VID Cim

Kkod

Fizmod Fkod

Vedd észre! – Táblák létrehozási sorrendje

Sorszam

1. Először azokat a táblákat kell létrehozni, amelyekből nem

hivatkozunk más táblákra

2. Azután azokat, amelyekből hivatkozunk más táblákra

1 2

34

5

Page 27: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/27

Termek

Vasarlas

Idopont DarabTkod VID

Nev

Kategoria

Leiras

FizModok

NevTkod Ar Leiras

Vasarlo

Nev

Kategoria

VID Cim

Kkod

Fizmod Fkod

Vedd észre! – Táblák törlési sorrendje

Sorszam

1. Először azokat a táblákat lehet törölni, amelyekből hivatkozunk más

táblákra

2. Azután azokat, amelyekből nem hivatkozunk más táblákra

5 4

32

1

Page 28: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/28

Lehetőségek

Tábla létrehozása másolással (új táblanévvel)

– CREATE TABLE Személyek AS SELECT * FROM Person;

Person

ID

1

2

3

Név Dp

Kis Béla 10

Kő Dezső 11

Hó Jenő 10

Személyek

ID

1

2

3

Név Dp

Kis Béla 10

Kő Dezső 11

Hó Jenő 10

Üres tábla létrehozása másolással

– Create table Személyek as select * from Person WHERE 1=0;

Person

ID

1

2

3

Név Dp

Kis Béla 10

Kő Dezső 11

Hó Jenő 10

Személyek

ID Név Dp

Page 29: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/29

Lehetőségek

Üres tábla létrehozása másolással, eltérő szerkezettel

– CREATE TABLE Személyek AS SELECT id, név FROM Person

WHERE 1=0;

Person

ID

1

2

3

Név Dp

Kis Béla 10

Kő Dezső 11

Hó Jenő 10

Személyek

ID Név

Page 30: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/30

Lehetőségek

Tábla létrehozása több táblából

– create table Személyek as select ID, Név as NAME, DPNAME

from Person join Department on dp=dpno

ID

1

2

3

Név Dp

Kis Béla 10

Kő Dezső 11

Hó Jenő 10

DpNo

10

11

DpName

Designer

Programmer

DepartmentPerson

ID Name DpName

Személyek

1

2

3

Kis Béla

Kő Dezső

Hó Jenő

Designer

Programmer

Designer

Page 31: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/31

Nézettáblák – VIEW

Olyan "virtuális" tábla, mely fizikailag nem létezik, csak a

létrehozó utasítását tárolja a rendszer (≈ letárolt lekérdezés)

Normál táblaként viselkedik, így pl. lekérdezhető a tartalma

A rendszer akkor állítja elő a tartalmát, amikor egy parancs

hivatkozik rá, így a tartalom mindig friss, aktuális adatokból áll

Nem tárol adatokat, feldolgozás után azonnal megszűnik

Feldolgozása lassabb, mint a normál tábláké

Bizonyos körülmények között módosítható a tartalma,

természetesen ekkor a nézettáblán keresztül az eredeti táblák

tartalma módosul

Lehet csak olvashatóvá tenni

Lehet "materizálni", vagyis tényleges fizikai táblaként

létrehozni

Page 32: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/32

Nézettáblák – VIEW

CREATE [OR REPLACE] [MATRERIALIZED] VIEW

nézettáblanév [(A1, A2, … An)]

AS SELECT … [WITH READ ONLY]

– OR REPLACE – Felülírja a meglévő táblát

– MATERIALIZED – Fizikailag is létrejön a tábla (pillanatfelvétel!)

– (A1,A2,…An) – Alias nevek adhatók a mezőknek

– WITH READ ONLY – Csak olvasható adattartalom

Ember

Ekód Név Város

114 Kis Géza Eger

178 Jó Éva Miskolc

Telefon

20-9555666

30-8765432

CREATE VIEW e_vw1 (id, name) AS SELECT Ekód, Név from Ember where cím='Miskolc'

select * from e_vw1;

E_VW1

ID

114

Name

Kis Géza

178 Jó Éva

Page 33: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/33

Nézettáblák – VIEW

Módosítható nézettáblák

– A mögöttük lévő valódi táblák tartalma módosul

– Minden olyan nézettábla alapértelmezésként módosítható,

ahol az adatok forrása egyértelműen beazonosítható.

– Ehhez a létrehozó CREATE parancsban be kell tartani

bizonyos feltételeket:

• Nem lehet benne DISTINCT, ORDER BY, GROUP BY kulcsszó

• Nem lehet benne összesítő függvény

• Nem lehet benne al-lekérdezés

• Nem lehet benne halmazművelet (union, minus, intersect)

– Nem módosíthatók azok az oszlopok, amelyek sorfüggvények

használatával jöttek létre, pl. címből kiemelt város név

– Több táblából származó nézettábla esetén a módosítás

egyszerre csak egy táblát érinthet

Page 34: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/34

Nézettáblák – VIEW

Ember

Ekód Név Város

114 Kis Géza Eger

178 Jó Éva Miskolc

Telefon

20-9555666

30-8765432

CREATE OR REPLACE VIEW e_vw1 (id, name, city) AS SELECT Ekód, Név, Város from Ember;

E_VW1

ID

114

Name

Kis Géza

178 Jó Éva

City

Eger

Miskolc

update e_vw1 set city='Miskolc' where id=114

E_VW1

ID

114

Name

Kis Géza

178 Jó Éva

City

Miskolc

Miskolc

select * from e_vw1;

select * from Ember;

Ember

Ekód Név Város

114 Kis Géza Miskolc

178 Jó Éva Miskolc

Telefon

20-9555666

30-8765432

Természetesen, ha az Ember táblát

frissítjük, és utána kiíratjuk az e_vw1

nézettábla tartalmát, akkor abban is

benne lesznek a frissítések.

Page 35: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/35

Nézettáblák – VIEW

Beszúrás nézettáblába:

– A beszúrás a nézettáblán keresztül közvetlenül az

alaptáblába történik

– Csak azok azoknak az alaptábla mezőknek adhatunk

értéket, amelyek szerepelnek a nézettáblában

– Csak akkor oldható meg, ha elég mező van a nézettáblában:

• Az alaptábla kulcsmezőjének szerepelnie kell, kivéve, ha

automatikus sorszámozású

• Valamennyi not null mezőnek szerepelnie kell, kivéve ha

van default értékük

Törlés nézettáblából:

– Közvetlenül az alaptáblára hat

– Csak a látható rekordok törölhetők

Page 36: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/36

Nézettáblák – VIEW

Ember

Ekód Név Város

114 Kis Géza Miskolc

178 Jó Éva Miskolc

Telefon

20-9555666

30-8765432

E_VW1

ID

114

Name

Kis Géza

178 Jó Éva

City

Miskolc

Miskolc

CREATE OR REPLACE VIEW e_vw1 (id, name, city) AS SELECT Ekód,Név,Város from Ember

where város='Miskolc';

insert into e_vw1 values(200, 'Hó Jenő', 'Eger';

Beszúródik a rekord az Ember táblába, de ha listázzuk az e_vw1 nézettáblát,

nem lesz benne, mert a város nem miskolc!

insert into e_vw1 values(222, 'Kő Kata', 'Miskolc';

select * from e_vw1; E_VW1

ID

114

Name

Kis Géza

178 Jó Éva

City

Miskolc

Miskolc

222 Kő Kata Miskolc

Page 37: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/37

Nézettáblák – VIEW

CREATE OR REPLACE VIEW e_vw1 (id, name, city) AS SELECT Ekód,Név,Város from Ember

where város='Miskolc';

delete from e_vw1 where id=222;

A 200-as ID-jű rekordot nem tudjuk a nézettáblából törölni, mert nem látható

benne (nem miskolci)!

E_VW1

ID

114

Name

Kis Géza

178 Jó Éva

City

Miskolc

Miskolc

222 Kő Kata Miskolc

Ember

Ekód Név Város

114 Kis Géza Miskolc

178 Jó Éva Miskolc

Telefon

20-9555666

30-8765432

200 Hó Jenő Eger ‒

222 Kő Kata Miskolc ‒

delete from e_vw1 where id=200; 0 row(s) deleted

1 row(s) deleted

Page 38: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/38

E_VW1

Nézettáblák – VIEW

CREATE OR REPLACE VIEW e_vw1AS SELECT Város, count(*) from Ember group by Város;

Város

Miskolc

Eger

-

Ember

Ekód Név Város

114 Kis Géza Miskolc

178 Jó Éva Miskolc

Telefon

20-9555666

30-8765432

200 Hó Jenő Eger ‒

222 Kő Kata ‒ ‒

update e_vw1 set Város='Győr' where város is null

CREATE OR REPLACE VIEW e_vw1 AS SELECT Város, count(*) "Lakók száma" from Ember group by Város;

Lakók száma

2

1

1

Must name this expression with a column alias!

Data manipulation operation not legal on this view!

Page 39: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/39

Nézettáblák – VIEW

Nézettábla módosítása:

– A create parancsot az or replace paranccsal kiegészítve

egyszerűen felülírjuk a view létrehozó parancsát

Nézettáblák listázása:

Nézettábla törlése:

– DROP VIEW nézettáblanév

– Az adatok nem törlődnek, hiszen azok az alaptáblákban

vannak!

DROP VIEW e_vw1

select * from user_views

Page 40: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/40

Nézettáblák – VIEW

Mire használjuk a nézettáblákat?

– Ha nem akarjuk, hogy egy felhasználó egy (vagy több) tábla

teljes tartalmát lássa, készítsünk egy nézettáblát, és arra

adjunk neki jogosultságot.

• Pl. ha kiadjuk a select * from user_tables parancsot, csak a

saját tábláinkat látjuk, ugyanis a user_tables tábla egy számunkra

leszűrt nézettábla.

– Egyszerűsíthető velük a munka:

• Ha több táblából készítünk egy nézettáblát, sokkal egyszerűbb

lekérdezni, nem kell az összekapcsolásokkal foglalkozni.

• Pl. ha készítünk egy nézettáblát a where sysdate-készítés <=7

feltétellel, bármikor kilistázzuk, az elmúlt hét adatai lesznek benne

– Függetlenítik az alkalmazásokat az alaptábláktól:

• Ha változik egy alaptábla szerkezete, a belőle készült nézettábla

általában változtatás nélkül tovább használható

Page 41: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/41

Indexek

Az index a táblához kapcsolódó, gyors keresést lehetővé tevő

táblázat.

Az index tartalmazza, hogy a tábla rekordjai -egy vagy több oszlop

alapján- sorba rendezve hogyan következnek egymás után.

Fontos: az index csak egy mutató, amely hivatkozik a táblára.

Az indexek szerkezete általában B-fa, ami nagyon gyors keresést

tesz lehetővé, a soros, "minden rekordot egymás után

megvizsgálunk" kereséshez képest.

Az indexek létrehozása jelentősen növeli az adatbázis

hatékonyságát, de a méretét is.

Egy általános adatbázisban az indexek helyfoglalása körülbelül

ugyanakkora, mint az adatoké.

Page 42: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/42

Indexek

Ha egy adathalmaznak nincs indexe (logikai sorrendje), akkor a leg-

rosszabb esetben az összes rekordot be kell olvasni a fizikai tároló-

helyről, miközben keresünk egy konkrét adatok. Ez nagy adatmeny-

nyiségek (> 1000) esetén sok erőforrást igényel, és rendkívül lassú

is lehet.

Olyan ez, mint amikor egy dobozba bedobáljuk 1000 ember név-

jegykártyáját, és egyesével kiemelve keressük a vízvezetékszerelő

telefonszámát. (idő… idő… idő…)

Ha a dobozban név szerint vannak sorba rendezve a névjegykártyák

(elsődleges kulcs!), ez akkor sem könnyíti meg a keresést, ehhez

ugyanis tudni kellene az illető nevét.

Akkor lehet rendkívül eredményes a keresés, ha egy másik dobozt

is létrehozunk, amibe szakmák szerint rendezzük a névjegykár-

tyákat (index), és abban keresünk. Ha vízvezetékszerelőt keresünk,

nyilván a rendezett lista végén keresgélünk, és nagyon hamar meg

is találjuk a mestert.

Page 43: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/43

B-fa (bináris keresőfa)

Az Oracle általában B-fa szerkezetet használ az indexek tárolására.

A B-fa tartományokra osztott adatok rendezett listája

0 .. 40

41 .. 80

. . .

160..200

0 .. 10

11 .. 17

. . .

32 .. 40

41 .. 48

49 .. 55

. . .

75 .. 80

160..172

173..177

. . .

193..200

0,rowid

1,rowid

. . .

10,rowid

11,rowid

12,rowid

. . .

17,rowid

160,rowid

161,rowid

. . .

172,rowid

173,rowid

174,rowid

. . .

177,rowid

Ágak: kereséshez

Levelek: adatok

eléréséhez

. . .

Page 44: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/44

B-fa (bináris keresőfa)

A teljes fa egy önkiegyensúlyozó bináris keresőfa, melyet a rendszer

az adatok számának, eloszlásának megfelelően, DML műveletek

esetén (beszúrás, törlés, módosítás) folyamatosan alakít, karbantart

A szintek száma minden csomópont részfáiban megegyezik, így a

gyökértől a levelekig eljutni minden esetben ugyanannyi lépésben

lehet, vagyis minden adatot ugyanannyi idő alatt lehet megtalálni

A szintek száma egyben meghatározza egy adat elérési sebességét

Annyi I/O művelet (és logikai vizsgálat) szükséges egy adat

betöltéséhez, ahány szint van a keresőfában

Ha egy SQL utasítás csak indexelt oszlopokat használ, a rendszer

az adatokat közvetlenül az indexekből, és nem a táblából olvassa ki

Ha egy utasításban nem indexelt adatok is vannak, akkor azokat a

levélben, az indexelt érték mellett lévő rowid (link, egyedi rekord

azonosító) alapján olvassa be a rendszer

Page 45: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/45

B-fa (bináris keresőfa)

Ágak:

– A gyökér olyan információkat tartalmaz, amely alsóbb szintű

ágakra mutat, csak keresési funkciót lát el

– Az ágak szintjeinek a száma az adatok mennyiségétől függ

– A legutolsó szintű ágak a levelekre mutatnak

Levelek:

– Annyi levél van, ahány indexelt adat

– Minden levélben van egy index kulcs, és az Oracle-ben rowid-

nek nevezett link (egyedi rekord azonosító), ami az indexhez

tartozó rekordra mutat

– A leveleket linkek kapcsolják a bal és jobb oldali

szomszédaikhoz, megkönnyítve ezzel egy adott sorrendben

történő bejárásukat

Page 46: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/46

Indexek

Oracle index típusok:

– Egyoszlopos (single)

• Lehet Unique, vagy Non-Unique

• A legtöbbször ezt használjuk

• Automatikusan létrejön primary key és unique oszlopokra

– Többoszlopos (concatenated)

• Több mező alapján jön létre, pl. (vezetéknév, keresztnév)

• Csak akkor hasznos, ha az oszlopok szerepelnek az utasítás

(select, update, delete) where részében

– Unique: Biztosítja az adatok egyediségét az oszlopban

– Compute Statistics: a rendszer statisztikát készít az index

létrehozásakor, melyet felhasznál a parancsok végrehajtásának

optimalizálásához

– A primary key és az unique megszorítás automatikusan létrehoz

egy unique típusú indexet a megadott oszlopra!

Page 47: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/47

Indexek

CREATE [UNIQUE] INDEX indexnév

ON táblanév (mezőnév, mezőnév…)

[COMPUTE STATISTICS];

CREATE INDEX p_id1ON Person (Name);

ID

1

2

3

Name Dp

Kis Béla 10

Kő Dezső 11

Hó Jenő 10

Person

CREATE UNIQUE INDEX p_id2ON Person (Dp, Name);

Index létrehozása

CREATE Table person(ID int primary key,Name char(40) unique,...

Automatikusan létrejön index az ID és a

Name mezőre!

A táblára kiadott insert, delete, update

parancsok után automatikusan módosul

az index!

Page 48: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/48

Indexek

select * from user_indexes where table_name='PERSON'

DROP INDEX indexnév;

DROP INDEX p_id1;

Adott táblához tartozó indexek listázása:

Index törlése

Page 49: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/49

Szekvenciák (sorozatok) – Sequence

Tábláktól (objektumoktól) független adatbázis objektum, mely

segítségével sorozatokat (egyedi egész számokat)

generálhatunk

Mindig egész (integer) típusú

Több felhasználó is használhatja egyszerre, több táblához is

használható egyszerre

Általában elsődleges kulcsok értékének előállítására

használjuk

Létrehozása:

– START WITH – Kezdőérték

– INCREMENT BY – Növekedés

CREATE SEQUENCE sorozatnév

[START WITH m]

[INCREMENT BY n]

CREATE SEQUENCE sn;

Page 50: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/50

Szekvenciák (sorozatok) – Sequence

Használata:

– Aktuális értékét a sorozatnév.currval függvény adja vissza

– A következő értékét a sorozatnév.nextval függvénnyel

lehet lekérdezni

Törlése:

insert into person values(sn.nextval,...;

DROP SEQUENCE sorozatnév

Page 51: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/51

Szekvenciák (sorozatok) – Sequence

Speciális lehetőség: értékek generálása ciklusban, alsó- és

felső határ között:

CREATE SEQUENCE snprbstart with 10increment by 3minvalue 10maxvalue 20cyclecache 3;

10-ről indul,

3-asával növekszik,

10 és

20 között

ciklusban működik,

egyszerre 3 értéket állít elő

Az eredmények láttán úgy

érzem, ez kb. annyira

hasznos, mint az egyszer

használható, eldobható usb

pendrive :-)

Az ID-t állította elő a sorozat,

a Data-t én adtam meg!

Page 52: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/52

Nyomkövetési feladat

IT

Page 53: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN65/53

Órai feladat (1)

Kövesd a parancsokat!

CREATE TABLE dolgozo (nev VARCHAR2(40),kor NUMBER,munkakor VARCHAR2(60)

);

ALTER TABLE dolgozo ADD szuletesiev NUMBER(4) NOT NULL;

– Születési év mező hozzáadása, kötelező megadással

ALTER TABLE dolgozo DROP COLUMN kor;

– A kor mező törlése a szerkezetből

ALTER TABLE dolgozo ADD szemelyiszam NUMBER(13);

– Személyiszám mező hozzáadása

ALTER TABLE dolgozo MODIFY szemelyiszam PRIMARY KEY;

– Elsődleges kulcs kialakítása a személyiszám mezőből

– Helytelen adatok esetén nem megoldható!

nev

vc2(40)

munkakor

vc2(60)

kor

N

dolgozo

Page 54: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN65/54

Órai feladat (2)

ALTER TABLE dolgozo DROP PRIMARY KEY;

– Elsődleges kulcs megszorítás törlése

ALTER TABLE dolgozo ADD id NUMBER(4) PRIMARY KEY;

– ID mező hozzáadása elsődleges kulcsként

ALTER TABLE dolgozo RENAME COLUMN munkakor TO mkor;

– Munkakör nevű mező átnevezése mkor-re

ALTER TABLE dolgozo RENAME COLUMN szuletesiev To szulido;

– Születésiév nevű mező átnevezése szuülidő-re

ALTER TABLE dolgozo RENAME COLUMN szemelyiszam TO szemsz;

– Személyiszám nevű mező átnevezése szemsz-re

ALTER TABLE dolgozo MODIFY szulido date;

– Szülidő mező típusának módosítása dátumra

– ,

ALTER TABLE dolgozo MODIFY szemsz char(13);

– Szemsz nevű mező típusának módosítása karakteresre

Column to be modified must be empty to change datatype!

Page 55: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN65/55

Órai feladat (2.5)

Add meg azt a CREATE parancsot, amivel a fenti parancsok

hatására kialakult táblaszerkezetet létre lehet hozni!

dolgozo

id

N(4)

nev

vc(40)

mkor

vc(60)

szulido

D

szemsz

c(13)

create table dolgozo(id number(4) primary key,nev varchar2(40),mkor varchar2(60),szulido date,szemsz char(13)

);

Page 56: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN65/56

Órai feladat (3)

Kövesd tovább a parancsokat!

CREATE TABLE telefonszam (id NUMBER(4) NOT NULL,mobil char(9) UNIQUE

);

ALTER TABLE telefonszam ADD FOREIGN KEY(id) REFERENCES

dolgozo(id);

telefonszam

id

N(4)

mobil

c(9)

dolgozo

id

N(4)

nev

vc(40)mkor

vc(60)

szulido

Dszemsz

c(13)

Page 57: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/57

Órai feladat (4)

Kövesd tovább a parancsokat!

CREATE TABLE fonok (

fonokid NUMBER(4),

idkinek NUMBER(4),

PRIMARY KEY (fonokid, idkinek),

CONSTRAINT c1 FOREIGN KEY (fonokid) REFERENCES dolgozo(id),

CONSTRAINT c2 FOREIGN KEY (idkinek) REFERENCES dolgozo(id)

);

Rajzold meg mindhárom tábla relációs modelljét a köztük lévő

kapcsolatokkal együtt!

fonok

fonokid

N(4)

idkinek

N(4)

Page 58: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/58

Órai feladat (4.5)

Rajzold meg mindhárom tábla relációs modelljét a köztük lévő

kapcsolatokkal együtt!

dolgozo

id

N(4)

nev

vc(40)mkor

vc(60)

szulido

Dszemsz

c(13)

telefonszam

id

N(4)

mobil

c(9)

fonok

fonokid

N(4)

idkinek

N(4)

Page 59: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/59B MANIT

Egyéni feladat

Page 60: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/60

Egyéni feladat (1)

Készítsen egy táblát:

– Neve legyen Melós,

– Legyen benne MID numerikus mező, max. 4 számjeggyel,

– Legyen benne Név mező, 30 karakterrel.

Készítse el a következő módosításokat:

– MID legyen elsődleges kulcs

– Szúrjon be egy Születés nevű, dátum típusú mezőt

– A Név alapértéke legyen Kiss Robi

– A Születés ne lehessen üres

– A Születés alapértéke legyen 1990.01.01

Page 61: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/61

Egyéni feladat (1)

Melos tábla elkészítése

create table melos(

mid number(4),

nev varchar2(30)

);

MID legyen elsődleges kulcs

alter table melos modify mid primary key

Szúrjon be egy Születés nevű, dátum típusú mezőt

alter table melos add szuletes date

A Név alapértéke legyen Kiss Robi

alter table melos modify (nev default 'Kiss Robi')

Page 62: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/62

Egyéni feladat (1)

A Születés ne lehessen üres

alter table melos add constraint szul_nn check (szuletes is not null);

A Születés alapértéke legyen 1990.01.01

select sysdate from dual -> 10/30/2018

alter table melos modify (szuletes default '01/01/1990')

Page 63: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/63

Készítsen egy másik táblát:

– Neve legyen Munkakör

– Legyen MAZ nevű, numerikus mezője, max. 4 számjeggyel

– Legyen MkNév nevű mezője, max. 30 karakter

Készítse el a következő módosításokat:

– MAZ legyen elsődleges kulcs

– MkNév ne lehessen üres

– Szúrjon be egy Kereset nevű numerikus mezőt (7 számjegy!)

– Szúrjon be egy ellenőrzést, a Kereset ne lehessen 200-nál

kevesebb!

Egyéni feladat (2)

Page 64: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/64

Munkakör tábla elkészítése

create table munkakor(

maz number(4),

mknev varchar2(30)

);

MAZ legyen elsődleges kulcs

alter table munkakor modify maz primary key

MkNév ne lehessen üres

alter table munkakor add constraint mknev_nn check (mknev is not null);

Egyéni feladat (2)

Page 65: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/65

Szúrjon be egy Kereset nevű numerikus mezőt (7 számjegy!)

alter table munkakor add kereset number(7)

Szúrjon be egy ellenőrzést, a Kereset ne lehessen 200-nál

kevesebb!

alter table munkakor add constraint ker_ch check (kereset > 200);

Egyéni feladat (2)

Page 66: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/66

Készítse el a következő módosításokat:

– Szúrjon be egy Mkör nevű numerikus mezőt a Melós táblába, (4

számjegy)

– Az Mkör mezőből készítsen idegen kulcsmezőt, mely a

Munkakör táblával tartja a kapcsolatot!

Írassa ki a táblák szerkezetét, ellenőrizze a megoldást!

Törölje le a két táblát!

Egyéni feladat (3)

Page 67: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/67

Szúrjon be egy Mkör nevű numerikus mezőt a Melós táblába, (4

számjegy)

alter table melos add mkor number(4)

Az Mkör mezőből készítsen idegen kulcsmezőt, mely a Munkakör

táblával tartja a kapcsolatot!

alter table melos add constraint melos_fk foreign key (mkor) references

munkakor(maz)

Írassa ki a táblák szerkezetét

desc melos; desc munkakor;

Írassa ki az összes megszorítást, megkötést

select * from all_constraints where table_name='MELOS'

Egyéni feladat (3)

Page 68: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/68

Törölje le a két táblát

drop table melos

drop table munkakor

Egyéni feladat (3)

Page 69: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/69B IT MAN

Csá!

Page 70: 9. SQL alapok (DDL esettanulmány)szucs/ab1/oa/1809_DDL.pdf · 2018-11-27 · 66/4 B IT MAN Tábla (vagy más objektum)létrehozása CREATE INDEX RIndex ON Autó (Rendszám); Kód

B IT MAN66/70

VÉGEVÉGE