Środowisko pracy 1. Baza danych: Oracle 12c - Serwer ELARA - Konta studenckie, dostęp także spoza uczelni - Konfiguracja: https://e.piotrowska.po.opole.pl/index.php?option=conf 2. Środowisko: SQL Developer - darmowe - do pobrania ze strony Oracle http://www.oracle.com/technetwork/developertools/sql-developer/overview/index.html ) - można wykorzystywać do różnych baz (nie tylko do Oracle ) 3. Uruchomienie programu (napisany w Java, nie wymaga instalacji) 4. Tworzymy połączenie z bazą danych
Widok Connections po utworzeniu połączenia Obszar roboczy
Pierwsze polecenie Zmieniamy hasło: ALTER USER s12345 IDENTIFIED BY nowe_haslo; Utworzenie relacyjnej bazy danych do ewidencji pracowników uczelni. 1.1. Definiowanie tabel Zdefiniowano tabele zesp, etaty, prac o schematach przedstawionych poniżej. Zdefiniowano również odpowiednie ograniczenia integralnościowe. Na ich podstawie utworzone będą tabele. zesp etaty prac id_zespoly Number(2) Klucz podstawowy nazwa Varchar2(20) Atrybut obowiązkowy miasto Varchar2(20) Atrybut obowiązkowy kod_pocztowy Varchar2(6) ulica Varchar2(20) nr_budynku Varchar2(10) nazwa Varchar2(10) Klucz podstawowy placa_min Number(6,2) Atrybut obowiązkowy, wartość >0 placa_max Number(6,2) id_prac Number(4) Klucz podstawowy nazwisko Varchar2(15) Atrybut obowiązkowy imie Varchar2(15) Atrybut obowiązkowy id_etaty Varchar2(10) Referencja do atrybutu nazwa tabeli etat id_szefa Number(4) Referencja do atrybutu id_prac tabeli prac data_zatrudnienia Date placa_podstawowa Number(6,2) wartość większa od 100 placa_dodatkowa Number(6,2) domyślna wartość 0 id_zesp Number(2) Referencja do atrybutu id_zesp tabeli zesp
1.2. Utworzenie tabel zesp, etaty, prac CREATE TABLE zesp( id_zesp NUMBER(2) CONSTRAINT pk_zesp PRIMARY KEY, nazwa VARCHAR2(20) NOT NULL, miasto VARCHAR2(20), kod_pocztowy VARCHAR2(6), ulica VARCHAR2(20), nr_budynku VARCHAR2(10) ); CREATE TABLE etaty ( nazwa VARCHAR2(10) CONSTRAINT pk_etaty PRIMARY KEY, placa_min NUMBER(6,2) CHECK (placa_min>0), placa_max NUMBER(6,2) ); CREATE TABLE prac( id_prac NUMBER(4) CONSTRAINT pk_prac PRIMARY KEY, nazwisko VARCHAR2(15) NOT NULL, imie VARCHAR2(15) NOT NULL, id_etaty VARCHAR2(10) CONSTRAINT fk_etaty REFERENCES etaty(nazwa), id_szefa NUMBER(4) CONSTRAINT fk_prac REFERENCES prac(id_prac), data_zatrudnienia DATE, placa_podstawowa NUMBER(6,2) CONSTRAINT min_placa_pod CHECK(placa_podstawowa>100), placa_dodatkowa NUMBER(6,2) DEFAULT 0, id_zesp NUMBER(2) CONSTRAINT fk_zepsoly REFERENCES zesp(id_zesp)
); 1.3. Sprawdzenie struktury utworzonych tabel DESC nazwa_tabeli; 1.4. Wstawienie wartości do tabeli zesp VALUES (10,'ADMINISTRACJA', 'OPOLE','45-111','MIKOLAJCZYKA','5'); VALUES (20,'INFORMATYKA', 'OPOLE','45-222','SOSNKOWSKIEGO','31'); VALUES (30,'BUDOWNICTWO', 'OPOLE','45-333','KATOWICKA','14'); VALUES (40,'AUTOMATYKA', 'OPOLE','45-222','SOSNKOWSKIEGO','31'); VALUES (50,'ELEKTROTECHNIKA', 'OPOLE','45-111','LUBOSZYCKA','9'); 1.5. Utworzenie kopii tabeli ZESP CREATE TABLE zesp_kopia AS SELECT * FROM zesp; 1.6. Zmiana nazwy tabeli ZESP_KOPIA na ZESP_BIS RENAME zesp_kopia TO zesp_bis; 1.7. Utworzenie kopii tabeli zesp zawierającej tylko kolumny id_zesp i nazwa CREATE TABLE zesp_kopia AS SELECT id_zesp, nazwa FROM zesp; 1.8. Dodanie kolumny miasto do tabeli zesp_kopia ALTER TABLE zesp_kopia ADD (miasto VARCHAR2(10)); 1.9. Zmiana formatu kolumny miasto w tabeli ZESP_KOPIA na 20-znakowy ALTER TABLE zesp MODIFY (miasto VARCHAR(20)); ALTER TABLE ZESP_BIS MODIFY (miasto VARCHAR(3)); Uwaga! Wewnętrzne zabezpieczenia bazy nie pozwalają na przedefiniowanie kolumn jeżeli jest to sprzeczne ze strukturą wprowadzonych już danych. 1.10. Usunięcie wszystkich wierszy z tabeli ZESP_KOPIA DELETE FROM ZESP_KOPIA; (odwracalne poleceniem ROLLBACK) lub TRUNCATE TABLE ZESP_KOPIA; (nieodwracalne) 1.11. Usunięcie tabeli ZESP_BIS
DROP TABLE ZESP_BIS; Uwaga! Usunięcie nieodwracalne 1.12. Skrypt wstawiający wartości do tabeli etaty INSERT INTO etaty VALUES ('PROFESOR',2800.00, 4500.00); INSERT INTO etaty VALUES ('ADIUNKT',1510.00, 2750.00); INSERT INTO etaty VALUES ('ASYSTENT',1300.00, 1500.00); INSERT INTO etaty VALUES ('STAZYSTA',650.00, 1250.00); INSERT INTO etaty VALUES ('SEKRETARKA',970.00, 1450.00); INSERT INTO etaty VALUES ('DYREKTOR',2280.00, 3100.00); 1.13. Skrypt wstawiający wartości do tabeli PRAC: VALUES (100,'ABACKI', 'ABAK','DYREKTOR', NULL,to_date('01-01-68','DD-MM- RR'),2730.00,420.50,10); VALUES (110,'BABECKI', 'BABAK','PROFESOR',100,to_date('01-05-73','DD-MM- RR'),3350.00,210.00,40); VALUES (120,'CABCKI', 'CABAK','PROFESOR',100,to_date('01-09-77','DD-MM- RR'),3070.00, NULL,30); VALUES (130,'DABACKI', 'DABAK','PROFESOR',100,to_date('01-07-68','DD-MM-RR'), 2960.00, NULL,20); VALUES (140,'EBACKI', 'EBAK','PROFESOR',130,to_date('15-09-75','DD-MM-RR'), 2830.00,105.00,20); VALUES (150,'FABACKI', 'FABAK','ADIUNKT' 1645.50, NULL,20); VALUES (160,'GABACKI', 'GABAK','ADIUNKT' 1590.00, NULL,20);,130,to_date('01-09-77','DD-MM-RR'),,130,to_date('01-03-85','DD-MM-RR'), VALUES (170,'HABACKI', 'HABAK','ASYSTENT',130,to_date('01-10-92','DD-MM-RR'), 1439.70, 80.50,20); VALUES (190,'IBACKI', 'IBAK','ASYSTENT',140,to_date('01-09-93','DD-MM-RR'), 1371.00, NULL,20); VALUES (180,'JOTBACKA', 'TABA','SEKRETARKA',100,to_date('20-02-85','DD-MM-RR'), 1410.20, NULL,10); VALUES (200,'KABACKI', 'KABAK','STAZYSTA',140,to_date('15-07-94','DD-MM-RR'), 1208.00, NULL,30);
VALUES (210,'LABACKI', 'LABAK','STAZYSTA',130,to_date('15-10-93','DD-MM-RR'), 1250.00,170.60,30); VALUES (220,'MABACKI', 'MABAK','ASYSTENT',110,to_date('01-10-93','DD-MM-RR'), 1480.00, NULL,20); VALUES (230,'NABACKI', 'NABAK','ASYSTENT',120,to_date('01-09-92','DD-MM-RR'), 1480.00, 90.00,30); Przeglądanie zawartości tabel - polecenie SELECT Polecenie SELECT składa się zawsze ze słów kluczowych SELECT oraz FROM. 2.1. Wyświetlenie wszystkich wierszy z tabeli ZESP: SELECT * FROM zesp; 2.2. Wyświetlenie wierszy z tabeli PRAC posortowanych wg daty zatrudnienia SELECT * FROM prac ORDER BY data_zatrudnienia; 2.3. Wyświetlenie: posortowane nazwiska, etaty i roczne dochody pracowników (opatrzone nagłówkiem "ROCZNY_ DOCHOD"): SELECT nazwisko, id_etaty, placa_podstawowa*12 roczny_dochod FROM prac ORDER BY nazwisko; Uwaga: Jeśli nagłówek kolumny zawiera w nazwie spację, to musi być ujęty w cudzysłów. Ponadto polecenie SELECT może zawierać klauzule: - WHERE - warunek wyboru wierszy W klauzuli WHERE mogą wystąpić: a) operatory relacji: =, < >, >, >=, <, <=, np. SELECT * FROM ZESP WHERE ID_ZESP<40; b) operatory specjalne: LIKE - określenie wartości dla warunku IN - wskazanie zbioru wartości dla warunku BETWEEN... AND - wskazanie zakresu wartości dla warunku IS NULL SELECT * FROM ETATY WHERE PLACA_MIN IN (1000, 2000, 3000); SELECT NAZWISKO FROM PRAC WHERE PLACA_PODSTAWOWA BETWEEN 2000 AND 3000; SELECT * FROM PRAC WHERE PLACA_DODATKOWA IS NULL; Uwaga 1: powyższe operatory mogą być negowane operatorem NOT np. SELECT * FROM PRAC WHERE PLACA_DODATKOWA IS NOT NULL; Uwaga 2: znak % zastępuje sekwencję znaków, a podkreślenie "_" pojedynczy znak.
np. SELECT * FROM ZESP WHERE ULICA LIKE '_OS%'; c) operatory logiczne: AND, OR, NOT np. SELECT * FROM PRAC WHERE placa_podstawowa>1500 AND (id_etaty='asystent' OR id_etaty='sekretarka'); - DISTINCT - wyszukanie wierszy nie powtarzających się np. SELECT DISTINCT ULICA FROM ZESP; - ORDER BY - porządkowanie alfabetyczne (domyślnie rosnąco) np. SELECT * FROM PRAC ORDER BY NAZWISKO desc; Uwaga 3: - asc oznacza porządek rosnący, desc - porządek malejący; - klauzula ORDER BY wystąpić może tylko jako ostatnia; - można wskazywać więcej niż jedną kolumnę w klauzuli ORDER BY, wskazaniem kolumny może być jej nazwa lub jej numer kolejny. - GROUP BY - grupuje wiersze o tej samej wartości wyszczególnionych kolumn. Po podziale, do każdej grupy można stosować tzw. funkcje grupowe np. count(*) - zliczającą ilości wystąpień, sum(a) - obliczenie sumy wartości kolumny a np. SELECT ID_ZESP, count(*) FROM PRAC GROUP BY ID_ZESP; - HAVING - umożliwia wybór informacji, dotyczących utworzonych grup np. SELECT ID_ZESP, sum (PLACA_POD) FROM PRAC GROUP BY ID_ZESP HAVING count(*) >3; Zadania 1. Połącz się z bazą danych 2. Zmień swoje hasło 3. Wykonaj wszystkie polecenia w celu utworzenia bazy danych