Kolokwium – Bazy danych, SQL
Nazwisko:
WZÓR
WZÓR
WZÓR
WZÓR
WZÓR
WZÓR
Imię:
indeks:
Dane są następujące tabele Książka i Autor:
[Ksiazka]
id | tytuł | wydawca | id_a | nakład
----+-----------------------+---------+-------+--------
1 | Naprzód Polsko | Rebus | KOZ | 1620
2 | Panna Maria | KKO | SZER |
3 | Panna Maria | Aurora | KOZ | 1740
4 | Pod palmami | Aurora | KOZ | 1850
5 | Najnowsza historia K. | Iskra | SZER | 2402
[Autor]
id | imie | nazwisko | miasto
-------+---------+------------+-----------
SZER | Janina | Szerszeń | Gdynia
DANA | Danuta | Prus | Wejherowo
PRUS | Antoni | Pruszyński | Sopot
KOZ | Tadeusz | Kozłowski | Sopot
'id' jest kluczem głównym w tabeli Książka, jest nadawany automatycznie jako kolejna liczba
naturalna, 'id_a' jest kluczem obcym w tabeli Książka wskazującym na klucz główny 'id' w tabeli
Autor.
Zad. 1. Zapisz w SQL definicje tych tabel (tylko definicje, nie konkretn tre
).
ą
ść
Zad. 2. Wstaw do ka dej z tabel drugi od góry wiersz z odpowiedniej tabeli powy ej.
ż
ż
create table Autor(
id varchar(4) primary key,
imie varchar(22),
nazwisko varchar(22),
miasto varchar(22)
);
create table Ksiazka(
id serial,
tytul varchar(22),
wydawca varchar(22),
id_a varchar(4) references Autor(id),
naklad integer
);
insert into Autor (id,imie,nazwisko,miasto)
values('DANA','Danuta','Prus','Wejherowo');
insert into Ksiazka(tytul,wydawca,id_a,naklad)
values('Panna Maria','KKO','SZER',NULL);
Odwołujemy się do treści tabel podanej w zad.1
Zad. 3. Jak b dzie wygl da wynik zapytania
ę
ą ł
SELECT id_a, COUNT(*) AS liczba_książek FROM Ksiazka GROUP BY id_a
HAVING COUNT(*)>1;
Zad. 4. Jak b dzie wygl da wynik zapytania
ę
ą ł
SELECT tytul,wydawca from Ksiazka
WHERE id_a IN (SELECT id FROM Autor WHERE miasto='Sopot');
id_a | liczba_książek
------+----------------
SZER | 2
KOZ | 3
(2 rows)
tytul | wydawca
----------------+---------
Naprzód Polsko | Rebus
Panna Maria | Aurora
Pod palmami | Aurora
(3 rows)
Zad. 5. Zmie definicj tabel z zad. 1 wstawiaj c dodatkowy atrybut dla daty wydania
ń
ę
ą
w tabeli ksi
ek. W kolumnie ustaw dat dzisiejsz .
ąż
ę
ą
Zad. 6. Usu z systemu tabel autorów.
ń
ę
alter table Ksiazka add column data_wyd date default
date('2008-05-24')
;
drop table Autor cascade
;
Posługując się strukturą tabel z zad. 1 skonstruuj zapytania SQL wykonujące polecenia opisane
poniżej. Zapytania powinny zwracać poprawne wyniki bez względu na to jakie dane znajdują się w
tabelach (tzn. nie mogą odwoływać się bezpośrednio do konkretnych danych).
Zad. 7. Zwi ksz o 300 egzemplarzy nak ad wszystkim ksi
kom Koz owskiego.
ę
ł
ąż
ł
Zad. 8. Wypisz w kolejno ci alfabetycznej i bez powtórze wydawców ksi
ek
ś
ń
ąż
Koz owskiego.
ł
Zad. 9. Wypisz nazwiska autorów, którzy nie napisali adnych ksi
ek.
ż
ąż
Zad. 10. Usu takich autorów z bazy danych.
ń
Zad. 11. Podaj najwi kszy nak ad spo ród ksi
ek autorów sopockich.
ę
ł
ś
ąż
Zad. 12. Podaj tytu i wydawc ksi
ki autora z Sopotu o najwi kszym nak adzie.
ł
ę
ąż
ę
ł
Zad. 13. Usu z bazy autorów sopockich, ale tylko je li nie napisali adnej ksi
ki.
ń
ś
ż
ąż
zad.7 update Ksiazka set naklad=naklad+300 WHERE id_a IN (select id
from Autor where nazwisko like'Kozłowski');
zad.8 select distinct wydawca from Ksiazka WHERE id_a IN (select id
from Autor where nazwisko like'Kozłowski');
zad.9 select nazwisko from Autor where id not in (select id_a from
Ksiazka);
select nazwisko from autor left join ksiazka on id_a=autor.id
where id_a is null;
select nazwisko from Autor where not exists (select 1 from
Ksiazka where id_a=Autor.id);
zad.10 delete from Autor where id not in (select id_a from Ksiazka);
zad.11 select max(naklad) from Ksiazka K inner join
Autor A on K.id_a=A.id where miasto='Sopot';
zad.12 select tytul,wydawca from Ksiazka K inner join Autor A on
K.id_a=A.id
where miasto='Sopot'and naklad=(
select max(naklad) from Ksiazka K inner join
Autor A on K.id_a=A.id where miasto='Sopot'
);
zad.13 delete from Autor where miasto='Sopot' and id not in (select
id_a from Ksiazka);