---
# System prepended metadata

title: pog 1

---

# pog 1

## ściąga
![](https://i.imgur.com/WMJM50A.png)
![](https://i.imgur.com/SGnsMcA.png)
![](https://i.imgur.com/UuzYMae.png)
![](https://i.imgur.com/G5PssxR.png)

$\sigma$ - select
$\pi$ - projection
$\rho$ - rename


## zadanie 1
![](https://i.imgur.com/hOYiRsy.png)
a) max = p+s - wtedy gdy P oraz S nie mają wspólnego krotki
min = max(p,s) - wtedy gdy P zawiera się w S lub S zawiera się w P
b)     max = $p \cdot s$ gdy natural join zachowa się jak cartesian product
min = 0 gdy $B_P \cap B_S = \emptyset$ 
c) max = p - gdy $B_P = B_S$
min = 0 gdy $B_P \cap B_S = \emptyset$
d) max = min = s
e) max = p, gdy $\forall_{p \in P} p.a \neq p.b$ 
min = 0 gdy $\forall_{p \in P} p.a = p.b$

## zadanie 2
![](https://i.imgur.com/NZcP534.png)
$\rho, \pi, \times, \cup$ they don't make a boundary on a set, they can only expand it or preserve it. $\sigma$ this operator can reduce elements of the set but the constrains on the formula $F$ gives too few operations that aren't able to produce all possible formulas. `When we allow to use negation we can construct all possible formulas (logic for CS).`

To co wyżej, ale jeszcze przy wprowadzeniu negacji możemy skonstruować następującą formułę $F=$

Możliwe drogi:
a) sumę po singletonach lub po zbiorach pustych przy czym singelton wtw gdy dany element zbioru A nie występuje w zbiorze B

$A \rightarrow \{(a),\emptyset\}$
$\pi_{a}\sigma_{a=b}A\times B = A\cap B$
$|A \cup B| = |A| + |B| - |A\cap B|$
A  B
1  2 
2  3
3  4

![](https://i.imgur.com/QzbDZFo.png)
rozw Kamila (bez formuły)
![](https://i.imgur.com/FG8ZHON.png)




## zadanie 3
![](https://i.imgur.com/HCDTgdg.png)

$(A,A_Y,A_Z)$
Dowód, że działa:
Cel: $X \cap (Y \cup Z)=\pi_A(\sigma_{A=A_Y\vee A=A_Z}(X \times \rho_{Y(A_Y)}(Y)\times \rho_{Z(A_Z)}(Z)))$
Weźmy dowolny element $a \in \pi_A(\sigma_{A=A_Y\vee A=A_Z}(X \times \rho_{Y(A_Y)}(Y)\times \rho_{Z(A_Z)}(Z)))$ on spełnia następującą własność $a\in X \wedge (a\in Y \vee a \in Z)$ a zatem z definicji $a\in X \cap (Y \cup Z)$. 
Teraz weźmy dowolny element $b\in X \cap (Y \cup Z)$ wtedy $b$ spełnia $b\in X \wedge (b\in Y \vee b \in Z)$ ale wtedy istnieje taka pewna krotka $(b,y,z)$, że $y=b \vee z =b$. A zatem spełnia własność naszej $\sigma$.

## zadanie 4
![](https://i.imgur.com/fFqqXNu.png)
![](https://i.imgur.com/Uwt31zj.png)
a) 
pom1 = σyear<1960(movies)
pom2 = ((movies_directors)⨯(pom1))
pom3 = σmovies_directors.movie_id	=movies.id (pom2)
pom4 = πmovies_directors.director_id,movies.id,movies.name (pom3)
pom5 = (directors)⨝directors.id=movies_directors.director_id (pom4)
pom6 = πmovies.name,directors.last_name,movies.id(pom5)
pom7 = movies_genres ⨝movie_id=movies.id pom6
result = π movies.name,directors.last_name,movies_genres.genre pom7
result

a1)
π name, last_name, genre
(((σ year < 1960 (movies) 
⨝ movies_genres.movie_id = movies.id movies_genres) 
⨝ movies.id = movies_directors.movie_id movies_directors)
⨝ movies_directors.director_id = directors.id directors)

b)
id = πdirectors.id(σfirst_name='Quentin' ∧ last_name='Tarantino' directors)
remove = (movies_directors⨝director_id=directors.id id)
remove_movies = πmovies_directors.director_id,movies_directors.movie_id(movies⨝id=movies_directors.movie_id remove)
pom2 = πmovies_directors.movie_id remove_movies
pom3 = πroles.actor_id (roles⨝movie_id=movies_directors.movie_id pom2) 
pom4 = πactors.id,actors.first_name,actors.last_name,actors.gender (actors⨝id=roles.actor_id pom3)
actors - pom4

b1)
tarantino_movies = movies_directors ⨝ director_id = id σ id = 78273 (directors)
actors_in_tarantino_movies = π actor_id (roles ⨝ roles.movie_id = movies_directors.movie_id (tarantino_movies))
all_actors = π id (actors)
π first_name, last_name(actors ⨝ (all_actors - actors_in_tarantino_movies))
            
c)
good_ids = (πroles.actor_idσhow_many_movies=1(γ actor_id;count(movie_id)->how_many_movies roles))
πactors.first_name,actors.last_name(actors⨝id=roles.actor_id good_ids)

