Prof. Eduardo Bento da Rocha / BAN-II

Propaganda
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.
Download