Kihagyás

7. gyakorlat

A 6. gyakorlat idejében írtunk ZH-T

  • Insert
  • Update
  • Delete

Insert

INSERT INTO <táblanév> (oszlop1, oszlop2, oszlop3)
VALUES (érték1, érték2, érték3);

SYSDATE - értékként lehet megadni, az aktuális rendszeridő

TO_DATE - dátum létrehozása stringből

Lehet használni al-lekérdezést is:

INSERT INTO sales_reps(id, name, salary, commission_pct)
 SELECT employee_id, last_name, salary, commission_pct
 FROM employees
 WHERE job_id LIKE '%REP%';

Update (modify)

UPDATE <tábla neve>
 SET <oszlop1> = <érték1>
     <oszlop2> = <érték2>
 WHERE <kondíció>

Delete

DELETE table
(WHERE condition)

DELETE FROM departments WHERE department_name = 'Finance';

Tranzakciók

a változtatások nem kerülnek a szerverre, csak "lokálisan" maradnak meg, amíg azt nem kérjük, hogy lépjen életbe

COMMIT - elfogadja a változtatást

ROLLBACK - eldobja a változtatást

Adatbázis objektumok

  • Tábla
  • Nézet
    • egy lekérdezést tárol, táblaszerűen, de mindig frissen tartva
  • Sequence (pl. az AUTO_INCREMENT esetén használt)
    • Egy szig.mon.növ. szám
  • Index
    • A tábla teljesítményét segíti

A táblák és oszlopok nevei max 30 karakter

Egy objektum vagy tábla egyszer szerepelhet

Tábla létrehozása

CREATE TABLE <tábla neve> (
    <oszlop neve> <oszlop típusa> [DEFAULT <érték>]
)
SELECT *
FROM userB.employees;

Tábla létrehozása lekérés alapján:

CREATE TABLE <tábla neve> [(oszlop2, oszlop2, ...)] AS <lekérdezés>;

Típusok

Adattípus Tulajdonságok
CHAR(size) Mindenképpen size hosszú SSString. A maradék ki lesz töltve
VARCHAR2(size) Maximum size hosszú karakterlánc
DATE Dátum és idő értékek
LONG Variable-length character data (up to 2 GB)
CLOB Character data (up to 4 GB)
RAW and LONG RAW Raw binary data
BLOB Binary data (up to 4 GB)
BFILE Binary data stored in an external file (up to 4 GB)
ROWID A base-64 number system representing the unique address of a row in its table
TIMESTAMP Date with fractional seconds

Korlátozások

Korlátozás neve Célja
NOT NULL Az adott érték nem lehet NULL
UNIQUE Az adott értéknek egyedinek kell lennie az adott oszlopban
PRIMARY KEY Elsődleges kulcs
FOREIGN KEY Idegen kulcs
CHECK Ellenőrzi, hogy a tábla megfelel egy adott logikai kifejezésnek
CREATE TABLE employees(
    employee_id NUMBER(6)
        CONSTRAINT emp_emp_id_pk PRIMARY KEY,
-- ...

vagy

CREATE TABLE employees(
    employee_id NUMBER(6)
-- ...
    CONSTRAINT emp_emp_id_pk PRIMARY KEY (employee_id),
-- ...

Foreign key esetén:

CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
    REFERENCES departments(department_id),

Check:

CONSTRAINT emp_salary_min CHECK (salary > 0)

Dropping table: végleges

Ez volt a mese mára, Zárul Kotroczó mókatára

1. feladat

Hozzunk létre egy saját dolgozo2 táblánk

CREATE TABLE dolgozo2 AS SELECT * FROM nikovits.dolgozo;

CREATE TABLE osztaly2 AS SELECT * FROM nikovits.osztaly; Töröljük azokat a dolgozókat, akiknek a jutaléka NULL.

DELETE FROM dolgozo2 WHERE jutalek IS NULL;
ROLLBACK;

2. feladat

Töröljük azokat a dolgozókat, akiknek a belépési dátuma 1982 előtti.

DELETE FROM dolgozo2 WHERE belepes < TO_DATE('1982-01-01', 'YYYY-mm-dd');
ROLLBACK;

3. feladat

Töröljük azokat a dolgozókat, akiknek a telephelye Dallas

DELETE FROM dolgozo2
    WHERE oazon = (SELECT oazon FROM osztaly2 WHERE telephely = 'DALLAS');

4. feladat

Töröljük azokat a dolgozókat, akiknek a fizetése kisebb, mint az átlagfizetés

DELETE FROM dolgozo2 WHERE fizetes < (SELECT AVG(fizetes) FROM dolgozo2);

5. feladat

Töröljük ki azon osztályokat, amelyeknek 2 olyan dolgozója van, akik a kettes fizetési kategóriába tartoznak

DELETE FROM osztaly2 WHERE oazon IN (SELECT oazon FROM dolgozo2
    NATURAL JOIN osztaly2
    JOIN fiz_kategoria ON fizetes BETWEEN fiz_kategoria.also AND fiz_kategoria.felso
    WHERE fiz_kategoria.kategoria=2
    GROUP BY oazon
    HAVING count(*)=2);

6. feladat

Vigyünk fel egy Kovács nevű dolgozót a 10-es osztályra, a következő értékekkel:

  • dkod = 1
  • dnev = 'Kovacs'
  • oazon = 10
  • belepes = aktuális dátum
  • fizetes = 10-es osztály átlagfizetése
  • többi oszlop legyen NULL
INSERT INTO dolgozo2 (dkod, dnev, oazon, belepes, fizetes) VALUES (
    1, 
    'Kovacs',
    10,
    SYSDATE,
    (SELECT AVG(fizetes) FROM dolgozo2 WHERE oazon = 10)
);

7. feladat

Növeljük meg a 20-as osztály fizetését 20%-al

UPDATE dolgozo2 SET fizetes=fizetes * 1.2 WHERE oazon=20;

8. feladat

Növeljük meg azok fizetését 500-al, akiknek a jutaléka NULL, vagy a fizetésük kisebb az átlagnál

UPDATE dolgozo2
 SET fizetes=fizetes+500
 WHERE
   jutalek IS NULL OR
   fizetes < (SELECT AVG(fizetes) FROM dolgozo2);