tworzenie tabel CREATE TABLE autor1_s (id_autora NUMBER(20), imie VARCHAR(20), nazwisko VARCHAR(20)); CREATE TABLE ksiaszka_s (id_ksiaszki NUMBER(20), tytul VARCHAR(20), cena NUMBER(10,2) ,liczba NUMBER(4)); CREATE TABLE ksiaszka_szczeguly_s (id_aksiaszki NUMBER(20), isbn VARCHAR(20), data_wydania DATE , oprawa VARCHAR(10)); CREATE TABLE autor_ksiaszka_s (id_autora NUMBER(20),id_ksiaszki NUMBER(20) ); CREATE TABLE ksiaszka_szczeguly_s (id_aksiaszki NUMBER(20), isbn VARCHAR(20), data_wydania DATE default '99-12-02', oprawa VARCHAR(10)); na?o?enie kluczy g??wnych ALTER TABLE autor1_s ADD CONSTRAINT kg_1 PRIMARY KEY (id_autora); ALTER TABLE ksiaszka_s ADD CONSTRAINT kg_2 PRIMARY KEY (id_ksiaszki); ALTER TABLE ksiaszka_szczeguly_s ADD CONSTRAINT kg_3 PRIMARY KEY (id_aksiaszki); ALTER TABLE autor_ksiaszka_s ADD CONSTRAINT kg_4 PRIMARY KEY (id_autora, id_ksiaszki); ustawienie kluczy obcych ALTER TABLE autor_ksiaszka_s ADD CONSTRAINT kg_11 FOREIGN KEY (id_autora) REFERENCES autor1_s(id_autora); ALTER TABLE autor_ksiaszka_s ADD CONSTRAINT kg_12 FOREIGN KEY (id_ksiaszki) REFERENCES ksiaszka_s(id_ksiaszki); zakres danej kolumny ALTER TABLE ksiaszka_s ADD CONSTRAINT kg_31 CHECK (cena>0); ALTER TABLE autor1_s ADD CONSTRAINT kg_32 CHECK (imie IS NOT NULL OR nazwisko IS NOTSELE NULL); ALTER TABLE ksiaszka_szczeguly_s ADD CONSTRAINT kg_33 CHECK (oprawa ='miekka' OR oprawa = 'twarda'); ALTER TABLE autor1_s ADD CONSTRAINT kg_32 CHECK (imie IS NOT NULL); ALTER TABLE autor1_s ADD CONSTRAINT kg_34 CHECK (nazwisko IS NOT NULL); ALTER TABLE ksiaszka_opis_s ADD CONSTRAINT kg_33 CHECK (oprawa ='miekka' OR oprawa = 'twarda' OR oprawa = 'skora'); usumni?cie ograniczenia ALTER TABLE autor1_s DROP CONSTRAINT kg_32; ALTER TABLE ksiaszka_opis_s DROP CONSTRAINT kg_33; zmiana nzwy tabeli ALTER TABLE ksiaszka_szczeguly_s RENAME TO ksiaszka_opis_s; zmiana nazwy tabeli ALTER TABLE ksiaszka_s RENAME COLUMN liczba TO liczba_egzemplarzy; zmiana typu kolumny ALTER TABLE autor1_s MODIFY (imie VARCHAR(16)); ALTER TABLE ksiaszka_opis_s MODIFY (ISBN NUMBER(20)); usuwanie ograniczenia ALTER TABLE ksiaszka_s DROP CONSTRAINT kg_31; dodawanie kolumny ALTER TABLE ksiaszka_s ADD wydawca VARCHAR(20); usuwanie kolumny ALTER TABLE ksiaszka_s DROP COLUMN wydawca; ===================================================2================================================== pokazywanie co posiadamy w tabeli SELECT * from autor1_s ; SELECT CENA, ((CENA*0.1)+CENA) FROM ksiaszka_s; SELECT imie, nazwisko FROM pracownik_personalia ORDER BY nazwisko, imie DESC; SELECT imie, nazwisko, nip FROM pracownik_personalia WHERE nazwisko LIKE '%ski' AND nip>1500000000 AND nip<1600000000 SELECT id_pracownika, pensja+premia Zarobki FROM pracownik; SELECT imie, nazwisko, stanowisko,NVL(premia,0) FROM pracownik_personalia, pracownik WHERE premia is not null AND pracownik_personalia.id_pracownika=pracownik.id_pracownika; SELECT imie, nazwisko, stanowisko,NVL(premia,0) FROM pracownik_personalia, pracownik WHERE pracownik_personalia.id_pracownika=pracownik.id_pracownika AND premia is null; SELECT imie, nazwisko, stanowisko,NVL(premia,0) FROM pracownik_personalia, pracownik WHERE pracownik_personalia.id_pracownika=pracownik.id_pracownika; SELECT imie, nazwisko, stanowisko,NVL(premia,0) FROM pracownik_personalia A, pracownik B WHERE A.id_pracownika=B.id_pracownika; SELECT id_pracownika, pensja, id_przedzialu, dolna_granica, gorna_granica FROM pracownik, przedzial_zarobkow WHERE (pensja<=gorna_granica AND pensja>=dolna_granica) AND (id_przedzialu=1 OR id_przedzialu=2); SELECT id_pracownika, pensja, id_przedzialu, dolna_granica, gorna_granica FROM pracownik, przedzial_zarobkow WHERE pensja between dolna_granica AND gorna_granica AND (id_przedzialu=1 OR id_przedzialu=2); SELECT id_pracownika, pensja, id_przedzialu, dolna_granica, gorna_granica FROM pracownik, przedzial_zarobkow WHERE pensja between dolna_granica AND gorna_granica AND id_przedzialu in (1,2); SELECT imie, nazwisko, pensja FROM pracownik A, przedzial_zarobkow, pracownik_personalia B WHERE (A.id_pracownika=B.id_pracownika) AND (pensja between dolna_granica AND gorna_granica) AND id_przedzialu in (1,2); *** Ci?g znak?w: 'xyz' Alias: "xyz", " " ??czenie ci?g?w znak?w: || ??czenie p?l: , SELECT 'Pracownik '|| imie as Zarobki, nazwisko || ' jest zatrudniony na stanowisku ' || stanowisko as Zarobki FROM Pracownik, Pracownik_personalia; SELECT 'Pracownik '|| imie as " ", nazwisko || ' jest zatrudniony na stanowisku ' || stanowisko as " " FROM Pracownik, Pracownik_personalia; SELECT DISTINCT 'Pracownik '|| CONCAT(UPPER(imie), CONCAT(' ',UPPER(nazwisko))) || ' jest zatrudniony na stanowisku ' || INITCAP(stanowisko) || '.' as " " FROM Pracownik, Pracownik_personalia; SELECT DISTINCT 'Pracownik ' || imie as " ", nazwisko || ' pracuje w dziale ' || SUBSTR(UPPER(REPLACE(nazwa, 'Ksiegowosc', 'ksig')), 0, 4) || '.' as " " FROM Pracownik_personalia, Pracownik PR, Dzial DZ WHERE PR.id_dzialu=DZ.id_dzialu; SELECT DISTINCT imie as "Imie", nazwisko as "Nazwisko" FROM Pracownik_personalia PR ORDER BY Length(PR.nazwisko); SELECT DISTINCT imie,nazwisko, pensja, data_zatrudnienia, nazwa as "Nazwa dzialu" FROM Pracownik_personalia PPR, Pracownik PR, Dzial DZ WHERE PR.id_dzialu=DZ.id_dzialu and PPR.nazwisko=INITCAP(LOWER('Wojtowicz')); SELECT DISTINCT imie,nazwisko, pensja, data_zatrudnienia, nazwa as "Nazwa dzialu" FROM Pracownik_personalia PPR, Pracownik PR, Dzial DZ WHERE PR.id_dzialu=DZ.id_dzialu and PPR.nazwisko=INITCAP(LOWER('&Podaj_nazwisko')); SELECT DISTINCT nazwisko,imie, TO_CHAR(data_zatrudnienia, 'DAY') FROM Pracownik PR , Pracownik_personalia PPR WHERE PR.id_pracownika=PPR.id_pracownika ORDER BY nazwisko; SELECT DISTINCT nazwisko,imie, TO_CHAR(data_zatrudnienia, 'DD MONTH YYYY HH24:MI:SS') FROM Pracownik PR , Pracownik_personalia PPR WHERE PR.id_pracownika=PPR.id_pracownika ORDER BY nazwisko; SELECT imie, nazwisko, nip FROM Pracownik_personalia WHERE SUBSTR(nip, 0, 2)=15; SELECT P1.id_pracownika as "idPrac", P2.id_przelozonego as "idPrzel" , P1.data_zatrudnienia-P2.data_zatrudnienia as "roznDat" FROM Pracownik P1, Pracownik P2 WHERE P1.id_przelozonego=P2.id_pracownika; SELECT P1.id_pracownika as "idPrac", P2.id_przelozonego as "idPrzel" , FLOOR(MONTHS_BETWEEN(P1.data_zatrudnienia, P2.data_zatrudnienia)) as "roznDat" FROM Pracownik P1, Pracownik P2 WHERE P1.id_przelozonego=P2.id_pracownika; SELECT P1.id_pracownika as "idPrac", P2.id_przelozonego as "idPrzel" , FLOOR(MONTHS_BETWEEN(P1.data_zatrudnienia, P2.data_zatrudnienia)/12) as "roznDat" FROM Pracownik P1, Pracownik P2 WHERE P1.id_przelozonego=P2.id_pracownika; SELECT P1.id_pracownika as "idPrac", P2.id_przelozonego as "idPrzel" , ROUND(MONTHS_BETWEEN(P1.data_zatrudnienia, P2.data_zatrudnienia)/12, 2) as "roznDat" FROM Pracownik P1, Pracownik P2 WHERE P1.id_przelozonego=P2.id_pracownika; SELECT M1.nazwisko as "idPrac", M2.nazwisko as "idPrzel" , ROUND(MONTHS_BETWEEN(P1.data_zatrudnienia, P2.data_zatrudnienia)/12, 2) as "roznDat" FROM Pracownik P1, Pracownik P2, Pracownik_personalia M1, Pracownik_personalia M2 WHERE P1.id_przelozonego=P2.id_pracownika and M1.id_pracownika=P1.id_pracownika and M2.id_pracownika=P2.id_pracownika; SELECT id_pracownika, pensja as "Stara pensja", CASE WHEN (pensja<=2500) THEN 1.2*pensja WHEN (pensja<=3500) THEN 1.1*pensja ELSE 1.05*pensja END as "Nowa pensja" FROM Pracownik ORDER BY pensja; *** FUNKCJE GRUPUJ?CE *** SELECT COUNT(*) FROM Pracownik; SELECT COUNT(premia) FROM Pracownik; // Liczba pracownik?w dla kt?rych premia != NULL // Wy?wietla ?redni? pensj? dla ka?dego ze stanowisko SELECT stanowisko, AVG(pensja) FROM Pracownik GROUP BY stanowisko; SELECT stanowisko, ROUND(AVG(pensja)) FROM Pracownik GROUP BY stanowisko ORDER BY AVG(pensja) DESC; SELECT stanowisko, ROUND(AVG(pensja)) as Srednia_pensja FROM Pracownik GROUP BY stanowisko ORDER BY Srednia_pensja DESC; // wyb?r konkretnego pola z typu rekordowego SELECT KL.adres.miejscowosc FROM Klient KL; SELECT KL.adres.miejscowosc, COUNT(*) as "Liczba klient?w" FROM Klient KL GROUP BY KL.adres.miejscowosc ORDER BY "Liczba klient?w"; // Poda? nazwisko pracownika i liczb? numer?w jego telefon?w. !!!!!!!!!!! SELECT nazwisko, COUNT(TPP.column_value) FROM Pracownik_personalia PP, TABLE(PP.telefon) TPP GROUP BY id_pracownika, nazwisko; // Poda? r??nic? pomi?dzy maksymaln? i minimaln? pensj? w dziale SPRZEDAZ. Wypisa? r?wnie? nazw? dzia?u. SELECT nazwa, MAX(pensja)-MIN(pensja) FROM Pracownik PR, Dzial DZ WHERE PR.id_dzialu=DZ.id_dzialu and DZ.nazwa='Sprzedaz' GROUP BY DZ.nazwa; // to wa?ne !! // Zmiany (?) SELECT nazwa, COUNT(PR.id_pracownika) FROM Pracownik PR, Dzial DZ WHERE PR.id_dzialu=DZ.id_dzialu GROUP BY DZ.id_dzialu, DZ.nazwa; *** *** wstawienie dotabeli uzupe?nien INSERT INTO autor1_s VALUES (1,'ADAM','MICKIEWICZ'); INSERT INTO autor1_s VALUES (2,'Hendryk','Sienkiewicz'); INSERT INTO ksiaszka_s VALUES (1, 'Potop', 53.50, 24); INSERT INTO ksiaszka_s VALUES (2, 'Pan Tadeusz', NULL, 10); INSERT INTO ksiaszka_s VALUES (3, 'Trylogia', 1150.00, 15); INSERT INTO ksiaszka_s VALUES (4, 'Ballady i romanse', 27.60, NULL); INSERT INTO ksiaszka_s VALUES (5, 'NULL', 15.90, 30); INSERT INTO ksiaszka_opis_s VALUES (1,0123456789,'10/05/23','twarda'); INSERT INTO ksiaszka_opis_s VALUES (2,0123456788,'10/05/02','miakka'); INSERT INTO ksiaszka_opis_s VALUES (3,0123456787,'09/01/12','skora'); INSERT INTO ksiaszka_opis_s VALUES (4,NULL,'07/03/12',NULL); INSERT INTO ksiaszka_opis_s VALUES (5,0123456786,NULL,'twarda'); INSERT INTO autor_ksiaszka_s VALUES (1,3); INSERT INTO autor_ksiaszka_s VALUES (1,5); INSERT INTO autor_ksiaszka_s VALUES (2,2); INSERT INTO autor_ksiaszka_s...
mikdor