Eng. de Software | Projeto e otimização de banco de dado | Linguagem SQL – Parte 3
Tabelas de exemplo
Como vimos na aula anterior, a linguagem de manipulação de dados é usada para modificar registros em um banco de dados. Observe as seguintes tabelas de exemplo:
Select – funções de agregação
Soma um campo numérico.
Sintaxe: SELECT SUM(Nome_Campo) FROM Nome_tabela;
Calcula o valor médio de um conjunto de valores para um campo numérico.
Sintaxe: SELECT AVG(Nome_Campo) FROM Nome_tabela;
Conta a quantidade de dados para um campo.
Sintaxe: SELECT COUNT(Nome_Campo) FROM Nome_tabela;
Mostra o maior valor em um conjunto de dados para um campo.
Sintaxe: SELECT MAX(Nome_Campo) FROM Nome_tabela;
Mostra o menor valor em um conjunto de dados para um campo.
Sintaxe: SELECT MIN(Nome_Campo) FROM Nome_tabela;
Exemplo: valor mínimo, máximo e médio das mensalidades dos cursos cuja duração é de 4 anos.
SELECT MIN(MensC), MAX(MensC), AVG(MensC)
FROM Curso
WHERE DuracaoC = 4
Agrupamentos
A cláusula GROUP BY permite agrupar o conteúdo por uma ou mais colunas.
Cláusula having
A cláusula having seleciona grupos de linhas após as agregações e agrupamentos serem efetuados.
Exemplo: salas que são utilizadas para mais de uma aula e as respectivas quantidades destas.
Junção e junção interna ( INNER JOIN )
Junção
Uma junção entre duas tabelas corresponde a um produto cartesiano que gera uma relação resultante que contém todas as colunas das tabelas originais.
Na cláusula FROM, utilizamos os nomes das tabelas que possuem os campos que queremos trazer.
Junção interna ( INNER JOIN )
Na junção interna entre duas tabelas, somente são recuperadas as linhas da tabela resultante que satisfazem a condição de junção.
Os atributos comuns às duas tabelas quando utilizados no comando SELECT ou no critério de junção devem ser qualificados da seguinte forma:
TABELA.ATRIBUTO. Se um ALIAS for utilizado na cláusula FROM, este substitui o nome da tabela dentro da consulta. Existem duas possibilidades de sintaxe para a junção interna:
Exemplo 1: Todas as informações sobre a grade e as disciplinas do curso C4.
SELECT *
FROM Grade, Disciplina
WHERE Disciplina.CodD = Grade.CodD
AND CodC = ‘C4’
Nessa sintaxe, as tabelas são separadas na cláusula FROM pelo comando INNER JOIN (ou apenas JOIN em alguns bancos de dados), e a condição de junção fica após a cláusula ON. Outros critérios para filtrar linhas ficam na cláusula WHERE.
No exemplo, todas as colunas das duas tabelas estarão presentes na tabela resultante.
Usando joing using
Caso as colunas usadas na junção tenham o mesmo nome nas duas relações, podemos usar o comando USING.
Exemplo: todas as informações sobre a grade e as disciplinas do curso C4.
SELECT *
FROM Grade INNER JOIN Disciplina
USING (CodD)
WHERE CodC = ‘C4’
Usando ALIAS
Podemos substituir o nome da relação dentro da consulta usando um ALIAS. As referências à relação podem ser substituídas em qualquer local da consulta.
Exemplo: código, nome, carga horária, sala e curso das disciplinas que estão na grade.
SELECT G.CodD, NomeD, CargaD, Sala, CodC
FROM Disciplina D, Grade G
WHERE D.CodD = G.CodD
Ou na sintaxe
SELECT G.CodD, NomeD, CargaD, Sala, CodC
FROM Disciplina D INNER JOIN Grade G
ON D.CodD = G.CodD
Várias tabelas no JOIN
Podemos realizar a junção com mais de duas relações na consulta. Basta que cada par de relações tenha um critério de junção correspondente.
Autojunção
Ocorre quando uma relação faz junção com ela mesma.
Exemplo 1: nomes das disciplinas cujo prerrequisito é “Cálculo1”.
SELECT Disc1.NomeD
FROM Disciplina Disc1, Disciplina Disc2
WHERE Disc2.CodD = Disc1.PreReqD AND
(APOSTILA COM ERRO… sem continuidade do conteúdo!)