background image

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

background image

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 

background image

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