sqlplusNowy.txt

(10 KB) Pobierz
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...
Zgłoś jeśli naruszono regulamin