Adatbázis-kezelés alapjai SQL 1: DDL, DML. v: B IT MAN 92/1B IT MAN

Hasonló dokumentumok
Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

B I T M A N B I v: T M A N

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

Adatbázis Rendszerek II. 8. Gyakorló környezet

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Adatbázis-kezelés, információs-rendszerek

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Adatbázis rendszerek Ea: Eskúel. Structured Query Language

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Adatbázis-kezelés. Harmadik előadás

Adatbázis Rendszerek II. 3. SQL alapok

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

Bevezetés: az SQL-be

Adatbázis rendszerek SQL nyomkövetés

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Adatbázis rendszerek Ea: Esqúel. Structured Query Language

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

Adatbázis kezelés Delphiben. SQL lekérdezések

SQL parancsok feldolgozása

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

Adatbázis-kezelés alapok Adatbázisok című tárgyhoz, ismétlés kapcsán

Adattípusok. Max. 2GByte

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Adatbázisok* tulajdonságai

BEVEZETÉS Az objektum fogalma

Adattípusok. Max. 2GByte

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Adatbázis használat I. 5. gyakorlat

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

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Java és web programozás

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

SQL DDL-1: táblák és megszorítások

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

B I T M A N B I v: T M A N

Keskeny Zoltán 2007/08 SQL. Structured Query Language. (gyakorlat az SQL2 szabvány alapján) Keskeny Zoltán tanév

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

Java és web programozás

Adatbázisok elmélete 10. előadás

Adatbázis, adatbázis-kezelő

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

ADATBÁZIS RENDSZEREK I BEADANDÓ

B I T M A N B I v: T M A N

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Készítette: Szabóné Nacsa Rozália

ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Adatbázis-kezelés. Második előadás

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

Adatbázisok elmélete 9. előadás

Megszorítások. AB1_06A_Megszorítások - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

Adatbázis Rendszerek II. 2. Gyakorló környezet

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

LOGISZTIKAI ADATBÁZIS RENDSZEREK BEVEZETÉS

Adatbázis Rendszerek II. 3. Ea: MySQL alapok

Adatbázis rendszerek Gy: MySQL alapok

Relációsémák létrehozása SQL nyelvben

Adatbázisok elmélete 9. előadás

Programozás. Adatbázis-kezelés (alapok) Fodor Attila

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Vizuális programozás gyakorlat

Adatbázisok I A relációs algebra

Az SQL nyelv. SQL (Structured Query Language = Strukturált Lekérdező Nyelv).

Tranzakciókezelés PL/SQL-ben

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Webfejlesztés 4. alkalom

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

Elemi alkalmazások fejlesztése IV.

Adatbázis Rendszerek II. 6. PLSQL Triggerek 32/1B IT MAN

Adatbázis I. 11. előadás. Kulcsok az SQL ben. Hivatkozásépségi megszorítások és idegen kulcsok.

Adatbázis Rendszerek II. 3. Ea: MySQL alapok

w w w. h a n s a g i i s k. h u 1

B I T M A N B I v: T M A N

6.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

Adatbáziskezelı-szerver SQL. Relációs adatbázis-kezelık. Relációs adatszerkezet. Házi feladat

LBRA6i integrált rendszer

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

Indexek és SQL hangolás

A szürke háttérrel jelölt fejezet/alfejezet szövege a CD-mellékleten található. A CD-melléklet használata. 1. Elméleti áttekintés 1

INTEGER egész típusú érték megadása, hozzá hasonló, de számábrázolási tartományában eltérő típus még a SMALLINT, szinonimája a DECIMAL

1.óra. Bevezetés. Adatmodellezés, elméleti háttér

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

Átírás:

Adatbázis-kezelés alapjai SQL 1: DDL, DML v: 2018.11.25 92/1

Témakörök SQL alapok DDL utasítások DML utasítások 92/2

Az SQL jellemzése Az SQL a relációs adatbázis-kezelők szabványosított adatmanipulációs és lekérdező nyelve A relációs algebrára épül Nem algoritmikus: Parancsnyelv jellegű, megfogalmazhatjuk, mit akarunk csinálni, de a megoldási algoritmust nem kell megadni. Nincsenek benne ciklusok, feltételes elágazások, stb. Mintaillesztéses, halmazorientált: A táblákat mint a sorok (rekordok) halmazát tekintjük. Az adott utasításban megfogalmazott feltételnek eleget tevő összes sor részt vesz a műveletben Adatok keresésekor nem azok helyét, hanem azok tulajdonságát adjuk meg, így általában nem egy, henem több adatot kapunk eredményül 92/3

