# 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}]"}
Expand menu