B IT MAN41/1 v: 2017.10.30B IT MAN
9. SQL alapok (DDL esettanulmány)
Adatbázis Rendszerek I.
B IT MAN41/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
B IT MAN41/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
B IT MAN41/4
Tábla (vagy más objektum) létrehozása
CREATE INDEX RIndex
ON 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ín
FROM 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, …
B IT MAN41/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.
B IT MAN41/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)
B IT MAN41/7
Oracle adattípusok
Numerikus adattípusok
– NUMBER (±10125) Max. 38 számjegy
– INT (INTEGER) (±231)
– SMALLINT (±215)
– DECIMAL (±10308) Max. 15 számjegy
B IT MAN41/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)
B IT MAN41/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
B IT MAN41/10
Adattáblák létrehozása – Megszorítások
Create table Melós(
IDM int,
IDM int Primary key,
Check (IDM > 1000),
IDM int Default '29',
Unique (IDM),
Index (IDM),
Foreign key (IDM) references Munkakör(Mkód),
);
B IT MAN41/11
Példák
create table pld1 (
id int primary key,
nev varchar(100),
datum date,
suly float(8)
);
create sequence id_seq;
create table pld3 (
id int default id_seq.nextval primary key,
nev varchar2(50) not null,
darab number(10) default '0' not null,
idopont timestamp default sysdate,
unique (nev)
);
create table pld2 (
az int primary key,
hely varchar2(100),
darab int check (darab>=0),
foreign key (az)
references pld1(id)
);
Oracle!
Fontos a sorrend!
B IT MAN41/12
Tábla módosítása, átnevezése
ALTER TABLE táblanév
[ADD (újelem, ..., újelem)]
[MODIFY (módosítás, ..., módosítás)]
[DROP (oszlop, ..., oszlop)]
[RENAME COLUMN régi_név TO új_név]
újelem: egy "oszlopnév adattípus [feltétel]" csoport
módosítás: "oszlopnév adattípus [feltétel]"
– Fontos: a mezők mérete általában csak növelhető!
RENAME táblanév TO újtáblanév
– Tábla átnevezése
ALTER TABLE Autó ADD Tulaj varchar(35);
B IT MAN41/13
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 varchar(30)
);
ALTER TABLE személy DROP primary key;
ALTER TABLE személy DROP COLUMN szüldátum;
RENAME személy TO person;
B IT MAN41/14
comment on column person.id is '100 és 300 közötti adatok';
ALTER TABLE person MODIFY név default 'Kis Béla';
Tábla módosítása
ALTER TABLE person MODIFY NÉV DEFAULT NULL;
B IT MAN41/15
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 varchar(30)
);
ALTER TABLE person ADD dp int;
ALTER TABLE person ADD CONSTRAINT cn5 FOREIGN KEY (dp)
REFERENCES department(dpno);
ALTER TABLE department ADD CONSTRAINT cn4 primary key(dpno);
ALTER TABLE person DROP CONSTRAINT cn1;
B IT MAN41/16
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ű!
B IT MAN41/17
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ó;
B IT MAN41/18
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
B IT MAN41/19
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
B IT MAN41/20
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
B IT MAN41/21
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
B IT MAN41/22
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
B IT MAN41/23
Nyomkövetési feladat
IT
B IT MAN41/24
Ó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;
ALTER TABLE dolgozo DROP COLUMN kor;
ALTER TABLE dolgozo ADD szemelyiszam NUMBER(13);
ALTER TABLE dolgozo MODIFY szemelyiszam PRIMARY KEY;
B IT MAN41/25
Órai feladat (2)
ALTER TABLE dolgozo DROP PRIMARY KEY;
ALTER TABLE dolgozo ADD id NUMBER(4) PRIMARY KEY;
ALTER TABLE dolgozo RENAME COLUMN munkakor TO mkor;
ALTER TABLE dolgozo RENAME COLUMN szuletesiev To szulido;
ALTER TABLE dolgozo RENAME COLUMN szemelyiszam TO szemsz;
ALTER TABLE dolgozo MODIFY szulido date;
ALTER TABLE dolgozo MODIFY szemsz char(13);
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
Dszemsz
c(13)
B IT MAN41/26
Ó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
Dszemsz
c(13)
create table dolgozo(id number(4),nev varchar2(40),mkor varchar2(60),szulido date,szemsz char(13)
);
B IT MAN41/27
Ó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)
B IT MAN41/28
Ó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)
B IT MAN41/29
Ó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)
B IT MAN41/30B MANIT
Egyéni feladat
B IT MAN41/31
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
B IT MAN41/32
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')
B IT MAN41/33
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')
B IT MAN41/34
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)
B IT MAN41/35
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)
B IT MAN41/36
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)
B IT MAN41/37
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)
B IT MAN41/38
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)
B IT MAN41/39
Törölje le a két táblát
drop table melos
drop table munkakor
Egyéni feladat (3)
B IT MAN41/40B IT MAN
Csá!
B IT MAN41/41
VÉGEVÉGE