# Session two: Getting better | Banco de Dados | 2° bimestre **Nome** Kevin Ribeiro de Andrade **Número** 27 **Turma** INFO A ## Tabela de relacionamento de filmes e afins **DDL 1. Criar as tabelas respeitando os relacionamentos do DER. 2. Inserir 5 filmes, 5 gêneros, 10 vínculos de filmeXgênero nas tabelas. 3. Alterar 1 filme, 1 gênero, 1 vínculo de filmeXgênero das tabelas. 4. Remover 1 filme, 1 gênero, 1 vínculo de filmeXgênero das tabelas.** ```sql= CREATE TABLE TB_GENERO ( id_genero int primary key auto_increment, ds_genero varchar (250), bt_ativo bool ); CREATE TABLE TB_FILME( id_filme int primary key auto_increment, nm_filme varchar (255), dt_lancamento date, vl_avaliacao decimal(15,2), bt_disponivel bool ); CREATE TABLE TB_FILME_GENERO( id_filme_genero int primary key auto_increment, id_filme int, id_genero int, FOREIGN KEY (id_genero) REFERENCES TB_GENERO (id_genero) ON DELETE CASCADE, FOREIGN KEY (id_filme) REFERENCES TB_FILME (id_filme) ON DELETE CASCADE ); INSERT INTO TB_GENERO( ds_genero, bt_ativo) VALUES ('Ação', true), ('Drama', true), ('Aventura', true), ('terror', false), ('suspense', true), ('comédia', true), ('Romance', true); INSERT INTO TB_FILME (nm_filme, dt_lancamento, vl_avaliacao, bt_disponivel) VALUES ('Jujutsu kaisen o filme', '2021-12-21', 0, false), ('No game no life - 0', '2018-05-17', 9.1, true), ('Eternos', '2022-03-16', 0, false), ('viuva negra', '2021-05-13', 8.6, false), ('Batman- reboot', '2022-07-18', 0, false); INSERT INTO TB_FILME_GENERO(id_filme, id_genero) VALUES (1, 1), (2, 3), (2, 1), (3, 1), (5, 1), (2, 6), (1, 7), (1, 4), (5, 5), (5, 7); UPDATE TB_FILME_GENERO FG INNER JOIN TB_GENERO G ON G.id_genero = FG.id_genero INNER JOIN TB_FILME F ON F.id_filme = FG.id_filme SET FG.id_genero = 2 WHERE FG.id_filme_genero = 1; UPDATE TB_FILME F SET F.nm_filme = 'Sou eu' WHERE F.id_filme = 2; UPDATE TB_GENERO G SET G.ds_genero = 'horror' WHERE G.id_genero = 5; DELETE FROM TB_FILME_GENERO /*INNER JOIN TB_GENERO G ON G.id_genero = F.id_genero INNER JOIN TB_FILME F ON F.id_filme = F.id_filme*/ WHERE id_filme_genero = 7; DELETE FROM TB_FILME WHERE id_filme = 3; DELETE FROM TB_GENERO WHERE id_genero = 7; ``` **1. Selecionar fime, gênero aplicando o relacionamento nas tabelas, sem filtros, ordenando por filme.** ```sql= SELECT F.nm_filme, G.ds_genero FROM TB_FILME_GENERO FG INNER JOIN TB_GENERO G ON G.id_genero = FG.id_genero INNER JOIN TB_FILME F ON F.id_filme = FG.id_filme ORDER BY FG.id_filme desc; ``` **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= ou SELECT FG.id_filme, F.nm_filme, FG.id_genero, G.ds_genero FROM TB_FILME_GENERO FG INNER JOIN TB_GENERO G ON G.id_genero = FG.id_genero INNER JOIN TB_FILME F ON F.id_filme = FG.id_filme WHERE F.vl_avaliacao >= 4 ORDER BY F.nm_filme; ``` **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_GENERO G ON G.id_genero = FG.id_genero INNER JOIN TB_FILME F ON F.id_filme = FG.id_filme WHERE G.ds_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, G.ds_genero, F.dt_lancamento, bt_disponivel FROM TB_FILME_GENERO FG INNER JOIN TB_GENERO G ON G.id_genero = FG.id_genero INNER JOIN TB_FILME F ON F.id_filme = FG.id_filme WHERE G.ds_genero = "Romance" AND G.ds_genero = "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, F.vl_avaliacao, F.dt_lancamento, F.bt_disponivel, G.ds_genero FROM TB_FILME_GENERO FG INNER JOIN TB_GENERO G ON G.id_genero = FG.id_genero INNER JOIN TB_FILME F ON F.id_filme = FG.id_filme WHERE FG.id_genero = 6 AND FG.id_genero = 7; SELECT FG.id_filme, F.nm_filme, F.vl_avaliacao, F.dt_lancamento, F.bt_disponivel, G.ds_genero FROM TB_FILME_GENERO FG INNER JOIN TB_GENERO G ON G.id_genero = FG.id_genero INNER JOIN TB_FILME F ON F.id_filme = FG.id_filme WHERE F.vl_avaliacao BETWEEN 6 AND 7; SELECT FG.id_filme_genero, F.nm_filme, G.ds_genero FROM TB_FILME_GENERO FG INNER JOIN TB_GENERO G ON G.id_genero = FG.id_genero INNER JOIN TB_FILME F ON F.id_filme = FG.id_filme WHERE F.nm_filme NOT LIKE ('E%'); SELECT F.nm_filme, G.ds_genero, F.vl_avaliacao, F.dt_lancamento, Substring (F.nm_filme, 0, 5) FROM TB_FILME_GENERO FG INNER JOIN TB_GENERO G ON G.id_genero = FG.id_genero INNER JOIN TB_FILME F ON F.id_filme = FG.id_filme; SELECT FG.id_filme_genero, F.nm_filme, G.ds_genero, Dayofweek(F.dt_lancamento) FROM TB_FILME_GENERO FG INNER JOIN TB_GENERO G ON G.id_genero = FG.id_genero INNER JOIN TB_FILME F ON F.id_filme = FG.id_filme; SELECT F.nm_filme, G.ds_genero, F.vl_avaliacao, F.bt_disponivel, concat(F.nm_filme, G.ds_genero) FROM TB_FILME_GENERO FG INNER JOIN TB_GENERO G ON G.id_genero = FG.id_genero INNER JOIN TB_FILME F ON F.id_filme = FG.id_filme; ``` ## Tabela de alunos e afins **DDL 1. Criar as tabelas respeitando os relacionamentos do DER. 2. Inserir 3 alunos, 5 disciplinas, e as notas de cada aluno nas disciplinas. 3. Alterar 1 aluno, 1 disciplina, 2 notas. 4. Remover 1 nota, 1 disciplina, 1 aluno** ```sql= CREATE TABLE TB_DISCPLINA( id_discplina int primary key auto_increment not null, nm_discplina varchar (250) not null, nm_professor varchar (250) null ); CREATE TABLE TB_ALUNO( id_aluno int primary key auto_increment, nm_turma varchar (250) not null, nr_ano_letivo long not null, nm_aluno varchar (250) not null, ds_sexo varchar (20) not null, nr_chamada long not null, tp_status varchar (2) not null ); CREATE TABLE TB_BOLETIM( id_boletim int primary key auto_increment not null, id_aluno int not null, id_discplina int not null, vl_nota decimal(15,2) null, qtd_faltas long not null, FOREIGN KEY (id_aluno) REFERENCES TB_ALUNO (id_aluno) ON DELETE CASCADE, FOREIGN KEY (id_discplina) REFERENCES TB_DISCPLINA (id_discplina) ON DELETE CASCADE ); INSERT INTO TB_DISCPLINA(nm_discplina, nm_professor) VALUES ('Matematica', 'Alexandra de Ddraviski'), ('Ciencias', 'Mauricio de souza'), ('Português', 'Alex Silva de Rockets'), ('Tecnologia', 'Alice da marlix'), ('Historia', 'Krista lenz'); INSERT INTO TB_ALUNO (nm_turma, nr_ano_letivo, nm_aluno, ds_sexo, nr_chamada, tp_status) VALUES ( '2° ano A', 2021, 'Roberto costa', 'M', 28, 'F'), ('3° ano A', 2021, 'Aliciete souza pinto', 'F', 1, 'F'), ('7° ano E', 2021, 'Chitoge Kirisaki', 'F', 7, 'T'), ('1° série F', 2021, 'Aufasto Dramika Dourges', 'M', 2, 'FA'), ('1° ano J', 2021, 'Alioto de Fagundes', 'M', 4, 'T'); INSERT INTO TB_BOLETIM (id_aluno, id_discplina, vl_nota, qtd_faltas) VALUES (1, 5, 1.3, 10), (3, 4, 5.6, 4), (2, 2, 7.8, 2), (5, 5, 9.1, 6), (4, 3, 10, 3); UPDATE TB_BOLETIM B INNER JOIN TB_ALUNO A ON A.id_aluno = B.id_aluno INNER JOIN TB_DISCPLINA D ON D.id_discplina = B.id_discplina SET B.vl_nota = 4 WHERE B.id_discplina = 5; UPDATE TB_BOLETIM B INNER JOIN TB_ALUNO A ON A.id_aluno = B.id_aluno INNER JOIN TB_DISCPLINA D ON D.id_discplina = B.id_discplina SET D.nm_discplina = 'C#' WHERE D.id_discplina = 3; UPDATE TB_BOLETIM B INNER JOIN TB_ALUNO A ON A.id_aluno = B.id_aluno INNER JOIN TB_DISCPLINA D ON D.id_discplina = B.id_discplina SET A.nm_aluno = 'Falcas Alcântara' WHERE A.id_aluno = 3; DELETE FROM TB_BOLETIM WHERE id_boletim = 1; DELETE FROM TB_ALUNO WHERE id_aluno = 2; DELETE FROM TB_DISCPLINA WHERE id_discplina = 5; ``` **1. Selecionar aluno, turma, ano, disciplina, nota aplicando o relacionamento nas tabelas, sem filtros, ordenando por aluno.** ```sql= select A.nm_aluno, A.nm_turma, A.nr_ano_letivo, D.nm_discplina, B.vl_nota FROM TB_BOLETIM B INNER JOIN TB_ALUNO A ON A.id_aluno = B.id_aluno INNER JOIN TB_DISCPLINA D ON D.id_discplina = B.id_discplina ORDER BY A.nm_aluno; ``` **2. Selecionar aluno, turma, ano, disciplina, nota aplicando o relacionamento nas tabelas, filtrando por turma e ano letivo, ordenando por nota da maior para a menor.** ```sql= select A.nm_aluno, A.nm_turma, A.nr_ano_letivo, D.nm_discplina, B.vl_nota FROM TB_BOLETIM B INNER JOIN TB_ALUNO A ON A.id_aluno = B.id_aluno INNER JOIN TB_DISCPLINA D ON D.id_discplina = B.id_discplina WHERE A.nm_turma + A.nr_ano_letivo ORDER BY A.nm_aluno; select A.nm_aluno, A.nm_turma, A.nr_ano_letivo, D.nm_discplina, B.vl_nota FROM TB_BOLETIM B INNER JOIN TB_ALUNO A ON A.id_aluno = B.id_aluno INNER JOIN TB_DISCPLINA D ON D.id_discplina = B.id_discplina WHERE A.nm_turma = '2° ano A' AND A.nr_ano_letivo = 2021 ORDER BY B.vl_nota desc; ``` **3. Selecionar aluno, turma, ano, disciplina, nota aplicando o relacionamento nas tabelas, filtrando os alunos aprovados por ano e turma, ordenando por ano, turma e chamada.** ```sql= select A.nm_aluno, A.nm_turma, A.nr_ano_letivo, D.nm_discplina, B.vl_nota FROM TB_BOLETIM B INNER JOIN TB_ALUNO A ON A.id_aluno = B.id_aluno INNER JOIN TB_DISCPLINA D ON D.id_discplina = B.id_discplina WHERE B.vl_nota >= 5 AND A.nr_ano_letivo + A.nm_turma ORDER BY A.nr_ano_letivo + A.nr_chamada + A.nm_turma; ``` **4. Selecionar aluno, turma, ano aplicando o relacionamento nas tabelas, filtrando os alunos reprovados por ano e turma.** ```sql= select A.nm_aluno, A.nm_turma, A.nr_ano_letivo FROM TB_BOLETIM B INNER JOIN TB_ALUNO A ON A.id_aluno = B.id_aluno INNER JOIN TB_DISCPLINA D ON D.id_discplina = B.id_discplina WHERE B.vl_nota <= 5 AND A.nr_ano_letivo + A.nm_turma; ``` **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 A.nm_aluno, A.nm_turma, A.nr_ano_letivo, D.nm_discplina, B.vl_nota FROM TB_BOLETIM B INNER JOIN TB_ALUNO A ON A.id_aluno = B.id_aluno INNER JOIN TB_DISCPLINA D ON D.id_discplina = B.id_discplina WHERE B.vl_nota BETWEEN 9 AND 10; SELECT A.nm_aluno, A.nm_turma, D.nm_discplina From TB_BOLETIM B INNER JOIN TB_ALUNO A ON A.id_aluno = B.id_aluno INNER JOIN TB_DISCPLINA D ON D.id_discplina = B.id_discplina WHERE D.nm_discplina IN ('historia'); SELECT A.nm_aluno, A.nm_turma, D.nm_discplina FROM TB_BOLETIM B INNER JOIN TB_ALUNO A ON A.id_aluno = B.id_aluno INNER JOIN TB_DISCPLINA D ON D.id_discplina = B.id_discplina WHERE D.nm_discplina NOT IN ('Banco de dados'); SELECT A.nm_aluno, A.nm_turma, sign(B.vl_nota) FROM TB_BOLETIM B INNER JOIN TB_ALUNO A ON A.id_aluno = B.id_aluno INNER JOIN TB_DISCPLINA D ON D.id_discplina = B.id_discplina; SELECT A.nm_aluno, A.nm_turma, B.qtd_faltas FROM TB_BOLETIM B INNER JOIN TB_ALUNO A ON A.id_aluno = B.id_aluno INNER JOIN TB_DISCPLINA D ON D.id_discplina = B.id_discplina WHERE instr(A.nm_aluno, 'B'); ```