---
# System prepended metadata

title: 'Session two: Getting better | Banco de Dados | 2° bimestre'

---

# 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');
```