# Session Two: Getting Better Autor: Jonathan Fernando Costa Galo [toc] # Modelagem Filme - Sistema de Banco de Dados ## DDL: Criar as tabelas respeitando os relacionamentos do DER. ```sql= CREATE TABLE tb_genero ( id_genero int primary key auto_increment, nm_genero varchar(255), bt_ativo bool ); CREATE TABLE tb_filme ( id_filme int primary key auto_increment, nm_filme varchar(255) not null, dt_lancamento date, vl_avaliacao decimal(15,2) default 5, bt_disponivel bool not null ); 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), FOREIGN KEY (id_genero) REFERENCES tb_genero(id_genero) ); ``` ## DDL: Inserir 5 filmes, 5 gêneros, 10 vínculos de filme X gênero nas tabelas. ```sql= INSERT INTO tb_genero (nm_genero, bt_ativo) VALUES ('Comédia', true), ('Ação', true), ('Terror', true), ('Romance', true), ('Drama', true), ('Suspense', true), ('Aventura', true); INSERT INTO tb_filme (nm_filme, dt_lancamento, vl_avaliacao, bt_disponivel) VALUES ('Gente Grande', '2010-01-02', 9, true), ('As branquelas', '2008-01-02', 8.5, true), ('Velozes e Furiosos 9', '2021-07-22', 9.8, true), ('Como Eu Era Antes de Você', '2016-06-16', 9.6, true), ('A Maldição da Casa Winchester', '2018-03-01', 7.4, true), ('As Panteras', '2019-11-14', 6.8, true), ('Velozes & Furiosos: Hobbs & Shaw', '2019-08-01', 8, true); INSERT INTO tb_filme_genero (id_filme, id_genero) VALUES (1, 1), (2, 1), (2, 2), (3, 2), (4, 4), (4, 5), (5, 3), (5, 6), (6, 1), (6, 2), (7, 2), (7, 7); ``` ## DDL: Alterar 1 filme, 1 gênero, 1 vínculo de filme X gênero das tabelas. ```sql= UPDATE tb_filme SET vl_avaliacao = 6.9 WHERE id_filme = 6; UPDATE tb_genero SET nm_genero = 'Ficção' WHERE id_genero = 6; UPDATE tb_filme_genero SET id_genero = 2 WHERE id_genero = 7; ``` ## DDL: Remover 1 filme, 1 gênero, 1 vínculo de filme X gênero das tabelas. ```sql= DELETE FROM tb_genero WHERE nm_genero = 'Aventura'; DELETE FROM tb_filme_genero WHERE id_filme = 7; DELETE FROM tb_filme WHERE dt_lancamento = '2019-08-01'; ``` ## DML: 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 ASC; ``` # DML: 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.nm_filme, f.id_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_genero WHERE f.vl_avaliacao > 4 ORDER BY f.nm_filme ASC; ``` ## DML: 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_genero WHERE g.nm_genero = 'Ação' AND f.bt_disponivel = true ORDER BY f.nm_filme ASC; ``` ## DML: 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_genero WHERE g.nm_genero = 'Romance' OR g.nm_genero = 'Comédia'; ``` # Modelagem Aluno - Sistema de Banco de Dados ## DDL: Criar as tabelas respeitando os relacionamentos do DER. ```sql= CREATE TABLE tb_disciplina ( id_disciplina int primary key auto_increment, nm_disciplina varchar(255), nm_professor varchar(255) ); CREATE TABLE tb_aluno ( id_aluno int primary key auto_increment, nm_turma varchar(255), nr_ano_letivo int, nm_aluno varchar(255), nr_chamada int, ds_sexo varchar(20), tp_status varchar(1) ); CREATE TABLE tb_boletim ( id_boletim int primary key auto_increment, id_aluno int, id_disciplina int, vl_nota decimal(15,2), qtd_faltas int, FOREIGN KEY (id_aluno) REFERENCES tb_aluno(id_aluno), FOREIGN KEY (id_disciplina) REFERENCES tb_disciplina(id_disciplina) ); ``` ## DDL: Inserir 3 alunos, 5 disciplinas, e as notas de cada aluno nas disciplinas. ```sql= INSERT INTO tb_disciplina (nm_disciplina, nm_professor) VALUES ('Banco de Dados', 'Bruno'), ('Analise de Sistemas', 'Bruno'), ('Hardware', 'Robertão'), ('Inglês', 'Clayton'), ('Matématica', 'Carlos'); INSERT INTO tb_aluno (nm_turma, nr_ano_letivo, nm_aluno, nr_chamada, ds_sexo, tp_status) VALUES ('Avengers', 8, 'Kleber de Andrade', 15, 'Masculino', 'F'), ('Minecraft', 6, 'Maria da Silva', 24, 'Feminino', 'F'), ('Pinóquio', 3, 'Carol de Andrade', 14, 'Feminino', 'F'); INSERT INTO tb_boletim (id_aluno, id_disciplina, vl_nota, qtd_faltas) VALUES (1, 1, 9, 2), (1, 2, 7.5, 0), (1, 3, 7, 1), (1, 4, 8, 0), (1, 5, 8.5, 3), (2, 1, 5, 6), (2, 2, 9, 0), (2, 3, 8, 2), (2, 4, 7, 2), (2, 5, 10, 1), (3, 1, 9, 0), (3, 2, 8, 4), (3, 3, 6, 2), (3, 4, 6, 3), (3, 5, 8, 0); ``` ## DDL: Alterar 1 aluno, 1 disciplina, 2 notas. ```sql= UPDATE tb_aluno SET nm_aluno = 'Maria Clara do Carmo' WHERE id_aluno = 2; UPDATE tb_disciplina SET nm_disciplina = 'PMT' WHERE id_disciplina = 4; UPDATE tb_boletim SET qtd_faltas = 0 WHERE id_disciplina = 5; ``` ## DDL: Remover 1 nota, 1 disciplina, 1 aluno. ```sql= ``` ## DML: 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_disciplina, b.vl_nota FROM tb_boletim b INNER JOIN tb_disciplina d ON d.id_disciplina = b.id_disciplina INNER JOIN tb_aluno a ON a.id_aluno = b.id_aluno ORDER BY nm_aluno ASC; ``` ## DML: 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_disciplina, b.vl_nota FROM tb_boletim b INNER JOIN tb_disciplina d ON d.id_disciplina = b.id_disciplina INNER JOIN tb_aluno a ON a.id_aluno = b.id_aluno WHERE a.nm_turma = 'Avengers' AND a.nr_ano_letivo = 8 ORDER BY vl_nota ASC; ``` ## DML: 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_disciplina, b.vl_nota FROM tb_boletim b INNER JOIN tb_disciplina d ON d.id_disciplina = b.id_disciplina INNER JOIN tb_aluno a ON a.id_aluno = b.id_aluno WHERE b.vl_nota > 5 AND a.nm_turma = 'Minecraft' ORDER BY nr_ano_letivo AND nm_turma AND nr_chamada ASC; ``` ## DML: 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_disciplina d ON d.id_disciplina = b.id_disciplina INNER JOIN tb_aluno a ON a.id_aluno = b.id_aluno WHERE b.vl_nota <= 5 AND a.nm_turma = 'Minecraft' AND a.nr_ano_letivo = 6; ```
{"metaMigratedAt":"2023-06-15T23:53:47.207Z","metaMigratedFrom":"Content","title":"Session Two: Getting Better","breaks":true,"contributors":"[{\"id\":\"f59e6c25-3cb1-4556-be8b-0ad8b709be8c\",\"add\":8271,\"del\":7}]"}
Expand menu