Az SQL jellemzése 2. Szabványos: Illeszkedik az SQL szabványhoz. A szabványban van egy SQL utasításcsoport, amelyet minden SQL alapú szoftver implementációnak meg kell valósítani, de mindegyik implementáció plusz lehetőséget is nyújt a standard SQLhez képest, felülről kompatibilis a szabvánnyal Fontosabb használati módjai: Önállóan, fejlesztő eszközökben: pl.: SQL*Plus, APEX Beágyazva procedurális programozási nyelvekbe. pl.: C/C++, Pascal, JDBC Az SQL nem DBMS! 92/4

A relációs adatbázis-kezelők története 1970 DBMS Codd javaslata SQL System-R Sequel 1980 1990 2000 Oracle Ingres Informix dbase DB2 RDB Clipper Sybase Postgre SQL mysql VFP SQLServer SQL86 SQL89 SQL92 SQL1999 SQL2006 SQL2008 2010 92/5 Oracle Informix MS SQL Postgre MySQL SQLite mongodb TITAN cassandra SQL2011 BSQL2017 IT MAN

Az SQL parancsok csoportosítása Az SQL által lefedett területek: DDL: Data Definition Language adatstruktúra definiáló utasítások adatbázisok, táblák létrehozása, módosítása és törlése DML: Data Manipulation Language adatokon műveletet végző utasítások adatok rögzítése, módosítása, törlése DQL: Data Query Language adat lekérdező utasítás DCL: Data Control Language adatvezérlő, felügyelő utasítások tranzakciók kezelése, jogosultságok menedzselése 92/6

Az SQL használata Tipikus műveleti sorrend: Objektumok, táblák létrehozása, adatok felvitele, adatok lekérdezése, adatok módosítása, szerkezetek módosítása, működési környezet beállítása. Tudom, hogy ennél, de előbb be kell fejeznem a blogolást! Rendszám Típus Szín Kor ABC-765 Opel Fehér 6 92/7 Rendszám Típus Szín Kor GBC-765 Opel Fehér 6 JED-123 Nissan Ezüst 5 AKT-392 Skoda Kék 32

Szintaxis Kisbetű és nagybetű a nyelv alapszavaiban egyenértékű Utasítások sorfolytonosan írhatók, lezárás pontosvesszővel. Szövegkonstans: 'szöveg' 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ó). Logikai műveletek: AND, OR, NOT Az utasítások szintaxisának leírásánál az elhagyható részleteket szögletes zárójelek között vannak. 92/8

Az SQL utasítások csoportosítása DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER DML: - rekord felvitel INSERT - rekord törlés DELETE - rekord módosítás UPDATE DQL: - lekérdezés SELECT DCL: - védelem GRANT, REVOKE - tranzakció kezelés COMMIT, ROLLBACK 92/9

Témakörök SQL alapok DDL utasítások DML utasítások 92/10

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 92/11

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) ); 92/12 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

Tábla (vagy más objektum) létrehozása Kód 1 2 3 Rendszám Típus Szín GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék CREATE SEQUENCE k_s; insert into Autó values (k_s.nextval,... CREATE INDEX RIndex ON Autó (Rendszám); Rendszám AKT-392 GBC-765 Kód 3 1 JED-123 2 CREATE VIEW OpelAutó AS Select Kód, Rendszám, Szín from Autó Where Tipus='Opel'; Kód 1 Rendszám GBC-765 Szín Fehér 92/13

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. 92/14

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) 92/15

Oracle adattípusok Numerikus adattípusok NUMBER (±10 125 ) Max. 38 számjegy INT (INTEGER) (±2 31 ) SMALLINT (±2 15 ) DECIMAL (±10 308 ) Max. 15 számjegy 92/16

Oracle adattípusok Dátum és időpont adattípusok DATE (ie. 4712.01.01 isz. 9999.12.31) TIMESTAMP (másodperc pontossággal) 92/17

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 92/18

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, nn df ch uq pk idm int not null, idm int default '29', idm int check(idm >500), idm int unique, idm int primary key, ); 92/19

Példák create table pld1 ( id int primary key, nev varchar2(100), datum date, suly float(8) ); create table pld2 ( az int primary key, hely varchar2(30), darab int check (darab>=0), foreign key (az) references pld1(id) ); 1 2 create sequence id_seq; 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, ); 92/20 3 Fontos a sorrend! 4

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! 92/21

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) ); 92/22 Több null érték az oszlopban

