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 Artykul i Dziennikarz:

[Artykul]
 id | tytuł               | nr  | kod_dz |   kB
----+---------------------+-----+--------+---------
  1 | Wielkie Żarcie      | 14  | BEKSA  | 18.50
  2 | Boso, ale z muchą   | 14  | REDD   |
  3 | Władcy much         | 17  | REDD   | 24.02
  4 | Myślenie owiec      | 15  | BEKSA  | 17.40
  5 | Prawda bez barier   | 15  | BEKSA  | 16.20

[Dziennikarz]
  id   | imie   | nazwisko  | płeć
-------+--------+-----------+------
 NOWAK | Jan    | Nowak     |  M
 BEKSA | Karol  | Beksiński |  M
 KOWAL | Jakub  | Kowalski  |  M
 REDD  | Carol  | Redd      |  K

'id' jest kluczem głównym w tabeli Artykul, jest nadawany automatycznie jako kolejna liczba 
naturalna, 'kod_dz' jest kluczem obcym w tabeli Artykul wskazującym na klucz główny 'id' w tabeli 
Dziennikarz.

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 Dziennikarz( 

id varchar(5) primary key, 

nazwisko varchar(22), 

imie varchar(22), 

plec char(1) 

); 

create table Artykul( 

id serial, 

tytul varchar(22), 

nr integer, 

kod_dz varchar(5) references dziennikarz(id), 

kB numeric (7,2) -- decimal(7,2) 

); 

insert into dziennikarz (id,imie,nazwisko,plec) 

values('BEKSA','Karol','Beksiński','M'); 

insert into artykul (tytul,nr,kod_dz,kB) 

values('Boso, ale z muchą',14,'REDD',NULL); 

background image

Odwołujemy się do treści tabel podanej w zad.1

Zad. 3.  Jak b dzie wygl da  wynik zapytania

ę

ą ł

SELECT kod_dz, COUNT(*) AS liczba_artykułów FROM Artykul GROUP BY 
kod_dz HAVING COUNT(*)>1;

Zad. 4.  Jak b dzie wygl da  wynik zapytania

ę

ą ł

SELECT tytul,nr from Artykul

WHERE kod_dz IN (SELECT id FROM Dziennikarz 
                 WHERE plec='M');

kod_dz | liczba_artykułów

--------+------------------

 REDD   |                2

 BEKSA  |                3

(2 rows)

       tytul       | nr 

-------------------+---- 

 Wielkie Żarcie    | 14 

 Myślenie owiec    | 15 

 Prawda bez barier | 15 

(3 rows) 

Zad. 5. Zmie  definicj  tabel z zad. 1 wstawiaj c dodatkowy atrybut dla daty publikacji

ń

ę

ą

 

w tabeli artyku ów.  W kolumnie ustaw dat  dzisiejsz .

ł

ę

ą

Zad. 6. Usu  z systemu tabel  dziennikarzy.

ń

ę

alter table artykul add column data_wyd date default 

date('2008-05-24') 

drop table dziennikarz 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. Zmie  d ugo

 artyku ów Beksi skiego stosuj c mno nik 0,75.

ń ł

ść

ł

ń

ą

ż

Zad. 8. Wypisz numery, w których ukaza y sie artyku y Beksi skiego w kolejno ci malej cej.

ł

ł

ń

ś

ą

Zad. 9. Wypisz nazwiska dziennikarzy, którzy nie napisali  adnego artyku u.

ż

ł

Zad. 10. Usu  z bazy dane dziennikarzy, którzy nie napisali  adnego artyku u.

ń

ż

ł

Zad. 11. Podaj d ugo

 najd u szego artyku u napisanego przez kobiet .

ł

ść

ł ż

ł

ę

Zad. 12. Podaj tytu  najd u szego artyku u napisanego przez kobiet .

ł

ł ż

ł

ę

Zad. 13. Usu  dane dziennikarzy m

czyzn, pod warunkiem jednak,  e nie s  autorami

ń

ęż

ż

ą

 

adnego artyku u.

ż

ł

zad. 7 UPDATE Artykul set kB=kB*1.05 WHERE kod_dz IN (SELECT id FROM 

Dziennikarz WHERE nazwisko like 'Beksiński') 

zad. 8 SELECT distinct nr FROM Artykul WHERE kod_dz IN (SELECT id 

FROM Dziennikarz WHERE nazwisko like 'Beksiński') order by nr desc 

zad. 9 SELECT nazwisko FROM Dziennikarz WHERE id not in (SELECT 

kod_dz FROM Artykul) 

        select nazwisko from Dziennikarz left join Artykul on 

kod_dz=Dziennikarz.id where kod_dz is null; 

        select nazwisko from Dziennikarz where not exists (select 1 

from Artykul where kod_dz=Dziennikarz.id); 

zad. 10 delete FROM Dziennikarz WHERE id not in (SELECT kod_dz FROM 

Artykul) 

zad. 11 SELECT max(kB) FROM Artykul A inner join 

Dziennikarz D on A.kod_dz=D.id WHERE plec='K' 

zad. 12 SELECT tytul FROM Artykul A inner join 

Dziennikarz D on A.kod_dz=D.id WHERE plec='K' and kB=(SELECT max(kB) 

FROM Artykul A inner join 

Dziennikarz D on A.kod_dz=D.id WHERE plec='K') 

zad. 13 delete FROM Dziennikarz WHERE plec='M' and id not in (SELECT 

kod_dz FROM Artykul)

;