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?
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 )
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 )
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:
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łą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 )
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?
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 )
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 )
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' )
Podnieś wynagrodzenie wszystkich pracowników o 10%
UPDATE employees SET salary=salary+salary*0.1
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)
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.
Usuń z tabeli employee_archive wpisy wszystkich pracowników zatrudnionych w kanadzie
brak rozwiązania
Przenieś wszystkich pracowników bez managera przenieś do działu Sales
UPDATE employees SET manager_id = 145 WHERE manager_id IS NULL