Kapcsolatok kialakítása 1:N kapcsolat Ha nem írjuk elő az idegen kulcsra az Unique integritást, 1:N kapcsolatot alakítunk ki. 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) ); 92/23 Több azonos érték az oszlopban

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) ); 92/24

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! M1 M2 alter table e_a add constraint ea_pk primary key (ekód, akód) alter table e_a add constraint ea_uq unique (ekód, akód) 92/25

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) ); 92/26

Többértékű tulajdonság kialakítása create table ember( ekód number(3) primary key, név varchar2(40) ); ekód Név create table nyelvism( ekód number(3), nyelv varchar2(25), primary key (ekód, nyelv), foreign key(ekód) references ember(ekód) ); Ember Nyelv 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 92/27

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) ); 92/28

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ő! ALTER TABLE Autó ADD Tulaj varchar(35); RENAME táblanév TO új_táblanév Tábla átnevezése 92/29

Tábla módosítása create table személy( id number(4), név varchar2(30) ); 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; ALTER TABLE személy DROP primary key; ALTER TABLE személy DROP COLUMN szüldátum; RENAME személy TO person; 92/30

Tábla módosítása comment on column person.id is '100 és 300 közötti adatok'; alter table person modify név default 'Kis Béla'; alter table person modify név default null; 92/31

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 department ADD CONSTRAINT cn4 primary key(dpno); ALTER TABLE person ADD dp int; ALTER TABLE person ADD CONSTRAINT cn5 FOREIGN KEY (dp) REFERENCES department(dpno); ALTER TABLE person DROP CONSTRAINT cn1; 92/32

Megszorítások listázása SELECT * FROM user_constraints WHERE table_name = 'PERSON' 92/33 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ű!

Tábla törlése DROP TABLE táblanév; DROP TABLE Autó; Azok a táblák amelyekre más tábla hivatkozik, nem törölhetők! 92/34

Vedd észre! Táblák létrehozási sorrendje 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 Kategoria Termek 2 Kkod Nev Kategoria Tkod Nev Ar Leiras Vasarlas Tkod Sorszam Idopont Darab VID 5 4 Vasarlo VID Nev Cim Fizmod FizModok Fkod Leiras 3 92/35

Vedd észre! Táblák törlési sorrendje 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 Kategoria Termek 4 Kkod Nev Kategoria Tkod Nev Ar Leiras Vasarlas Tkod Sorszam Idopont Darab VID 1 2 Vasarlo VID Nev Cim Fizmod FizModok Fkod Leiras 3 92/36

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; 92/37 Person ID 1 2 3 Név Dp Kis Béla 10 Kő Dezső 11 Hó Jenő 10 Személyek ID Név Dp

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 92/38

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 Person ID 1 2 3 Név Dp Kis Béla 10 Kő Dezső 11 Hó Jenő 10 Department DpNo 10 11 DpName Designer Programmer 92/39 Személyek ID Name DpName 1 2 3 Kis Béla Kő Dezső Hó Jenő Designer Programmer Designer

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 akkora, mint az adatoké. 92/40

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 (pl. többoszlopos index esetén) 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 92/41

Indexek CREATE [UNIQUE] INDEX indexnév ON táblanév (mezőnév, mezőnév ) [COMPUTE STATISTICS]; CREATE INDEX id_p_n ON Person (Name); Person ID 1 2 3 Name Dp Kis Béla 10 Kő Dezső 11 Hó Jenő 10 CREATE INDEX id_p_dn ON Person (Dp, Name); DROP INDEX indexnév; DROP INDEX id_p_dn; 92/42

Gyakorló környezet kialakítása Regisztráljon az apex.oracle.com oldalon! 92/43

apex.oracle.com/en/ Ingyenes APEX tárhely! 92/44

A regisztrációs folyamat 92/45

92/46

92/47

92/48

92/49

92/50

92/51

92/52

92/53

92/54

92/55

92/56

Az APEX felület kezelése 1. Az eredménylista mérte: Rows (alap: 10 sor!) 2. Beírt parancs futtatása (Run) 3. Eredmények kiírási területe (Results) 4. History (az összes kiadott parancsot megjegyzi!) 2. 1. 3. 4. 92/57

Az APEX felület kezelése 5. Parancsokban, táblanevekben, mezőnevekben a kisbetűnagybetű nem számít, nincs különbség: SELECT Név FROM EMBER; select név from ember; 6. Az adatokban számít a kisbetű-nagybetű: Select. WHERE Név='Kis Béla'; Select. WHERE Név='kis béla'; Select. WHERE Név='KIS BÉLA'; 7. Parancsok végét zárja le, de egyetlen parancs esetén elmaradhat! select table_name from user_tables 92/58

