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 ) ;
--