Bazy danych
Tematyka zajęć:
- Przykładowa baza KURS v.2.1
- Operatory UNION, INTERSECT i EXCEPT
- Operator porównania CASE
- Polecenie WITH
- Widok (perspektywa) w bazie relacyjnej
Tematyka zajęć:
id_uczestnik | int | PRIMARY KEY | Klucz główny |
imie | varchar(30) | NOT NULL | |
nazwisko | varchar(30) | NOT NULL | |
telefon | char(12) | NOT NULL |
id_wykladowca | int | PRIMARY KEY | Klucz główny |
imie | varchar(30) | NOT NULL | |
nazwisko | varchar(30) | NOT NULL | |
telefon | char(12) | ||
varchar(30) |
id_nazwa | int | PRIMARY KEY | Klucz główny |
nazwa | varchar(30) | Nazwa kursu |
id_kurs | int | PRIMARY KEY | Klucz główny |
termin | varchar(30) | NOT NULL | |
id_nazwa | int | FOREIGN KEY | Klucz obcy do tabeli KURS_NAZWA |
id_uczest | int | FOREIGN KEY | Klucz obcy do tabeli uczestnik |
id_kurs | int | FOREIGN KEY | Klucz obcy do tabeli kurs |
ocena | Nymeric(5,1) | ||
oplata | Numeric(10,2) |
id_wykl | int | FOREIGN KEY | Klucz obcy do tabeli uczestnik |
id_kurs | int | FOREIGN KEY | Klucz obcy do tabeli kurs |
--============================================================================== -- Cwiczenie 07 - jezyk DDL - baza danych KURS v.2.1 --============================================================================== -- ***************************************************************************** -- -- Przygotawanie schematu kurs2 CREATE SCHEMA kurs2 ; -- -- Przygotowanie tabeli kurs2.UCZESTNIK create table kurs2.uczestnik ( id_uczestnik int, nazwisko varchar(30), imie varchar(30), telefon char(12), CONSTRAINT PK_uczestnik PRIMARY KEY ( id_uczestnik ) ) ; -- -- Przygotowanie tabeli kurs2.WYKLADOWCA create table kurs2.wykladowca ( id_wykladowca int, nazwisko varchar(30), imie varchar(30), telefon char(12), email varchar(20), CONSTRAINT PK_wykladowca PRIMARY KEY ( id_wykladowca ) ) ; -- -- Przygotowanie tabeli kurs2.KURS_NAZWA create table kurs2.kurs_nazwa ( id_nazwa int, nazwa varchar(30), CONSTRAINT PK_kurs_nazwa PRIMARY KEY ( id_nazwa ) ) ; -- -- Przygotowanie tabeli KURS create table kurs2.kurs ( id_kurs int, id_nazwa int, termin varchar(30), CONSTRAINT PK_kurs PRIMARY KEY (id_kurs), CONSTRAINT FK_nazwa FOREIGN KEY (id_nazwa) REFERENCES kurs2.kurs_nazwa (id_nazwa) ); -- -- Przygotowanie tabeli kurs2.UCZEST_KURS create table kurs2.uczest_kurs ( id_uczest int, id_kurs int , ocena numeric(5,1), oplata numeric(10,2), CONSTRAINT PK_uczest_kurs PRIMARY KEY (id_uczest, id_kurs), CONSTRAINT FK_kurs FOREIGN KEY (id_kurs) REFERENCES kurs2.kurs (id_kurs), CONSTRAINT FK_uczest FOREIGN KEY(id_uczest) REFERENCES kurs2.uczestnik (id_uczestnik) ) ; -- -- Przygotowanie tabeli kurs2.WYKL_KURS create table kurs2.wykl_kurs ( id_wykl int, id_kurs int, CONSTRAINT PK_wykl_kurs PRIMARY KEY (id_wykl, id_kurs), CONSTRAINT FK_kurs FOREIGN KEY (id_kurs) REFERENCES kurs2.kurs (id_kurs), CONSTRAINT FK_wykl FOREIGN KEY (id_wykl) REFERENCES kurs2.wykladowca (id_wykladowca) ) ; -- -- **********************************************************************************
Skrypt data1.sql ( [listing dokumentu] [link do dokumentu] )
-- wstawienie danych - tabela kurs2.uczestnik insert into kurs2.uczestnik ( id_uczestnik, nazwisko, imie ) values ( 1, 'Flisikowski', 'Jan'), ( 2, 'Olech', 'Andrzej' ), ( 3, 'Płochocki', 'Piotr' ), ( 4, 'Stachyra', 'Krzysztof' ), ( 5, 'Sztuka', 'Stanisław' ), ( 6, 'Sosin', 'Tomasz' ), ( 7, 'Głowala', 'Paweł' ), ( 8, 'Straszewski', 'Józef' ), ( 9, 'Dwojak', 'Marcin' ), (10, 'Kotulski', 'Marek' ), (11, 'Łaski', 'Michał' ), (12, 'Iwanowicz', 'Grzegorz' ), (13, 'Barnaś', 'Jerzy' ), (14, 'Stachera', 'Tadeusz' ), (15, 'Gzik', 'Adam' ), (16, 'Całus', 'Łukasz' ), (17, 'Kołodziejek', 'Zbigniew'), (18, 'Bukowiecki', 'Ryszard' ), (19, 'Sielicki', 'Dariusz' ), (20, 'Radziszewski', 'Henryk'), (21, 'Szcześniak', 'Mariusz' ), (22, 'Nawara', 'Kazimierz' ), (23, 'Kęski', 'Wojciech' ), (24, 'Rafalski', 'Robert' ), (25, 'Hołownia', 'Mateusz' ), (26, 'Niedziałek', 'Marian' ), (27, 'Matuszczak', 'Rafał' ), (28, 'Wolf', 'Jacek' ), (29, 'Kolczyński', 'Janusz' ), (30, 'Chrobok', 'Mirosław' ) ; -- wstawienie danych - tabela kurs2.wykladowca insert into kurs2.wykladowca ( id_wykladowca, imie, nazwisko ) values ( 1, 'Marcin','Szymczak'), ( 2, 'Joanna','Baranowska'), ( 3, 'Maciej','Szczepański'), ( 4, 'Czesław','Wróbel'), ( 5, 'Grażyna','Górska'), ( 6, 'Wanda','Krawczyk'), ( 7, 'Renata','Urbańska'), ( 8, 'Wiesława','Tomaszewska'), ( 9, 'Bożena','Baranowska'), (10, 'Ewelina','Malinowska'), (11, 'Anna','Krajewska'), (12, 'Mieczysław','Zając'), (13, 'Wiesław','Przybylski'), (14, 'Dorota','Tomaszewska'), (15, 'Jerzy','Wróblewski') ; -- wstawienie danych - tabela kurs2.kurs_nazwa insert into kurs2.kurs_nazwa ( id_nazwa, nazwa ) values ( 1, 'Język angielski, stopień 1'), ( 2, 'Język angielski, stopień 2'), ( 3, 'Język angielski, stopień 3'), ( 4, 'Język angielski, stopień 4'), ( 5, 'Język angielski, stopień 5'), ( 6, 'Język niemiecki, stopień 1'), ( 7, 'Język niemiecki, stopień 2'), ( 8, 'Język niemiecki, stopień 3'), ( 9, 'Język niemiecki, stopień 4'), (10, 'Język hiszpański, stopień 1'), (11, 'Język hiszpański, stopień 2'), (12, 'Język hiszpański, stopień 3') ; -- wstawienie danych - tabela kurs insert into kurs2.kurs ( id_kurs, id_nazwa, termin ) values ( 1, 1, '1.01.2017-31.03.2017'), ( 2, 1, '1.01.2017-31.03.2017'), ( 3, 2, '1.04.2017-30.06.2017'), ( 4, 3, '1.08.2017-10.10.2017'), ( 5, 4, '1.11.2017-23.12.2017'), ( 6, 6, '1.01.2017-31.03.2017'), ( 7, 6, '1.01.2017-31.03.2017'), ( 8, 7, '1.04.2017-30.06.2017'), ( 9, 8, '1.07.2017-31.07.2017'), (10, 10, '1.02.2017-31.05.2017'), (11, 11, '1.09.2017-30.11.2017') ; -- wstawienie danych - tabela wykl_kurs - wykladowcy na kursach insert into kurs2.wykl_kurs ( id_kurs, id_wykl ) values ( 1, 1 ), ( 2, 2 ), ( 3, 1 ), ( 4, 1 ), ( 5, 3 ), ( 6, 4 ), ( 7, 5 ), ( 8, 4 ), ( 9, 4 ), (10, 11 ), (11, 11 ) ; -- wstawienie danych - tabela uczest_kurs - uczestnicy na kursach insert into kurs2.uczest_kurs ( id_kurs, id_uczest ) values -- kurs 1 - angielski 1 gr 1 ( 1, 1 ), ( 1, 3 ), ( 1, 5 ), ( 1, 7 ), ( 1, 8 ), ( 1, 10 ), ( 1, 11 ), ( 1, 12 ), -- kurs 2 - angielski 1 gr 2 ( 2, 2 ), ( 2, 16 ), ( 2, 17 ), ( 2, 18 ), ( 2, 20 ), -- kurs 3 - angielski 2 gr 1 ( 3, 1 ), ( 3, 2 ), ( 3, 3 ), ( 3, 5 ), ( 3, 7 ), ( 3, 17 ), ( 3, 18 ), ( 3, 20 ), -- kurs 4 - angielski 3 gr 1 ( 4, 1 ), ( 4, 2 ), ( 4, 3 ), ( 4, 5 ), ( 4, 21 ), ( 4, 22 ), ( 4, 25 ), -- kurs 5 - angielski 4 gr 1 ( 5, 1 ), ( 5, 2 ), ( 5, 3 ), ( 5, 5 ), ( 5, 21 ), ( 5, 22 ), -- kurs 6 - niemiecki 1 gr 1 ( 6, 8 ), ( 6, 9 ), ( 6, 13 ), ( 6, 15 ), ( 6, 19 ), ( 6, 24 ), ( 6, 27 ), -- kurs 7 - niemiecki 1 gr 2 ( 7, 11 ), ( 7, 17 ), ( 7, 18 ), ( 7, 23 ), ( 7, 25 ), ( 7, 28 ), ( 7, 30 ), -- kurs 8 - niemiecki 2 gr 1 ( 8, 8 ), ( 8, 9 ), ( 8, 13 ), ( 8, 15 ), ( 8, 19 ), ( 8, 24 ), ( 8, 27 ), -- kurs 9 - niemiecki 3 gr 1 ( 9, 8 ), ( 9, 9 ), ( 9, 13 ), ( 9, 24 ), ( 9, 27 ), -- kurs 10 - hiszpanski 1 gr 1 (10, 6 ), (10, 16 ), (10, 18 ), (10, 22 ), (10, 24 ), (10, 29 ), (10, 30 ), -- kurs 11 - hiszpanski 2 gr 1 (11, 6 ), (11, 16 ), (11, 18 ), (11, 22 ), (11, 24 ), (11, 29 ), (11, 30 ) ;
Skrypt data2.sql ( [listing dokumentu] [link do dokumentu] )
-- wstawienie danych - tabela kurs2.uczest_kurs - uczestnicy na kursach -- kurs 1 - angielski 1 gr 1 update kurs2.uczest_kurs set ( oplata, ocena ) = ( 500., 3 ) where id_kurs=1 and id_uczest=1; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 500., 4 ) where id_kurs=1 and id_uczest=3; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 500., 5 ) where id_kurs=1 and id_uczest=5; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 500., 3 ) where id_kurs=1 and id_uczest=7; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 500., 4 ) where id_kurs=1 and id_uczest=8; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 500., 4 ) where id_kurs=1 and id_uczest=10; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 500., 5 ) where id_kurs=1 and id_uczest=11; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 500., 3 ) where id_kurs=1 and id_uczest=12; -- kurs 2 - angielski 1 gr 2 update kurs2.uczest_kurs set ( oplata, ocena ) = ( 500., 3 ) where id_kurs=2 and id_uczest=2; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 500., 3 ) where id_kurs=2 and id_uczest=16; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 500., 5 ) where id_kurs=2 and id_uczest=17; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 500., 3 ) where id_kurs=2 and id_uczest=18; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 500., 4 ) where id_kurs=2 and id_uczest=20; -- kurs 3 - angielski 2 gr 1 update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 3 ) where id_kurs=3 and id_uczest=1; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 4 ) where id_kurs=3 and id_uczest=2; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 5 ) where id_kurs=3 and id_uczest=3; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 3 ) where id_kurs=3 and id_uczest=5; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 4 ) where id_kurs=3 and id_uczest=7; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 4 ) where id_kurs=3 and id_uczest=17; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 5 ) where id_kurs=3 and id_uczest=18; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 3 ) where id_kurs=3 and id_uczest=20; -- kurs 4 - angielski 3 gr 1 update kurs2.uczest_kurs set ( oplata, ocena ) = ( 800., 4 ) where id_kurs=4 and id_uczest=1; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 800., 4 ) where id_kurs=4 and id_uczest=2; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 800., 4 ) where id_kurs=4 and id_uczest=3; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 800., 3 ) where id_kurs=4 and id_uczest=5; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 800., 3 ) where id_kurs=4 and id_uczest=21; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 800., 5 ) where id_kurs=4 and id_uczest=22; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 800., 5 ) where id_kurs=4 and id_uczest=25; -- kurs 5 - angielski 4 gr 1 update kurs2.uczest_kurs set ( oplata, ocena ) = ( 850., 4 ) where id_kurs=5 and id_uczest=1; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 850., 4 ) where id_kurs=5 and id_uczest=2; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 850., 4 ) where id_kurs=5 and id_uczest=3; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 850., 3 ) where id_kurs=5 and id_uczest=5; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 850., 3 ) where id_kurs=5 and id_uczest=21; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 850., 5 ) where id_kurs=5 and id_uczest=22; -- kurs 6 - niemiecki 1 gr 1 update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 4 ) where id_kurs=6 and id_uczest=8; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 3 ) where id_kurs=6 and id_uczest=9; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 3 ) where id_kurs=6 and id_uczest=13; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 3 ) where id_kurs=6 and id_uczest=15; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 5 ) where id_kurs=6 and id_uczest=19; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 4 ) where id_kurs=6 and id_uczest=24; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 4 ) where id_kurs=6 and id_uczest=27; -- kurs 7 - niemiecki 1 gr 2 update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 4 ) where id_kurs=7 and id_uczest=11; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 4 ) where id_kurs=7 and id_uczest=17; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 3 ) where id_kurs=7 and id_uczest=18; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 3 ) where id_kurs=7 and id_uczest=23; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 5 ) where id_kurs=7 and id_uczest=25; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 3 ) where id_kurs=7 and id_uczest=28; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 600., 3 ) where id_kurs=7 and id_uczest=30; -- kurs 8 - niemiecki 2 gr 1 update kurs2.uczest_kurs set ( oplata, ocena ) = ( 650., 4 ) where id_kurs=8 and id_uczest=8; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 650., 4 ) where id_kurs=8 and id_uczest=9; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 650., 3 ) where id_kurs=8 and id_uczest=13; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 650., 3 ) where id_kurs=8 and id_uczest=15; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 650., 5 ) where id_kurs=8 and id_uczest=19; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 650., 3 ) where id_kurs=8 and id_uczest=24; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 650., 3 ) where id_kurs=8 and id_uczest=27; -- kurs 9 - niemiecki 3 gr 1 update kurs2.uczest_kurs set ( oplata, ocena ) = ( 800., 4 ) where id_kurs=9 and id_uczest=8; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 800., 4 ) where id_kurs=9 and id_uczest=9; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 800., 4 ) where id_kurs=9 and id_uczest=13; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 800., 5 ) where id_kurs=9 and id_uczest=24; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 800., 5 ) where id_kurs=9 and id_uczest=27; -- kurs 10 - hiszpanski 1 gr 1 update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 4 ) where id_kurs=10 and id_uczest=6; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 4 ) where id_kurs=10 and id_uczest=16; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 4 ) where id_kurs=10 and id_uczest=18; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 4 ) where id_kurs=10 and id_uczest=22; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 5 ) where id_kurs=10 and id_uczest=24; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 3 ) where id_kurs=10 and id_uczest=29; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 700., 3 ) where id_kurs=10 and id_uczest=30; -- kurs 11 - hiszpanski 2 gr 1 update kurs2.uczest_kurs set ( oplata, ocena ) = ( 900., 4 ) where id_kurs=11 and id_uczest=6; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 900., 4 ) where id_kurs=11 and id_uczest=16; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 900., 4 ) where id_kurs=11 and id_uczest=18; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 900., 4 ) where id_kurs=11 and id_uczest=22; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 900., 5 ) where id_kurs=11 and id_uczest=24; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 900., 3 ) where id_kurs=11 and id_uczest=29; update kurs2.uczest_kurs set ( oplata, ocena ) = ( 900., 3 ) where id_kurs=11 and id_uczest=30;
select w.nazwisko as "Nazwisko", w.imie as "Imie", ko.nazwa as "Nazwa kursu", k.termin as "Termin kursu" from kurs2.wykladowca w join kurs2.wykl_kurs wk on w.id_wykladowca = wk.id_wykl join kurs2.kurs k on k.id_kurs=wk.id_kurs join kurs2.kurs_nazwa ko on ko.id_nazwa=k.id_nazwa order by w.nazwisko;
select ko.nazwa as "Nazwa kursu", k.termin as "Termin kursu", k.id_kurs as „Kurs", u.nazwisko as "Nazwisko", u.imie as "Imie" from kurs2.uczestnik u join kurs2.uczest_kurs uk on u.id_uczestnik = uk.id_uczest join kurs2.kurs k on uk.id_kurs = k.id_kurs join kurs2.kurs_nazwa ko on k.id_nazwa = ko.id_nazwa order by ko.opis, k.id_kurs, u.nazwisko;
SELECT a1, a2, a3 FROM R1 UNION [ALL] SELECT a1, a2, a3 FROM R2;
SELECT a1, a2, a3 FROM R1 INTERSECT SELECT a1, a2, a3 FROM R2;
SELECT a1, a2, a3 FROM R1 EXCEPT SELECT a1, a2, a3 FROM R2 ;
SELECT imie, nazwisko, 'U' FROM kurs2.uczestnik UNION SELECT imie, nazwisko, 'W' FROM kurs2.wykladowca ORDER BY 3,2 ;
SELECT imie, nazwisko FROM kurs2.wykladowca EXCEPT SELECT imie, nazwisko FROM kurs2.wykladowca w JOIN kurs2.wykl_kurs wk ON w.id_wykladowca = wk.id_wykl ORDER BY 2;
SELECT imie, nazwisko FROM kurs2.wykladowca w LEFT JOIN kurs2.wykl_kurs wk ON w.id_wykladowca = wk.id_wykl WHERE wk.id_wykl is null ;
SELECT imie, nazwisko FROM kurs2.uczestnik u JOIN kurs2.uczest_kurs uk ON u.id_uczestnik = uk.id_uczest where id_kurs in (1,2 ) INTERSECT SELECT imie, nazwisko FROM kurs2.uczestnik u JOIN kurs2.uczest_kurs uk ON u.id_uczestnik = uk.id_uczest where id_kurs = 3 ORDER BY 2 ;
SELECT a1, a2, CASE wartość_lub_kolumna WHEN wartosc_1 THEN wynik_1 WHEN wartosc_2 THEN wynik_2 WHEN wartosc_3 THEN wynik_3 [ ELSE wynik_gdy_brak_na_liscie ] END FROM relacja
SELECT a1, a2, CASE WHEN wyrazenie_logiczne_1 THEN wynik_1 WHEN wyrazenie_logiczne_2 THEN wynik_2 WHEN wyrazenie_logiczne_3 THEN wynik_3 [ ELSE wynik_gdy_brak_na_liscie ] END FROM relacja
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2010 | a11 | a21 | ||||||||||
2011 | a12 | a22 | ||||||||||
2012 | a13 | a23 |
SELECT imie, nazwisko, CASE ocena WHEN 3 THEN 'dostateczny' WHEN 4 THEN 'dobry' WHEN 5 THEN 'bardzo dobry' ELSE 'brak oceny' END FROM kurs2.uczestnik u JOIN kurs2.uczest_kurs uk ON u.id_uczestnik=uk.id_uczest WHERE id_kurs=1 ORDER BY 2,1 ;
SELECT ko.nazwa, SUM(CASE WHEN uk.ocena = 3 THEN 1 ELSE 0 END ) as ocena_3, SUM(CASE WHEN uk.ocena = 4 THEN 1 ELSE 0 END ) as ocena_4, SUM(CASE WHEN uk.ocena = 5 THEN 1 ELSE 0 END ) as ocena_5, SUM(CASE WHEN uk.ocena is null THEN 1 ELSE 0 END ) as ocena_null FROM kurs2.kurs k JOIN kurs2.uczest_kurs uk USING (id_kurs) JOIN kurs2.kurs_nazwa ko on k.id_nazwa = ko.id_nazwa GROUP BY ko.nazwa, k.id_kurs ORDER BY k.id_kurs;
SELECT imie, nazwisko, ko.nazwa, uk.ocena FROM kurs2.uczestnik u JOIN kurs2.uczest_kurs uk ON u.id_uczestnik=uk.id_uczest JOIN kurs2.kurs k USING ( id_kurs) JOIN kurs2.kurs_nazwa ko ON k.id_nazwa=ko.id_nazwa WHERE uk.ocena >= CASE WHEN k.id_kurs IN (1, 2, 3, 4, 5) THEN 5 WHEN k.id_kurs IN (6, 7, 8, 9) THEN 4 WHEN k.id_kurs IN (10, 11) THEN 3 END ORDER BY 4 DESC ;
WITH table1_CTE [( atrybuty )] AS ( definicja zapytania ) -- definicja tabeli CTE [ , table2_CTE, ... ] -- definicje kolejnych tabel CTE SELECT [ atrybuty ] FROM tables_CTE ; -- zapytanie do tabel CTE
WITH statementCTE AS ( select * from kurs2.uczestnik ) SELECT * from statementCTE;
WITH statementCTE AS ( select id_kurs, count(*) as num from kurs2.uczest_kurs group by id_kurs ) SELECT ko.nazwa from statementCTE JOIN kurs2.kurs k USING ( id_kurs ) JOIN kurs2.kurs_nazwa ko ON k.id_nazwa=ko.id_nazwa WHERE num > 7;
WITH totalCTE as ( select count(*)::float as tot from kurs2.uczest_kurs ), kursCTE as ( select id_kurs, count(*)::float as num from kurs2.uczest_kurs group by id_kurs ) SELECT ko.nazwa, ROUND((kCTE.num/(select totalCTE.tot from totalCTE))::numeric,3) as proc FROM kursCTE kCTE JOIN kurs2.kurs k ON k.id_kurs = kCTE.id_kurs JOIN kurs2.kurs_nazwa ko ON k.id_nazwa = ko.id_nazwa;
Wiersze zawierają kolejnych wykładowców, kolumny kursy dostępne w bazie danych, na przecięciu posiadamy informację o prowadzeniu lub nie prowadzeniu danego kursu (rys.6).
WITH cte AS ( SELECT id_wykl, (case when SUM(CASE when wk.id_kurs = 1 then 1 else 0 END) = 1 then 'x' else '' end) AS k1, (case when SUM(CASE when wk.id_kurs = 2 then 1 else 0 END) = 1 then 'x' else '' end) AS k2, (case when SUM(CASE when wk.id_kurs = 3 then 1 else 0 END) = 1 then 'x' else '' end) AS k3, (case when SUM(CASE when wk.id_kurs = 4 then 1 else 0 END) = 1 then 'x' else '' end) AS k4, (case when SUM(CASE when wk.id_kurs = 5 then 1 else 0 END) = 1 then 'x' else '' end) AS k5, (case when SUM(CASE when wk.id_kurs = 6 then 1 else 0 END) = 1 then 'x' else '' end) AS k6, (case when SUM(CASE when wk.id_kurs = 7 then 1 else 0 END) = 1 then 'x' else '' end) AS k7, (case when SUM(CASE when wk.id_kurs = 8 then 1 else 0 END) = 1 then 'x' else '' end) AS k8, (case when SUM(CASE when wk.id_kurs = 9 then 1 else 0 END) = 1 then 'x' else '' end) AS k9, (case when SUM(CASE when wk.id_kurs = 10 then 1 else 0 END) = 1 then 'x' else '' end) AS k10, (case when SUM(CASE when wk.id_kurs = 11 then 1 else 0 END) = 1 then 'x' else '' end) AS k11, count(wk.id_kurs) AS count FROM kurs2.wykl_kurs wk GROUP BY id_wykl ) SELECT w.nazwisko, w.imie, c.k1, c.k2, c.k3,c.k4, c.k5, c.k6, c.k7, c.k8, c.k9, c.k10, c.k11, c.count FROM kurs2.wykladowca w JOIN cte c ON w.id_wykladowca = c.id_wykl ORDER BY w.nazwisko;
CREATE VIEW <nazwa perspektywy> [<nazwa kolumny>,...] AS <zapytanie SELECT definiujące perspektywę> [ WITH [CASCADED|LOCAL] CHECK OPTION]
Skrypt bibl_ddl.sql ( [listing dokumentu] [link do dokumentu] )
CREATE SCHEMA bibl ; -- -- Tabela DZIAL CREATE TABLE bibl.dzial( id_dzial int, nazwa varchar(40), CONSTRAINT PK_dzial PRIMARY KEY ( id_dzial ) ) ; -- -- Tabela KSIAZKA CREATE TABLE bibl.ksiazka( id_ksiazka int, tytul varchar(300) NOT NULL, autor varchar(300), isbn varchar(50), rok_wydania varchar(10), wydanie varchar(10), id_dzial int NOT NULL, CONSTRAINT PK_ksiazka PRIMARY KEY ( id_ksiazka ), -- Referencja tabela KSIAZKA tabela DZIAL CONSTRAINT FK_ksiazka_dzial FOREIGN KEY(id_dzial) REFERENCES bibl.dzial (id_dzial) ) ; -- -- Tabela EGZEMPLARZ CREATE TABLE bibl.egzemplarz( id_egzemplarz int NOT NULL, id_ksiazka int, status int, CONSTRAINT PK_egzemplarz PRIMARY KEY ( id_egzemplarz ), -- Referencja tabela EGZEMPLARZ tabela KSIAZKA CONSTRAINT FK_egzemplarz_ksiazka FOREIGN KEY(id_ksiazka) REFERENCES bibl.ksiazka (id_ksiazka) ) ; -- -- Tabela CZYTELNIK CREATE TABLE bibl.czytelnik( id_czytelnik int, imie varchar(50) NOT NULL, nazwisko varchar(50) NOT NULL, kod_pocztowy varchar(50), miasto varchar(50), adres varchar(100), email varchar(100), CONSTRAINT PK_czytelnik PRIMARY KEY ( id_czytelnik ) ) ; -- -- Tabela WYPOZYCZENIE CREATE TABLE bibl.wypozyczenie( id_wypozyczenie SERIAL, id_czytelnik int NOT NULL, id_egzemplarz int NOT NULL, data_pozyczenie date, data_oddania date, status int, CONSTRAINT PK_wypozyczenie PRIMARY KEY ( id_wypozyczenie ), -- Referencja tabela WYPOZYCZENIE tabela CZYTELNIK CONSTRAINT FK_wypozyczenie_czytelnik FOREIGN KEY(id_czytelnik) REFERENCES bibl.czytelnik (id_czytelnik), -- Referencja tabela WYPOZYCZENIE tabela EGZEMPLARZ CONSTRAINT FK_wypozyczenie_egzemplarz FOREIGN KEY(id_egzemplarz) REFERENCES bibl.egzemplarz (id_egzemplarz) ) ;
Skrypt bibl_dml1.sql ( [listing dokumentu] [link do dokumentu] )
insert into bibl.czytelnik (id_czytelnik, imie, nazwisko,email) VALUES ( 1, 'Adam','Abacki','abacki@onet.pl'), ( 2, 'Ewa','Babacka','babacka@onet.pl'), ( 3, 'Edward','Cabacki','cabacki@onet.pl'), ( 4, 'Krystyna','Dadacka','dadacka@wp.pl'), ( 5, 'Miroslaw','Ebacki','ebacki@gmail.com'), ( 6, 'Dariusz','Kabacki','kabacki@onet.pl'), ( 7, 'Alicja','Lalacka','lalacka@wp.pl'), ( 8, 'Krzysztof','Mamacki','mamacki@gmail.com'), ( 9, 'Hanna','Adamczyk','adamczyk@onet.pl'), (10, 'Ilona','Cudna','cudna@wp.pl'), (11,'Joanna','Debska','debska@wp.pl'), (12,'Waldemar','Drygiel','drygiel@onet.pl'), (13,'Adam','Fronc','fronc@gmail.com'), (14,'Marian','Glowka','glowka@o2.pl'), (15,'Helena','Rokicka','rokicka@o2.pl'), (16,'Maria','Sabak','sabak@wp.pl'), (17,'Wladyslaw','Stanczyk','stanczyk@wp.pl'), (18,'Adam','Szczypiorek','szczypiorek@gmail.com'), (19,'Adam','Kowalczyk','kowalczyk@o2.pl'), (20,'Adam','Zawadzki','zawadzki@onet.pl'), (21,'Adam','Kedra','kedra@wp.pl'), (22,'Adam','Sobczuk','sobczuk@o2.pl'), (23,'Klaudia','Wiacek','wiacek@gmail.com'), (24,'Malwina','Wierzbicka','wierzbicka@onet.pl'); -- -- Wprowadzamy dane do tabeli BIBL.DZIAL insert into bibl.dzial (id_dzial, nazwa) VALUES (1, 'literatura') ; insert into bibl.dzial (id_dzial, nazwa) VALUES (2, 'informatyka') ; -- -- Wprowadzamy dane do tabeli BIBL.KSIAZKA ( dzial literatura ) insert into bibl.ksiazka (id_ksiazka, tytul,autor,id_dzial) VALUES ( 1,'Duma i uprzedzenie','Jane Austen',1), ( 2,'Wladca Pierscieni','JRR Tolkien',1), ( 3,'Jane Eyre','Charlotte Bronte',1), ( 4,'Seria o Harrym Potterze','JK Rowling',1), ( 5,'Wichrowe Wzgorza','Emily Bronte',1), ( 6,'Rok 1984','George Orwell',1), ( 7,'Mroczne materie','Philip Pullman',1), ( 8,'Wielkie nadzieje','Charles Dickens',1), ( 9,'Male kobietki','Louisa M Alcott',1), (10,'Tessa Urberville','Thomas Hardy',1), (11,'Paragraf 22','Joseph Heller',1), (12,'Rebeka','Daphne Du Maurier',1), (13,'Hobbit','JRR Tolkien',1), (14,'Birdsong','Sebastian Faulks',1), (15,'Buszujacy w zbozu','JD Salinger',1), (16,'Zona podroznika w czasie','Audrey Niffenegger',1), (17,'Miasteczko Middlemarch','George Eliot',1), (18,'Przeminelo z wiatrem','Margaret Mitchell',1), (19,'Wielki Gatsby','F Scott Fitzgerald',1), (20,'Samotnia','Charles Dickens',1), (21,'Wojna i pokoj','Leo Tolstoy',1), (22,'Autostopem przez Galaktyke','Douglas Adams',1), (23,'Znowu w Brideshead','Evelyn Waugh',1), (24,'Zbrodnia i kara','Fyodor Dostoyevsky',1), (25,'Grona gniewu','John Steinbeck',1), (26,'Alicja w Krainie Czarow','Lewis Carroll',1), (27,'O czym szumia wierzby','Kenneth Grahame',1); -- -- Wprowadzamy dane do tabeli BIBL.KSIAZKA ( dzial informatyka ) insert into bibl.ksiazka (id_ksiazka,autor,tytul,rok_wydania,id_dzial) VALUES (28,'Jeffrey D. Ullman, Jennifer Widom','Podstawowy wyklad z systemow baz danych','2000',2), (29,'C.J.Date','Wprowadzenie do systemow baz danych','2000',2), (30,'Jeffrey D. Ullman','Systemy baz danych','1982',2), (31,'Paul Beynon- Davies','Systemy baz danych','1998',2), (32,'Georg Lausen, Gottfried Vossen','Obiektowe bazy danych','2000',2), (33,'Rafe Coburn','SQL dla kazdego','2001',2), (34,'Martin Gruber','SQL','2000',2), (35,'Jerzy Roszkowski','Analiza i projektowanie strukturalne','2002',2), (36,'Steven Roman','Access Baza danych, Projektowanie i programowanie','2001',2), (37,'Rick Dobson','Programowanie Microsoft Access 2000','2000',2), (38,'Stephen Forte','Access 2000, Ksiega eksperta','2001',2), (39,'John Viescas','Podrecznik Microsoft Access 2000','2000',2), (40,'Richard Stones','Neil Matthew, Od podstaw bazy danych i PostgreSQL','2001',2), (41,'John C. Worsley, Joshua D. Drake','PosgreSQL, Praktyczny przewodnik','2002',2), (42,'Michal Grochala','Java aplikacje bazodanowe','2001',2), (43,'Luke Welling, Laura Thomson','PHP i MySQL, Tworzenie stron WWW','2002',2), (44,'Jim Buyens','Bazy danych w Internecie krok po kroku','2000',2), (45,'Mark Whitehorn, Bill Marklyn','Relacyjne bazy danych','2003',2), (46,'Lech Banachowski i inni','Bazy danych, Wyklady i cwiczenia','2003',2), (47,'Thomas Connolly, Carolyn Begg','Systemy baz danych','2004',2);
Skrypt bibl_dml2.sql ( [listing dokumentu] [link do dokumentu] )
insert into bibl.egzemplarz (id_egzemplarz,id_ksiazka,status) VALUES (1,1,0), (2,2,0), (3,3,0), (4,4,0), (5,5,0), (6,6,0), (7,7,0), (8,8,0), (9,9,0), (10,10,0), (11,11,0), (12,12,0), (13,13,0), (14,14,0), (15,15,0), (16,16,0), (17,17,0), (18,18,0), (19,19,0), (20,20,0), (21,21,0), (22,22,0), (23,23,0), (24,24,0), (25,25,0), (26,26,0), (27,27,0), (28,28,0), (29,29,0), (30,30,0), (31,31,0), (32,32,0), (33,33,0), (34,34,0), (35,35,0), (36,36,0), (37,37,0), (38,38,0), (39,39,0), (40,40,0), (41,41,0), (42,42,0), (43,43,0), (44,44,0), (45,45,0), (46,46,0), (47,47,0);
Skrypt bibl_dml3.sql ( [listing dokumentu] [link do dokumentu] )
insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES ( 1, 1,'2012-10-10',1); update bibl.egzemplarz set status=1 where id_egzemplarz=1; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES ( 1, 3,'2012-09-10',1); update bibl.egzemplarz set status=1 where id_egzemplarz=3; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES ( 1, 4,'2013-01-04',1); update bibl.egzemplarz set status=1 where id_egzemplarz=4; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES ( 2, 2,'2012-10-07',1); update bibl.egzemplarz set status=1 where id_egzemplarz=2; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES ( 2, 5,'2012-08-05',1); update bibl.egzemplarz set status=1 where id_egzemplarz=5; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES ( 3, 6,'2012-07-11',1); update bibl.egzemplarz set status=1 where id_egzemplarz=6; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES ( 3, 9,'2012-09-15',1); update bibl.egzemplarz set status=1 where id_egzemplarz=9; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES ( 5, 10,'2012-10-13',1); update bibl.egzemplarz set status=1 where id_egzemplarz=10; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES ( 5, 11,'2012-11-19',1); update bibl.egzemplarz set status=1 where id_egzemplarz=11; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES ( 5, 12,'2012-12-08',1); update bibl.egzemplarz set status=1 where id_egzemplarz=12; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES ( 8, 7,'2013-01-18',1); update bibl.egzemplarz set status=1 where id_egzemplarz=7; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES ( 8, 14,'2012-07-10',1); update bibl.egzemplarz set status=1 where id_egzemplarz=14; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES ( 8, 15,'2012-09-20',1); update bibl.egzemplarz set status=1 where id_egzemplarz=15; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES (11, 22,'2012-11-11',1); update bibl.egzemplarz set status=1 where id_egzemplarz=22; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES (11, 24,'2012-10-01',1); update bibl.egzemplarz set status=1 where id_egzemplarz=24; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES (11, 30,'2012-09-25',1); update bibl.egzemplarz set status=1 where id_egzemplarz=30; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES (12, 32,'2012-10-14',1); update bibl.egzemplarz set status=1 where id_egzemplarz=32; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES (18, 41,'2012-08-16',1); update bibl.egzemplarz set status=1 where id_egzemplarz=41; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES (21, 28,'2012-10-16',1); update bibl.egzemplarz set status=1 where id_egzemplarz=28; -- oddanie ksiazki ( wypozyczenie ponowne ) update bibl.wypozyczenie set (data_oddania,status) = ('2013-02-04',2) where id_egzemplarz=41 and id_czytelnik=18 and status=1; update bibl.egzemplarz set status=0 where id_egzemplarz=41; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES (19, 41,'2013-02-05',1); update bibl.egzemplarz set status=1 where id_egzemplarz=41; -- oddanie ksiazki ( wypozyczenie ponowne ) update bibl.wypozyczenie set (data_oddania,status) = ('2012-10-04',2) where id_egzemplarz=30 and id_czytelnik=11 and status=1; update bibl.egzemplarz set status=0 where id_egzemplarz=30; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES (21, 30,'2012-10-05',1); update bibl.egzemplarz set status=1 where id_egzemplarz=30; -- oddanie ksiazki ( wypozyczenie ponowne ) update bibl.wypozyczenie set (data_oddania,status) = ('2012-11-04',2) where id_egzemplarz=30 and id_czytelnik=21 and status=1; update bibl.egzemplarz set status=0 where id_egzemplarz=30; insert into bibl.wypozyczenie (id_czytelnik, id_egzemplarz, data_pozyczenie, status) VALUES (1, 30,'2012-11-05',1); update bibl.egzemplarz set status=1 where id_egzemplarz=30;
Skrypt bibl_views.sql ( [listing dokumentu] [link do dokumentu] )
-- czytelnicy posiadajacy wypozyczone ksiazki create view bibl.v_czytelnik_wypozyczenia as select c.nazwisko as "Nazwisko", c.imie as "Imie", count(*) as "Liczba ksiazek" from bibl.czytelnik c join bibl.wypozyczenie w on c.id_czytelnik = w.id_czytelnik where w.status=1 group by c.id_czytelnik order by c.nazwisko; -- czytelnicy nie posiadajacy wypozyczonych ksiazek create view bibl.v_czytelnik_brak_wypozyczen as select c.nazwisko as "Nazwisko", c.imie as "Imie" from bibl.czytelnik c where c.id_czytelnik not in ( select w.id_czytelnik from bibl.wypozyczenie w where w.status=1 ) order by c.nazwisko; -- czytelnicy ktorzy nigdy nie pozyczyli ksiazek create view bibl.v_czytelnik_nie_pozyczal as select nazwisko as "Nazwisko",imie as "Imie" from bibl.czytelnik where id_czytelnik not in ( select distinct id_czytelnik from bibl.wypozyczenie ) order by nazwisko ; -- ksiazki wypozyczone create view bibl.v_ksiazki_pozyczone as select k.tytul as "Tytul", k.autor as "Autor" from bibl.egzemplarz e join bibl.ksiazka k on e.id_ksiazka=k.id_ksiazka where e.status=1 order by k.tytul ; -- ksiazki w bibliotece create view bibl.v_ksiazki_w_bibliotece as select k.tytul as "Tytul", k.autor as "Autor" from bibl.egzemplarz e join bibl.ksiazka k on e.id_ksiazka=k.id_ksiazka where e.status=0 order by k.tytul ; -- liczba ksiazek w bibliotece i pozyczonych create view bibl.v6 (opis , liczba_ksiazek ) as select 'Ksiazki w bibliotece', count(*) from bibl.egzemplarz where status=0 union select 'Ksiazki pozyczone', count(*) from bibl.egzemplarz where status=1 order by 1; -- liczba ksiazek w poszczegolnych kategoriach create view bibl.v7 as select d.nazwa as "Nazwa", count(*) as "Liczba ksiazek" from bibl.dzial d join bibl.ksiazka k on d.id_dzial = k.id_dzial group by d.nazwa; -- liczba ksiazek w poszczegolnych kategoriach (pozyczone, w bibliotece) create view bibl.v8 (Kategoria, Opis ,Liczba_pozycji ) as select d.nazwa, case when e.status=0 then 'W bibliotece' when e.status=1 then 'Pozyczone' end, count(*) from bibl.dzial d join bibl.ksiazka k on d.id_dzial = k.id_dzial join bibl.egzemplarz e on k.id_ksiazka = e.id_ksiazka group by d.nazwa,e.status order by d.nazwa,e.status; -- ksiazki najczesciej wypozyczane create view bibl.v9 as select k.tytul as "Tytul", k.autor as "Autor", count(*) as "Liczba wypozyczen" from bibl.ksiazka k join bibl.egzemplarz e on k.id_ksiazka = e.id_ksiazka join bibl.wypozyczenie w on e.id_egzemplarz = w.id_egzemplarz group by k.id_ksiazka having count(*) > 1 order by "Liczba wypozyczen" desc; -- ksiazki nigdy nie pozyczone create view bibl.v10 as select k.tytul as "Tytul", k.autor as "Autor" from bibl.ksiazka k where k.id_ksiazka not in ( select e.id_ksiazka from bibl.wypozyczenie w join bibl.egzemplarz e on w.id_egzemplarz = e.id_egzemplarz ) ; --