Az APEX felület kezelése 8. Több parancs futtatása egyszerre: Begin End között 9. Egy parancs futtatása, ha több van beírva: kijelölés! 10. Meglévő táblák nevének kiírása: select table_name from user_tables; 92/59

Nyomkövetési feladat 92/60

Órai feladat (1) Kövesd a parancsokat! CREATE TABLE dolgozo ( nev VARCHAR2(40), kor NUMBER, munkakor VARCHAR2(60) ); dolgozo nev vc2(40) kor N munkakor vc2(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; 92/61 Elsődleges kulcs kialakítása a személyiszám mezőből Helytelen adatok esetén nem megoldható!

Ó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); 92/62 Szemsz nevű mező típusának módosítása karakteresre

Ó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 nev N(4) 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) ); 92/63

Órai feladat (3) Kövesd tovább a parancsokat! CREATE TABLE telefonszam ( id NUMBER(4) NOT NULL, mobil char(9) UNIQUE ); telefonszam id mobil N(4) c(9) dolgozo id nev N(4) vc(40) mkor vc(60) szulido D szemsz c(13) ALTER TABLE telefonszam ADD FOREIGN KEY(id) REFERENCES dolgozo(id); 92/64

Egyéni feladat B IT 92/65 MAN

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 92/66

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') 92/67

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') 92/68

Egyéni feladat (2) 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! 92/69

Egyéni feladat (2) 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); 92/70

Egyéni feladat (2) 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); 92/71

Egyéni feladat (3) 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! 92/72

Egyéni feladat (3) 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' 92/73

Egyéni feladat (3) Törölje le a két táblát drop table melos drop table munkakor 92/74

Témakörök SQL alapok DDL utasítások DML utasítások 92/75

DML adatokon műveletet végző utasítások DML Data Manipulation Language Rekordok (sorok) beszúrása (felvitele) Mezők értékének módosítása Rekordok törlése 92/76

Rekordok beszúrása INSERT INTO táblanév [(oszloplista)] VALUES (értéklista); Az oszloplista elhagyható, de ekkor az összes mező értékét meg kell adni, a megfelelő sorrendben! Rendszám Típus Szín Kor GBC-765 Opel Fehér 6 JED-123 Nissan Ezüst 5 INSERT INTO Autó VALUES ('AKT-392', 'Trabant', 'Kék', 32); INSERT INTO Autó (Rendszám, Típus, Kor) VALUES ('ASD-602', 'Mazda', 7); INSERT INTO Autó VALUES ('ALM-332', 'Renault', Null, 8); INSERT INTO Autó VALUES ('IJK-222','Lada',Default, 25); 92/77 Ha tartozik default érték a táblához!

