SQL 6 - DML

WTF is DML? :-?

INSERT INTO historia
value (3,'Jan','Kowalski',NULL,'1/1/98')

Albo tak - teraz kolejność nie musi mieć znaczenia!

INSERT INTO historia (id,imie,nazwisko,DATA)
value (3,'Jan','Kowalski','1/1/98')

albo wstawiamy coś z innej tabeli!

INSERT INTO historia (id,imie,nazwisko,DATA)
SELECT employee_id,first_name,last_name,hire_date
FROM employees

aktualizacje! Zmieńmy wszystkim ID na piątkę!

UPDATE historia SET id=5

Ale wszystkim to niezbyt dobry pomysł, może wybierzmy tylko niektórych

UPDATE historia SET id=5 WHERE nazwisko LIKE 'b%'

Kasowanie! Skasujmy teraz wybrane rekordy

DELETE FROM historia WHERE imie='Adam'

Podzapytania?

1

Wstaw do tabeli employees pracownika o id 300 z tabeli danych. UŜyj komendy SQL nie precyzując pól w klauzuli INSERT.

INSERT INTO employees
  VALUES(
    300,              -- id pracownika
    'Jan',            -- imiê 
    'Kowalski',       -- nazwisko
    'nowak@tlen.pl',  -- email
    NULL,             -- nr telefonu
    '95/5/5',      -- data zatrudnienia
    'FI_MGR',         -- id stanowiska pracy
    1000,             -- zarobki
    NULL,             -- commision pct
    NULL,             -- mened¿er id
    30                -- department id
  )

2

Wstaw do tabeli employees pracownika o id 301 z tabeli danych. UŜyj komendy SQL wskazując jawnie pola w klauzuli INSERT.

INSERT INTO
  employees(employee_id,first_name,last_name,email,hire_date,job_id,salary,department_id)
  VALUES(
    301,                 -- id pracownika
    'Joanna',            -- imię 
    'Woźniak',           -- nazwisko
    'JW@post.pl',        -- email
    '91/1/1',            -- data zatrudnienia
    'PU_MAN',            -- id stanowiska pracy
    1500,                -- zarobki
    30                   -- department id
  )

3

Wstaw do tabeli employees pracowników 100,500,501,502 z tabeli danych. W przypadku wystąpienia błędów podczas dodawania rekordów, skorygować wstawiane dane tak, aby wszystkie rekordy zostały dodane poprawnie.

Wstawiamy osobno:

a

Błąd:

SQL Error: ORA-00001: unique constraint (HR.EMP_EMP_ID_PK) violated
00001. 00000 -  "unique constraint (%s.%s) violated"

Powód: już istnieje pracownik o ID 100. Musimy więc wymyślić inne ID.

INSERT INTO
  employees(employee_id,first_name,last_name,email,hire_date,job_id,salary,department_id)
  VALUES(
    1337,                -- id pracownika
    'Anna',              -- imię 
    'Kot',               -- nazwisko
    'kot@post.pl',       -- email
    '00/12/4',           -- data zatrudnienia
    'FI_ACCOUNT',        -- id stanowiska pracy
    2000,                -- zarobki
    40                   -- department id
  )
b

Błąd:

SQL Error: ORA-01400: cannot insert NULL into ("HR"."EMPLOYEES"."EMAIL")
01400. 00000 -  "cannot insert NULL into (%s)"

Powód: Pole email nie może być puste (ma nullable ustawione na no) - wymyślmy więc e-mail dla pani Kasi.

INSERT INTO
  employees(employee_id,first_name,last_name,email,hire_date,job_id,salary,department_id)
  VALUES(
    500,                 -- id pracownika
    'Katarzyna',         -- imię 
    'Wróbel',            -- nazwisko
    'kawro@post.pl',     -- email
    '97/11/12',          -- data zatrudnienia
    'SA_MAN',            -- id stanowiska pracy
    NULL,                -- zarobki
    NULL                 -- department id
  )
c

Błąd:

SQL Error: ORA-01400: cannot insert NULL into ("HR"."EMPLOYEES"."HIRE_DATE")
01400. 00000 -  "cannot insert NULL into (%s)"

Powód: Tym razem problemem jest HIRE_DATE i JOB_ID (o drugim dowiemy się, jeśli poprawimy tyklo HIRE_DATE i spróbujemy takie coś dodać do bazy). Wymyślmy więc jakąś datę i weźmy jakieś istniejące stanowisko. Swoją drogą, czy ten człowiek w ogóle pracuje w tej firmie? 8-O

INSERT INTO
  employees(employee_id,first_name,last_name,email,hire_date,job_id,salary,department_id)
  VALUES(
    501,                 -- id pracownika
    'Adam',              -- imię
    'Kowalski',          -- nazwisko
    'kowal@gmail.com',   -- email
    '12/3/4',            -- data zatrudnienia
    'SA_MAN',            -- id stanowiska pracy
    NULL,                -- zarobki
    NULL                 -- department id
  )
d

Błąd:

SQL Error: ORA-02291: integrity constraint (HR.EMP_JOB_FK) violated - parent key not found
02291. 00000 - "integrity constraint (%s.%s) violated - parent key not found"

Powód: Próbujemy dodać człowieka pracującego na stanowisku nieopisanym w tabeli Jobs. Dodajmy więc takie stanowisko do bazy.

INSERT INTO
  jobs(job_id,job_title)
  VALUES('AD_VIP','Very Important Person')

Teraz pojawi się inny błąd:

SQL Error: ORA-02291: integrity constraint (HR.EMP_DEPT_FK) violated - parent key not found
02291. 00000 - "integrity constraint (%s.%s) violated - parent key not found"

Zmieńmy więc Department ID na inny, istniejący w tabeli Departments i będzie elegancko.

INSERT INTO
  employees(employee_id,first_name,last_name,email,hire_date,job_id,salary,department_id)
  VALUES(
    505,                 -- id pracownika
    'Zdzislaw',              -- imiê 
    'Buba',               -- nazwisko
    'zb@post.pl',       -- email
    '98/03/13',           -- data zatrudnienia
    'AD_VIP',        -- id stanowiska pracy
    2400,                -- zarobki
    10                   -- department id
  )

4

Wypełnij tabelę employee_archive danymi pracowników zatrudnionych w Kanadzie i Danii. Dane pobrać z tabeli employee.

INSERT INTO employee_archive
SELECT
  e.employee_id,
  e.first_name,
  e.last_name,
  e.salary,
  e.department_id
FROM 
  employees e,
  departments d,
  locations l,
  countries co
WHERE
  e.department_id = d.department_id AND
  d.location_id = l.location_id AND
  l.country_id = co.country_id AND
  (
    co.country_name = 'Canada' OR
    co.country_name = 'Denmark'
  )

5

Podnieś wynagrodzenie wszystkich pracowników o 10%

UPDATE employees
SET salary=salary+salary*0.1

6

Dodaj wartość 0,1 do wartości COMMISSION_PCT (tabela employees). Uwaga na wartości null.

UPDATE employees
SET commission_pct=nvl(commission_pct+0.1,NULL)

7

Usuń z tabeli departments departament o id 30 i 60

DELETE FROM departments
WHERE
  department_id = 30
  OR department_id = 60

Pojawia się błąd:

SQL Error: ORA-02292: integrity constraint (HR.EMP_DEPT_FK) violated - child record found
02292. 00000 - "integrity constraint (%s.%s) violated - child record found"

Żeby jemu zaradzić trzebaby pół tabeli wywalić, więc lepiej zostawmy wszystko tak, jak jest.

8

Usuń z tabeli employee_archive wpisy wszystkich pracowników zatrudnionych w kanadzie

brak rozwiązania

9

Przenieś wszystkich pracowników bez managera przenieś do działu Sales

UPDATE employees
SET manager_id = 145
WHERE manager_id IS NULL
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki