---
tags: BD, lista 1
---
# Bazy Danych lista1
## ZADANIE 1 :rocket:
* P ∪ ρS(A,B) S :
* min: max(p,s)
* max: p+s
* πA,C (P ⨝ S)
* min: 0, gdy niema żadnych par sobie odpowiadających
* max: p*s, gdy w obuu tablech w kolumnie B występuje jedna ta sama wartość
* πB (P ) \ (πB (P ) \ πB (S))
* min: 0, gdy przekrój P i S pusty
* max: p, gdy przekrój P i S pełny
* (S ⨝ S) ⨝ S
* min: s, gdy w S nie ma duplikatów
* max: s^3, gdy w S występuja ta sama krotka s razy
* σA<B (P ) ∪ σA>B (P )
* min: 0, gdy wszystkie krotki A=B
* max: p, gdy nie ma takich krotke że A=B
## ZADANIE 2 :rocket:
* 1. Nie da się, bo:
* co to znaczy, że jest montoniczny
* operatory są monotoniczne : im większa relacja podana jako argument tym większa relacja w wyniku, a operato **\\** nie ma tej własności.
* każdy z operatorów w treści zadania jest monotoniczny (selekcja też) każde wyrażenie złożone z tych operatorów będzie monotoniczne
* 2. Co gdy dopuścimyw warunkach przy selekcji negację?
* Nadal nie da się, ten sam argument, gdy dopuścimy negację im większa realcja tym większy wynik.
## ZADANIE 3 :rocket:
Tak, wyrażenie jest poprawne, w wyniku znajdą się wpisy znajdujące się jednocześnie w X i Y albo jednocześnie w X i Z. Zatem otzrymamy dokładnie (X ∩ Y) ∪ (X ∩ Z) = X ∩ (Y ∪ Z)
## ZADANIE 4 :rocket:
1. Dla każdego filmu sprzed 1960 roku wypisz jego tytuł, nazwisko reżysera i gatunek (genre).
``` c
π movies.name, directors.last_name, movies_genres.genre (
σ year < 1960 (movies) ⨝ movies.id = movies_directors.movie_id (movies_directors) ⨝ movies_directors.director_id = directors.id (directors) ⨝ movies.id=movies_genres.movie_id (movies_genres))
```
2. Wypisz imiona i nazwiska aktorów, którzy nie zagrali w żadnym filmie Quentina Tarantino.
``` c
π directors.id (σ directors.last_name='Tarantino' (directors)) -> 78273
π actors.first_name, actors.last_name
(ρ szukani_aktorzy(π id (actors) -
(π roles.actor_id (σ movies_directors.director_id = 78273 (roles ⨝ roles.movie_id=movies_directors.movie_id (movies_directors)))))
⨝ szukani_aktorzy.id = actors.id (actors))
```
3. Wypisz imiona i nazwiska aktorów, którzy zagrali w dokładnie jednym filmie.
``` c
/*pusta więc każdy aktor wystąpił w jakimś filmie*/
π id (actors) - π actor_id (roles)
/* aktorzy, którzy grali w conajmniej 2 filmach */
π roles.actor_id (σ roles.movie_id≠roles2.movie_id (roles ⨝ roles.actor_id=roles2.actor_id ρ roles2 (roles)))
/* aktorzy, którzy zagrali dokładnie w 1 filmie */
π first_name, last_name ((π id (actors) -
π roles.actor_id (σ roles.movie_id≠roles2.movie_id (roles ⨝ roles.actor_id=roles2.actor_id ρ roles2 (roles))))
⨝ actors)
```
4. Wypisz tytuły filmów, które są jednocześnie gatunku Drama oraz Sci-Fi.
```c
π name (σ movies_genres.genre = 'Drama' ∧ movies_genres2.genre = 'Sci-Fi'
(movies_genres ⨝ movies_genres.movie_id = movies_genres2.movie_id ρ movies_genres2 movies_genres) ⨝
movies_genres.movie_id = movies.id movies)
```
5. Wypisz pełne dane filmów z najwyższą wartością atrybutu rank.
```c
(π id movies -
π movies.id (σ movies.rank < movies2.rank (movies ⨯ ρ movies2 movies))) ⨝ movies
```
6. Wypisz nazwiska aktorów, którzy zagrali taką samą rolę w co najmniej dwóch, różnych filmach.
```c
π actors.last_name ((π roles.actor_id
(σ roles.movie_id≠roles2.movie_id ∧ roles.role=roles2.role (roles ⨝ roles.actor_id = roles2.actor_id ρ roles2 roles)))
⨝ roles.actor_id=actors.id actors)
```
7. Wypisz nazwiska reżyserów, którzy nigdy nie nakręcili horroru.
```c
π directors.last_name ((π id directors -
π movies_directors.director_id (σ movies_genres.genre = 'Horror' (movies_directors ⨝ movies_directors.movie_id=movies_genres.movie_id movies_genres))) ⨝ directors)
```
8. Wypisz nazwiska reżyserów, którzy nakręcili film, w którym wśród aktorów nie było kobiet.
```c
/* id filmów, w których wystąpiły kobiety */
π movies.id (σ actors.gender = 'F' ((movies ⨝ movies.id=roles.movie_id roles) ⨝ roles.actor_id=actors.id actors))
/* filmy, w których NIE wystąpiły kobiety */
π id movies -
π movies.id (σ actors.gender = 'F' ((movies ⨝ movies.id=roles.movie_id roles) ⨝ roles.actor_id=actors.id actors))
π last_name
(π movies_directors.director_id ((π id movies -
π movies.id (σ actors.gender = 'F' ((movies ⨝ movies.id=roles.movie_id roles) ⨝ roles.actor_id=actors.id actors)))
⨝ movies.id=movies_directors.movie_id movies_directors)
⨝ movies_directors.director_id=directors.id directors)
```
## ZADANIE 5 :rocket:
1. Co zwraca zapytanie
```c
gamma actors.first_name; count(actors.gender) → liczba
(actors ⨝ actors.id=roles.actor_id roles)
```
* Tabela: aktorzy, którzy grali w conajmniej jednym filmie.
* Grupujemy aktorów o tym samym imieniu i zliczamy ile jest wpisów w kolumnie o nazwie actors.gender w każdej z grup. W wyniku otrzymam liczbę aktorów o danym imieniu.
2. Dla każdego gatunku filmowego wspomnianego w relacji movies_genre podaj liczbę filmów tego gatunku.
```c
gamma movies_genres.genre; count(movies_genres.movie_id) → liczba movies_genres
```
3. Dla każdego filmu, w którym zagrał zarówno aktor, jak i aktorka wypisz czwórkę: id, tytuł (tzn. name) oraz liczbę aktorek i liczeb aktorów, w nim grających.
```c
/* dla każdego aktora kazdy film, w którym wystąpił */
π actors.id, roles.movie_id σ actors.gender='M' (actors ⨝ actors.id=roles.actor_id roles)
/* dla każdego filmu liczba aktorów w nim grających */
gamma roles.movie_id; count(actors.id) → liczba
π actors.id, roles.movie_id σ actors.gender='M' (actors ⨝ actors.id=roles.actor_id roles)
/* dla każdego filmu liczba aktorek w nim grających */
gamma roles.movie_id; count(actors.id) → liczba
π actors.id, roles.movie_id σ actors.gender='F' (actors ⨝ actors.id=roles.actor_id roles)
π movies.id, movies.name, M.liczba, F.liczba
((π M.movie_id, M.liczba, F.liczba
(ρ M gamma roles.movie_id; count(actors.id) → liczba
π actors.id, roles.movie_id σ actors.gender='M' (actors ⨝ actors.id=roles.actor_id roles)
⨝ M.movie_id = F.movie_id
ρ F gamma roles.movie_id; count(actors.id) → liczba
π actors.id, roles.movie_id σ actors.gender='F' (actors ⨝ actors.id=roles.actor_id roles)))
⨝ M.movie_id = movies.id movies)
```
## MATERIAŁY
* kalkulator algebry relacji: https://dbis-uibk.github.io/relax/help#relalg-reference