# Session Two: Getting Better | Banco de Dados
>[color=purple]**Autor:** Letícia Rodrigues da Silva
**Turma:** IndoD
**Número:** 25
[TOC]
## Modelagem Filme (N-N)
### Script das tabelas
```sql=
CREATE TABLE tb_filme (
id_filme int primary key auto_increment,
nm_filme varchar(200),
dt_lancamento date,
vl_avaliacao decimal(10,1),
bt_disponivel bool
);
CREATE TABLE tb_genero (
id_genero int primary key auto_increment,
nm_genero varchar(200),
bt_ativo bool
);
CREATE TABLE tb_filme_genero (
id_filme_genero int primary key auto_increment,
id_filme int,
id_genero int,
FOREIGN KEY (id_filme) REFERENCES tb_filme(id_filme) ON DELETE CASCADE,
FOREIGN KEY (id_genero) REFERENCES tb_genero(id_genero)
);
```
### Inserts das tabelas
```sql=
INSERT INTO tb_genero (nm_genero, bt_ativo)
VALUES ('Romance', true),
('Ação', true),
('Comédia', true),
('Ficção Científica', true),
('Drama', true);
INSERT INTO tb_filme (nm_filme, dt_lancamento, vl_avaliacao, bt_disponivel)
VALUES ('Minha Mãe É Uma Peça 3', '2019-12-26', 4.7, true),
('Avatar', '2009-12-18', 4.5, true),
('A Cinco Passos de Você', '2019-03-21', 4.9, true),
('Por Lugares Incríveis', '2020-02-28', 4.4, true),
('Os Órfãos', '2020-01-30', 2.3, true);
INSERT INTO tb_filme_genero (id_filme, id_genero)
VALUES (1, 3),
(2, 4),
(3, 5),
(4, 1),
(5, 2);
```
### Update e delete
```sql=
UPDATE tb_filme
SET vl_avaliacao = 5.0
WHERE id_filme = 1;
UPDATE tb_genero
SET bt_ativo = false
WHERE id_genero = 2;
UPDATE tb_filme_genero
SET id_genero = 1
WHERE id_filme_genero = 3;
DELETE FROM tb_filme
WHERE id_filme = 4;
DELETE FROM tb_genero
WHERE id_genero = 5;
DELETE FROM tb_filme_genero
WHERE id_filme_genero = 3;
```
### Selects
```sql=
SELECT * FROM tb_genero;
SELECT * FROM tb_filme;
SELECT * FROM tb_filme_genero;
```
### 1. Selecionar fime, gênero aplicando o relacionamento nas tabelas, sem filtros, ordenando por filme.
```sql=
SELECT f.nm_filme,
g.nm_genero
FROM tb_filme_genero fg
INNER JOIN tb_filme f ON f.id_filme = fg.id_filme
INNER JOIN tb_genero g ON g.id_genero = fg.id_genero
ORDER BY f.nm_filme;
```
### 2. Selecionar id do filme, filme, id do gênero e gênero aplicando o relacionamento nas tabelas, filtrando os que possuem avaliação maior que 4, ordenando por filme.
```sql=
SELECT f.id_filme,
f.nm_filme,
g.id_genero,
g.nm_genero
FROM tb_filme_genero fg
INNER JOIN tb_filme f ON f.id_filme = fg.id_filme
INNER JOIN tb_genero g ON g.id_genero = fg.id_filme
WHERE vl_avaliacao > 4;
```
### 3. Selecionar filme, avaliação, lançamento aplicando o relacionamento nas tabelas, filtrando os filmes disponíveis com gênero igual a ‘ação’, ordenando por avaliação.
```sql=
SELECT f.nm_filme,
f.vl_avaliacao,
f.dt_lancamento
FROM tb_filme_genero fg
INNER JOIN tb_filme f ON f.id_filme = fg.id_filme
INNER JOIN tb_genero g ON g.id_genero = fg.id_filme
WHERE g.nm_genero = 'Ação'
ORDER BY f.vl_avaliacao;
```
### 4. Selecionar filme, avaliação, lançamento, disponível, gênero aplicando o relacionamento nas tabelas, filtrando os filmes que possuam os gêneros ‘romance’ e ‘comédia’.
```sql=
SELECT f.nm_filme,
f.vl_avaliacao,
f.dt_lancamento,
f.bt_disponivel,
g.nm_genero
FROM tb_filme_genero fg
INNER JOIN tb_filme f ON f.id_filme = fg.id_filme
INNER JOIN tb_genero g ON g.id_genero = fg.id_filme
WHERE g.nm_genero in ('Romance', 'Comédia');
```
### 5. Crie mais 5 consultas personalizadas conforme sua vontade que explore filtros como: >, >=, <, <=, =, <>, LIKE, IN, BETWEEN, Funções de Texto/Número/Data
```sql=
SELECT f.nm_filme,
g.nm_genero
FROM tb_filme_genero fg
INNER JOIN tb_filme f ON f.id_filme = fg.id_filme
INNER JOIN tb_genero g ON g.id_genero = fg.id_filme
WHERE f.nm_filme like '%s';
SELECT fg.id_filme,
fg.id_genero
FROM tb_filme_genero fg
INNER JOIN tb_filme f ON f.id_filme = fg.id_filme
INNER JOIN tb_genero g ON g.id_genero = fg.id_filme
WHERE fg.id_filme >= 3;
SELECT f.nm_filme,
f.dt_lancamento
FROM tb_filme_genero fg
INNER JOIN tb_filme f ON f.id_filme = fg.id_filme
INNER JOIN tb_genero g ON g.id_genero = fg.id_filme
WHERE f.dt_lancamento between '2017-01-01' and '2020-12-31';
SELECT f.nm_filme,
f.vl_avaliacao
FROM tb_filme_genero fg
INNER JOIN tb_filme f ON f.id_filme = fg.id_filme
INNER JOIN tb_genero g ON g.id_genero = fg.id_filme
WHERE f.vl_avaliacao > 4 and
g.nm_genero = 'Ficção Científica';
SELECT f.bt_disponivel,
fg.id_filme
FROM tb_filme_genero fg
INNER JOIN tb_filme f ON f.id_filme = fg.id_filme
INNER JOIN tb_genero g ON g.id_genero = fg.id_filme
WHERE f.nm_filme like 'A%';
```
{"metaMigratedAt":"2023-06-15T23:56:59.304Z","metaMigratedFrom":"Content","title":"Session Two: Getting Better | Banco de Dados","breaks":true,"contributors":"[{\"id\":\"f2f98191-1ff5-4afd-8e66-66ff77c4c5b1\",\"add\":4933,\"del\":18}]"}