Rekordok beszúrása dátumok kezelése Kod Nev Szido 1 Kis Béla 2018.10.31 2 Nagy Éva 2018.10.03 select sysdate from dual 10/31/2018 A kiírt formában mindig megadható a dátum! insert into emberek values (1, 'Kis Béla', '10/31/2018'); insert into emberek values (2, 'Nagy Éva', to_date('2018.10.03', 'YYYY.MM.DD'); to_date dátummá alakítja a szöveget a megadott formátum mellett: YYYY év 4 számjeggyel MM hónap 2 számjeggyel DD nap, 2 számjeggye 92/78

Mezők értékének módosítása UPDATE táblanév SET mező = kifejezés,..., mező = kifejezés [ WHERE feltétel ]; A feltételnek eleget tevő rekordok módosulnak, Where feltétel nélkül minden rekordot módosít! Több mező értéke is módosítható egy parancsban UPDATE Autó SET Kor=10 WHERE Rendszám='JED-123'; UPDATE Autó SET Szín= 'Barna'; UPDATE Autó SET Kor=10,Szín='Kék' WHERE Rendszám='JED-123' A mezőben lévő aktuális érték is felhasználható: UPDATE Autó SET Ár = Ár * 1.2 WHERE Ár<1000000; 92/79

Mezők értékének módosítása dátumok Kod Nev Szido 1 Kis Béla 2018.10.31 2 Nagy Éva 2018.10.03 Két dátum különbségét napokban kapjuk meg. Ha 1-et hozzáadunk egy dátumhoz, 1 nappal későbbi dátumot kapunk. update emberek set szido=szido+1 where kod=1; 1 Kis Béla 2018.11.01 update emberek set szido= add_month(szido, 3) where kod=1; 92/80 1 Kis Béla 2019.02.01 add_month Hónapok hozzáadása a dátumhoz. Lehet negatív érték is. Pl: 3 évvel korábbi dátum: vonjunk le 3*12-t!

Mezők értékének törlése null érték Kod Nev Szido 1 Kis Béla 2018.10.31 2 Nagy Éva 2018.10.03 Ha egy rekordból ki kell törölni egy vagy több mező tartalmát, az adatokat null értékre kell kicserélni! update emberek set szido= null where kod=2; 1 Kis Béla null A null érték azt jelenti, hogy a mező tartalma nem értelmezhető, nem ismert, vagy törölt. 92/81

Rekordok törlése DELETE FROM táblanév [ WHERE feltétel ]; Where feltétel nélkül minden sor törlődik! DELETE FROM Autó WHERE Kor>15; Az összes rekord törlésére használható: delete from autó; TRUNCATE TABLE Autó; Truncate table Törli a tábla összes rekordját. Nagy rekordszám esetén sokkal gyorsabb, mint a delete. 92/82

Nyomkövetési feladat 92/83

Órai feladat (1) Kövesd a parancsokat! create sequence st_seq; Szekvencia: automatikusan növekvő érték. Paraméterek nélkül 1-ről indulva egyesével növekszik. create table Student( ); ID int default st_seq.nextval primary key, Name varchar(30), BirthDay date, EntryDate date default sysdate, Score number(5), TelNo varchar(12), Email varchar(40) Student nextval: következő érték lekérése a szekvenciából ID Name BirthDay EntryDate Score TelNo Email 92/84

Órai feladat (2) Student ID Name BirthDay EntryDate Score TelNo Email ALTER TABLE student ADD CONSTRAINT stc1 CHECK (score < 1000); ALTER TABLE student ADD CONSTRAINT stc2 CHECK (regexp_like (telno,'^(\d{2}-\d{3}-\d{2}-\d{2})$')); ALTER TABLE student ADD CONSTRAINT stc3 CHECK (email like ' %@%. %'); 3 db aláhúzás jel 2 db aláhúzás jel Jelentése: kötelező karakter TelNo formai ellenőrzése: 2számjegy 3számjegy 2számjegy 2számjegy Email formai ellenőrzése: Min. 3 karakter, aztán @, aztán karakterek, pont, és min 2 karakter a végén 92/85

regexp_like Karakterlánc és minta összehasonlítására alkalmas Működése hasonló a LIKE feltételéhez, viszont azzal ellentétben nem csak egyszerű mintákat, hanem bonyolultabb reguláris kifejezéseket is megadhatunk. ^ illeszkedés a minta elején \d decimális számjegy (0..9) {m} m-szeres ismétlődés választás operátor (or) $ illeszkedés a minta végén 92/86

Órai feladat (3) Student ID Name BirthDay EntryDate Score TelNo Email Melyik parancs nem működik, és miért nem? 1. 2. 3. insert into student values (default,'kis Géza','05/30/1998',default,300, '30-566-23-48','abc@bolt.hu'); insert into student values (3,'Theo Dóra','02/29/1996',default,175, '70-555-30-30','t.dora@gmail.com'); Ha automatikusan növekvő értéket használunk, -bár működőképes!-, soha ne adjuk így meg a mező értékét! insert into student values(null,'pró Balázs','07/16/1999',default,211, '46-755-655','probali@gmail.com'); 4. 5. 6. insert into student (id,name) values (default, null); insert into student (name,birthday,email) values ('Kovács Lajos','05/18/1997','ab@retek.hu'); insert into student (name) values ('Maci Laci'); 92/87

Órai feladat (4) Student ID Name BirthDay EntryDate Score TelNo Email Adjuk meg Maci Laci hiányzó telefonszámát: UPDATE student SET telno='70-233-45-56' where name='maci Laci'; Adjuk meg Maci Laci további hiányzó adatait: update student set score=320, email='emil@posta.hu' where name='maci Laci'; Adjuk meg annak a nevét, akinek nincs neve: update student set name='hó Fehérke' where name is null; Adjuk meg Hó Fehérke néhány további adatát: update student set telno= '70-165-10-20', score=150, email= 'hof@mese.com' where name='hó Fehérke'; Hó Fehérke és Maci Laci épp 18 éve született. Írjuk be a születési dátumukat! update student set birthday= add_months(sysdate,-18*12) where name in ('Hó Fehérke', 'Maci Laci'); Írassuk ki az összes adatot! select * from student 92/88

Órai feladat (5) Töröljük ki a 10-nél nagyobb ID-jű rekordokat: delete from student where id > 10 Töröljük ki az összes rekordot: delete from student Töröljük le a táblát: drop table student Töröljük le a szekvenciát: drop sequence st_seq 92/89

92/90

Csá! B92/91 IT MAN

VÉGE VÉGE 92/92