c1)
actors ⨝ (π id (actors) - (ρ actor_id->id (π r1.actor_id (σ r1.actor_id = r2.actor_id ∧ r1.movie_id ≠ r2.movie_id (ρ r1 (roles) x ρ r2 (roles))))))

d) 
ids = (πmovies_genres.movie_idσmovies_genres.genre='Sci-Fi'movies_genres)∩(πmovies_genres.movie_idσmovies_genres.genre='Drama'movies_genres)
πmovies.name (movies⨝id=movies_genres.movie_id ids)
e)
pom1 = τ rank desc (movies)
pom2 = γ  max(rank)->x (movies)
πmovies.id,movies.name,movies.year,movies.rank (pom1 ⨝movies.rank=x pom2)
e1)
(movies ⨝ (π id (movies) - π movies.id (σ m.rank > movies.rank ((ρ m (movies)) x movies))))

f)
pom1 = γ roles.actor_id, roles.role; count(roles.movie_id)->x roles
πactors.last_name ((actors)⨝id=roles.actor_id (πroles.actor_idσx>1 pom1))
f1)
actors ⨝ (ρ actor_id->id (π r1.actor_id (σ r1.actor_id = r2.actor_id ∧ r1.movie_id ≠ r2.movie_id ∧ r1.role = r2.role (ρ r1 (roles) x ρ r2 (roles)))))

g)
(directors ⨝ ( π id (directors) - π directors.id (σ directors_genres.genre = 'Horror'(directors ⨝ id = director_id directors_genres))))
g1) 
remove_id = πmovies_directors.director_id(movies_directors⨝movie_id=movies_genres.movie_id (πmovies_genres.movie_idσgenre='Horror' movies_genres))
πdirectors.last_name(directors-πdirectors.id,directors.first_name,directors.last_name(directors⨝id=movies_directors.director_id remove_id))
h)
id_kobiet = πidσgender='F' actors
id_movies_with_f = (πroles.movie_id(roles⨝actor_id=actors.id id_kobiet))
πdirectors.first_name,directors.last_name (directors ⨝id=movies_directors.director_id (πmovies_directors.director_id (movies_directors-πmovies_directors.director_id,movies_directors.movie_id(movies_directors⨝movie_id=roles.movie_id id_movies_with_f))))
h1)
directors ⨝  ρ director_id→id (π director_id (movies_directors ⨝ movie_id = id (π id (movies) - π movie_id (σ gender = 'F' (actors ⨝ actor_id = id roles)))))
## zadanie 5
![](https://i.imgur.com/Vm7GVqW.png)
a)
gamma actors.first_name; count(actors.gender)→ liczba (actors ⨝ actors.id=roles.actor_id roles)

zapytanie zwraca dla każdego imienia aktorów ilość roli zagranych przez aktorów z takim imieniem,
w tabeli zwracanej przez child_expression mamy wszystkie rekordy aktorów i przydzielonych im ról,
więć kolumna po której będziemy zliczać nie ma znaczenia

b)
γ genre; count(movie_id) -> liczba (movies_genres)
c)
female_movies = π movie_id (σ gender = 'F' (actors ⨝ actor_id = id roles))
male_movies = π movie_id (σ gender = 'M' (actors ⨝ actor_id = id roles))
actors_and_movies_with_MF = (actors ⨝ id=actor_id 
								 (roles ⨝ (male_movies ∩ female_movies)))

(γ movie_id; count(actor_id)->aktorki (π actor_id, movie_id(
	σ gender = 'F' actors_and_movies_with_MF)))
⨝ 
(γ movie_id; count(actor_id)->aktorzy (π actor_id, movie_id(
	σ gender = 'M' actors_and_movies_with_MF)))