# Banco de Dados | SQL **Autor:** Matheus Rafael Morato Rocha **Turma:** InfoC **Número:** 40 [TOC] ## Modelagem 1: Netflix > Create script ```sql= create table tb_genero ( id_genero int primary key auto_increment, ds_genero varchar(200), bt_ativo bool ); create table tb_filme ( id_filme int primary key auto_increment, nm_filme varchar(200), 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), foreign key (id_filme) references tb_filme (id_filme) ); insert into tb_genero (ds_genero,bt_ativo) values ("ação",true), ("drama",true), ("romance",true), ("guerra",true), ("terror",true); insert into tb_filme (nm_filme,vl_avaliacao,bt_disponivel) values ("Velozes e Furiosos",6,true), ("Até o Último Homem",8,true), ("John Wick: Um Novo Dia Para Matar",10,true), ("O Diabo de Cada Dia",4,true), ("Por Lugares Incríveis",9,true); insert into tb_filme_genero (id_filme,id_genero) values (1,1), (2,4), (3,1), (4,2), (5,3), (5,5), (1,5), (4,2), (3,5), (5,1); UPDATE tb_filme_genero SET id_genero = 4 WHERE id_filme = 5; DELETE FROM tb_filme_genero WHERE id_filme = 4; ``` > Insert script ```sql= insert into tb_genero (ds_genero,bt_ativo) values ("ação",true), ("drama",true), ("romance",true), ("guerra",true), ("terror",true); insert into tb_filme (nm_filme,vl_avaliacao,bt_disponivel) values ("Velozes e Furiosos",6,true), ("Até o Último Homem",8,true), ("John Wick: Um Novo Dia Para Matar",10,true), ("O Diabo de Cada Dia",4,true), ("Por Lugares Incríveis",9,true); insert into tb_filme_genero (id_filme,id_genero) values (1,1), (2,4), (3,1), (4,2), (5,3), (5,5), (1,5), (4,2), (3,5), (5,1); UPDATE tb_filme_genero SET id_genero = 4 WHERE id_filme = 5; UPDATE tb_genero SET ds_genero = "Rock" WHERE id_genero = 2; UPDATE tb_filme SET nm_filme = "WHATSAPP 2" WHERE id_filme = 2; DELETE FROM tb_filme_genero WHERE id_filme = 9; DELETE FROM tb_genero WHERE id_genero = 5; DELETE FROM tb_filme WHERE id_filme = 5; ``` > Select script ```sql= -- Selecionar fime, gênero aplicando o relacionamento nas tabelas, sem filtros, ordenando por filme. SELECT G.ds_genero, F.nm_filme FROM tb_filme_genero as FG INNER JOIN tb_filme as F JOIN tb_genero as G ON FG.id_genero = G.id_genero AND FG.id_filme = F.id_filme ORDER BY nm_filme; -- 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. SELECT FG.id_filme, F.nm_filme, FG.id_genero, G.ds_genero FROM tb_filme_genero as FG INNER JOIN tb_filme as F JOIN tb_genero as G ON FG.id_genero = G.id_genero AND FG.id_filme = F.id_filme WHERE F.vl_avaliacao = 4 ORDER BY nm_filme; -- 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. SELECT F.nm_filme, F.vl_avaliacao, F.dt_lancamento FROM tb_filme_genero as FG INNER JOIN tb_filme as F JOIN tb_genero as G ON FG.id_genero = G.id_genero AND FG.id_filme = F.id_filme WHERE G.ds_genero = 'ação' AND F.bt_disponivel = true ORDER BY F.vl_avaliacao; -- 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’. SELECT F.nm_filme, F.vl_avaliacao, F.dt_lancamento, G.bt_ativo, G.ds_genero FROM tb_filme_genero as FG INNER JOIN tb_filme as F JOIN tb_genero as G ON FG.id_genero = G.id_genero AND FG.id_filme = F.id_filme WHERE G.ds_genero in ('romance','comedia'); -- Consulta personalizada 1 SELECT G.ds_genero, F.nm_filme, F.vl_avaliacao, F.bt_disponivel FROM tb_filme_genero as FG INNER JOIN tb_filme as F JOIN tb_genero as G ON FG.id_genero = G.id_genero AND FG.id_filme = F.id_filme WHERE G.ds_genero in ('guerra','drama','terror') ORDER BY vl_avaliacao; -- Consulta personalizada 2 SELECT G.ds_genero, F.nm_filme, F.vl_avaliacao, F.bt_disponivel FROM tb_filme_genero as FG INNER JOIN tb_filme as F JOIN tb_genero as G ON FG.id_genero = G.id_genero AND FG.id_filme = F.id_filme WHERE F.vl_avaliacao BETWEEN 5 AND 8 ORDER BY F.nm_filme; -- Consulta personalizada 3 SELECT G.ds_genero, F.nm_filme, F.bt_disponivel FROM tb_filme_genero as FG INNER JOIN tb_filme as F JOIN tb_genero as G ON FG.id_genero = G.id_genero AND FG.id_filme = F.id_filme WHERE F.vl_avaliacao BETWEEN 5 AND 8 ORDER BY F.nm_filme; -- Consulta personalizada 4 SELECT G.ds_genero, F.nm_filme, F.bt_disponivel FROM tb_filme_genero as FG INNER JOIN tb_filme as F JOIN tb_genero as G ON FG.id_genero = G.id_genero AND FG.id_filme = F.id_filme WHERE F.vl_avaliacao BETWEEN 5 AND 8 AND LENGTH (F.nm_filme) <= 9 AND F.bt_disponivel = true OR F.dt_lancamento between '2010-01-01' and '2020-01-01' ORDER BY F.nm_filme; -- Consulta personalizada 5 SELECT G.ds_genero, F.nm_filme, F.bt_disponivel FROM tb_filme_genero as FG INNER JOIN tb_filme as F JOIN tb_genero as G ON FG.id_genero = G.id_genero AND FG.id_filme = F.id_filme WHERE LENGTH (F.nm_filme) <= 9 AND F.bt_disponivel = true ORDER BY F.nm_filme ASC; ``` ## Modelagem 2: Aluno > Create script ```sql= create table tb_aluno ( id_aluno int primary key auto_increment, nm_turma varchar(200), nr_ano_letivo int, nm_aluno varchar(200), nr_chamada int, ds_sexo varchar(20), tp_status varchar(1) ); create table tb_disciplina ( id_disciplina int primary key auto_increment, nm_disciplina varchar(200), nm_professor varchar(200) ); create table tb_boletim ( id_boletim int primary key auto_increment, id_aluno int, id_disciplina int, vl_nota int, qtd_faltas int, foreign key (id_aluno ) references tb_aluno (id_aluno), foreign key (id_disciplina) references tb_disciplina (id_disciplina) ); ``` > Insert script ```sql= insert into tb_aluno (nm_turma,nr_ano_letivo,nm_aluno,nr_chamada,ds_sexo,tp_status) values ("2 ano",2,"Matheus Rafael",27,"Masculino","F"), ("1 ano",1,"Eduardo Guilherme ",40,"Masculino","F"), ("3 ano",3,"Jheniffer Fernandes",20,"Feminino","D"); insert into tb_disciplina (nm_disciplina,nm_professor) values ("Física","José Silva"), ("Matematica","Bruno de Oliveira"), ("Geografia","Ewerton Rocha"), ("Português","Elisabete Rosa"), ("Inglês","Leticia de Santos"); insert into tb_boletim (id_aluno,id_disciplina,vl_nota,qtd_faltas) values (1,1,4,2),(1,2,5,3),(1,3,6,5),(1,4,8,2),(1,5,2,10); insert into tb_boletim (id_aluno,id_disciplina,vl_nota,qtd_faltas) values (2,1,4,10),(2,2,6,2),(2,3,10,8),(2,4,4,2)(2,5,2,0); insert into tb_boletim (id_aluno,id_disciplina,vl_nota,qtd_faltas) values (3,1,10,0),(3,2,6,2),(3,3,1,8),(3,4,4,2),(3,5,8,0); UPDATE tb_aluno SET nr_chamada = 10 WHERE id_aluno = 2; UPDATE tb_disciplina SET nm_professor = "Alex Rodrigues" WHERE id_disciplina = 2; UPDATE tb_boletim SET vl_nota = 4 WHERE id_disciplina = 2; DELETE FROM tb_aluno WHERE id_aluno = 1; DELETE FROM tb_disciplina WHERE id_disciplina = 2; DELETE FROM tb_boletim WHERE vl_nota = 1; ``` > Select script ```sql= SELECT A.nm_aluno, A.nm_turma, A.nr_chamada, A.ds_sexo, A.nm_aluno, D.nm_disciplina, D.nm_professor, B.vl_nota, B.qtd_faltas FROM tb_boletim as B INNER JOIN tb_aluno as A JOIN tb_disciplina as D ON B.id_disciplina = D.id_disciplina AND B.id_aluno = A.id_aluno; -- Selecionar aluno, turma, ano, disciplina, nota aplicando o relacionamento nas tabelas, sem filtros, ordenando por aluno. SELECT A.nm_aluno, A.nm_turma, A.nr_ano_letivo, D.nm_disciplina, B.vl_nota FROM tb_boletim as B INNER JOIN tb_aluno as A JOIN tb_disciplina as D ON B.id_disciplina = D.id_disciplina AND B.id_aluno = A.id_aluno ORDER BY A.nm_aluno; -- 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. SELECT A.nm_aluno, A.nm_turma, A.nr_ano_letivo, D.nm_disciplina, B.vl_nota FROM tb_boletim as B INNER JOIN tb_aluno as A JOIN tb_disciplina as D ON B.id_disciplina = D.id_disciplina AND B.id_aluno = A.id_aluno WHERE A.nm_aluno = "2 ano" OR A.nr_ano_letivo = 2 ORDER BY B.vl_nota DESC; -- 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 SELECT A.nm_aluno, A.nm_turma, A.nr_ano_letivo, D.nm_disciplina, B.vl_nota FROM tb_boletim as B INNER JOIN tb_aluno as A JOIN tb_disciplina as D ON B.id_disciplina = D.id_disciplina AND B.id_aluno = A.id_aluno WHERE B.vl_nota >= 5 AND A.nr_ano_letivo = 3 AND A.nm_turma = "3 ano" ORDER BY A.nm_turma,A.nr_chamada; -- Consulta personalizada 1 SELECT A.nm_aluno, A.nm_turma, A.nr_ano_letivo, D.nm_disciplina, D.nm_professor, B.qtd_faltas, B.vl_nota FROM tb_boletim as B INNER JOIN tb_aluno as A JOIN tb_disciplina as D ON B.id_disciplina = D.id_disciplina AND B.id_aluno = A.id_aluno WHERE A.nr_ano_letivo = 2 AND A.nm_aluno LIKE 'M%' AND B.qtd_faltas <= 5 ORDER BY B.qtd_faltas ASC; -- Consulta personalizada 2 SELECT A.nm_aluno, A.nm_turma, D.nm_disciplina, B.vl_nota FROM tb_boletim as B INNER JOIN tb_aluno as A JOIN tb_disciplina as D ON B.id_disciplina = D.id_disciplina AND B.id_aluno = A.id_aluno WHERE A.nr_ano_letivo BETWEEN 1 AND 2 AND LENGTH (D.nm_disciplina) >= 7 AND B.vl_nota IN (5,10,2); -- Consulta personalizada 3 SELECT A.nm_aluno, A.nm_turma, A.nr_chamada, A.ds_sexo, A.nm_aluno FROM tb_boletim as B INNER JOIN tb_aluno as A JOIN tb_disciplina as D ON B.id_disciplina = D.id_disciplina AND B.id_aluno = A.id_aluno WHERE A.nr_chamada <= 27 AND A.ds_sexo = "Masculino" OR A.nm_aluno = 'G%' AND B.qtd_faltas BETWEEN 5 AND 8 ORDER BY A.nm_aluno ASC; -- Consulta personalizada 4 SELECT A.nr_chamada, D.nm_disciplina, D.nm_professor, B.vl_nota, B.qtd_faltas FROM tb_boletim as B INNER JOIN tb_aluno as A JOIN tb_disciplina as D ON B.id_disciplina = D.id_disciplina AND B.id_aluno = A.id_aluno WHERE B.qtd_faltas < 6 AND B.vl_nota IN (5,8,7,10,2) AND A.tp_status = "F" ORDER BY A.nm_aluno DESC; -- Consulta personalizada 5 SELECT A.nr_chamada, D.nm_disciplina, D.nm_professor, B.vl_nota, B.qtd_faltas, A.tp_status FROM tb_boletim as B INNER JOIN tb_aluno as A JOIN tb_disciplina as D ON B.id_disciplina = D.id_disciplina AND B.id_aluno = A.id_aluno WHERE B.qtd_faltas> 6 AND A.tp_status = "F" ORDER BY A.nm_aluno DESC; ```
{"metaMigratedAt":"2023-06-15T23:45:41.453Z","metaMigratedFrom":"Content","title":"Banco de Dados | SQL","breaks":true,"contributors":"[{\"id\":\"0ba297e4-eafa-413a-9b17-c3ef1702e693\",\"add\":15258,\"del\":2738}]"}
Expand menu