Prof. Eduardo Bento da Rocha / BAN-II Fone: 47-9964-3507 www.youngarts.com.br/ban2 [email protected] CCT – Joinville Laboratório SQL Básico - Continuação ALUNO CODIGO INTEGER NOME VA RCHA R(40) GRA U CHA R(7) IDA DE DECIMA L(2) MATRICULA CODIGOTURMA CHA R(4) CODIGOA LUNO DECIMA L(8) NOTA DECIMA L(3) TURMA SIGLA CHA R(7) NUMERO DECIMA L(2) CODIGO DECIMA L(4) NNA LUNOS DECIMA L(3) MINISTRA PROFESSOR INTEGER CODIGO DECIMA L(4) LIVRO VA RCHA R(50) DISCIPLINA SIGLA CHA R(7) NOME VA RCHA R(25) SIGLA PREREQ CHA R(7) NNCRED DECIMA L(2) PROFESSOR CODIGO INTEGER NOME VA RCHA R(40) GRA U CHA R(7) IDA DE DECIMA L(2) Como resolver o problema: Usando o comando Join: O Join pode ser do tipo: LEFT JOIN, RIGHT JOIN, FULL JOIN, INNER JOIN: JOINS 1) SELECT * FROM TURMA SIGLA NUMERO CODIGO NNALUNOS SCE-179 1 100 30 SMA-179 1 101 25 SMA-179 2 102 30 SCE-200 1 103 30 SCE-200 2 104 40 SCE-200 3 105 35 3 106 35 3 107 35 3 108 35 SCE-201 3 109 35 4) SELECT T.CODIGO, T.SIGLA, D.NOME FROM TURMA T LEFT JOIN DISCIP D ON T.SIGLA = D.SIGLA 2) SELECT * FROM DISCIP SIGLA NOME SIGLAPR NNCRED EREQ SMA-179 4 SCE-179 Base de Dados SMA-179 Algebra SCE-200 Lab. Base SCE-179 de Dados SCE-202 Programa SCE-200 ção e Análise 3 4 4 3) Selecione todas as turmas, com o código, sigla e o nome da disciplina se houver: SELECT T.CODIGO, T.SIGLA, D.NOME FROM TURMA T, DISCIP D WHERE T.SIGLA = D.SIGLA CODIGO 100 103 104 105 101 102 SIGLA SCE-179 SCE-200 SCE-200 SCE-200 SMA-179 SMA-179 NOME Base de Dados Lab. Base de Dados Lab. Base de Dados Lab. Base de Dados Algebra Algebra CODIGO 100 101 102 103 104 105 106 107 108 109 SIGLA SCE-179 SMA-179 SMA-179 SCE-200 SCE-200 SCE-200 NOME Base de Dados Álgebra Álgebra Lab. Base de Dados Lab. Base de Dados Lab. Base de Dados SCE-201 5) SELECT T.CODIGO, T.SIGLA, D.NOME FROM TURMA T RIGHT JOIN DISCIP D ON T.SIGLA = D.SIGLA CODIGO 100 101 102 103 104 105 0 SIGLA SCE-179 SMA-179 SMA-179 SCE-200 SCE-200 SCE-200 NOME Base de Dados Algebra Algebra Lab. Base de Dados Lab. Base de Dados Lab. Base de Dados Programação e Análise 6) SELECT T.CODIGO, T.SIGLA, D.NOME FROM TURMA T FULL JOIN DISCIP D ON T.SIGLA = D.SIGLA CODIGO SIGLA 100 SCE-179 101 SMA-179 102 SMA-179 103 SCE-200 104 SCE-200 105 SCE-200 0 106 107 108 109 SCE-201 NOME Base de Dados Álgebra Álgebra Lab. Base de Dados Lab. Base de Dados Lab. Base de Dados Programação e Análise TYPECASTS Typecast é uma forma de de converter tipos de dados para outros formatos. CAST(‘TESTE’ AS VARCHAR(20)), CAST(NULL AS INTEGER). UNIONS Podemos eventualmente unir duas linhas de consultas simplesmente utilizando a palavra reservada UNION. Caso: Selecionar todos os alunos e professores para uma pesquisa de idade: SELECT NOME, IDADE FROM ALUNO UNION SELECT NOME, IDADE FROM PROFESSOR NOME Adao IDADE 30 Adriana Alice Amalia Amauri Ana Anselmo Ari Artur Carlitos Carlos Catarina Celia Celina Celso Cesar Cibele Cicero Corina Eduardo 45 35 39 34 31 31 25 41 21 21 23 20 23 22 21 21 22 25 26 Exercício: 1) Crie um relatório com o seguinte formato: Relatório Pesquisa de Idades: QUANTIDADE MAIOR IDADE MENOR IDADE 10 25 20 Resposta: SELECT CAST('- Relatório Pesquisa de Idades:' AS VARCHAR(40)) TIPO, CAST(NULL AS INTEGER) VALOR FROM RDB$DATABASE UNION SELECT CAST('QUANTIDADE' AS VARCHAR(40)) TIPO, COUNT(*) FROM ALUNO UNION SELECT CAST('MAIOR IDADE' AS VARCHAR(40)) TIPO, MAX(IDADE) FROM ALUNO UNION SELECT CAST('MENOR IDADE' AS VARCHAR(40)) TIPO, MIN(IDADE) FROM ALUNO ORDER BY 1 Exercícios: 1) Construa um codigo SQL para geração do seguinte relatório: SIGLA SCE-179 SCE-179 SCE-179 SCE-179 SCE-179 SCE-179 SCE-179 NOME NOTA Carlitos 7 Carlos 8 Celia 6 Celina 4 Celso 9 Cesar 9 Cicero 7 -------------------------Maior Nota: 9 SCE-200 SCE-200 SCE-200 SCE-200 SCE-200 SCE-200 SCE-200 SCE-200 SCE-200 SCE-200 Carlitos Carlos Catarina Celia Celina Celso Cesar Cibele Cicero Corina -------------------------Maior Nota: 4 4 8 9 8 7 7 5 10 9 10 Resposta: SELECT T.SIGLA INTERNO, 1 INDICE, T.SIGLA, A.NOME, M.NOTA FROM ALUNO A, MATRICULA M, TURMA T WHERE A.CODIGO = M.CODIGOALUNO AND M.CODIGOTURMA = T.CODIGO UNION SELECT T.SIGLA, 2 INDICE, CAST('' AS CHAR(7)), CAST('--------------------------' AS VARCHAR(40)), CAST(NULL AS INTEGER) FROM MATRICULA M, TURMA T WHERE M.CODIGOTURMA = T.CODIGO GROUP BY 1,2/ UNION SELECT T.SIGLA, 3 INDICE, CAST('' AS CHAR(7)), CAST('Maior Nota: ' AS VARCHAR(40)), MAX(M.NOTA) FROM MATRICULA M, TURMA T WHERE M.CODIGOTURMA = T.CODIGO GROUP BY 1,2 UNION SELECT T.SIGLA, 4 INDICE, CAST('' AS CHAR(7)), CAST('' AS VARCHAR(40)), CAST(NULL AS INTEGER) FROM MATRICULA M, TURMA T WHERE M.CODIGOTURMA = T.CODIGO ORDER BY 1,2 2) Construa um código SQL para criação de uma listagem de disciplinas cadastradas, indicando no final da listagem uma totalização com quantidade.