BASES DE DADOS I
LTSI/2
Universidade da Beira Interior, Departamento de Informática
Hugo Pedro Proença, 2010/2011
SQL-DML - Operadores
 
Operadores:
 
O SQL incorpora um conjunto de operadores destinados a facilitar
algumas das operações matemáticas mais usuais.
COUNT()  Conta o número de instâncias de uma relação.
  MAX() Devolve o valor máximo de um atributo num conjunto de
instâncias.
  MIN()  Devolve o valor mínimo de um atributo num conjunto de
instâncias.
  AVG() Devolve o valor médio de um atributo num conjunto de
instâncias.
  SUM()Soma um atributo num conjunto de instâncias.
 
SQL-DML - Operadores
 
Operadores:
 
Cada operador serve para executar uma operação matemática
especifica que permitirá a obtenção de dados estatísticos sobre o
conteúdo da base de dados.
 
A informação devolvida por cada operador pode ser aplicada à
totalidade da tabela ou agrupada por valores de atributos da base de
dados.
  Exemplo:
  “Calcular o valor máximo das operações efectuadas”
  “calcular o valor máximo das operações efectuadas por cada
cliente”
SQL-DML - Operadores
 
Operadores:
 
No primeiro exemplo irá calcular o máximo absoluto de toda a
tabela e devolvida uma tabela com 1 linha e 1 coluna.
 
No segundo exemplo, será calculado o máximo agrupado por
cliente. Desta forma será devolvida uma tabela com informação
sobre o cliente e o respectivo valor máximo (“N” linhas e 2 colunas,
“N”=Número de clientes).
SQL-DML - Operadores
 
Operadores:
Valor
SELECT MAX(valor) AS Valor
FROM Venda;
CodCliente
Data
Valor
123
01/01/2004
100
679
01/05/2004
125
129
01/02/2004
12
123
02/07/2004
111
679
06/05/2004
178
178
SELECT CodCliente, MAX(valor)
FROM Venda
GROUP BY CodCliente;
CodCliente
Valor
129
12
123
111
679
178
SQL-DML - Operadores
 
Contar o número de alunos existente.
SELECT COUNT(*) AS TOTAL
FROM Aluno;
 
Qual a nota máxima alcançada à disciplina de “Álgebra”?
SELECT MAX(N.Nota) AS Maximo
FROM Nota N, Disciplina D
WHERE N.CodDisciplina=D.CodDisciplina
AND D.Descricao=“Algebra”;
SQL-DML - Operadores
 
Quantos alunos distintos efectuaram provas a “Análise” no ano 2002?
SELECT COUNT(DISTINCT N.CodAluno) AS Total
FROM Nota N, Disciplina D
WHERE D.CodDisciplina=N.CodDisciplina
AND D.Descricao=“Análise”
AND N.Ano=2002;
 
Quais os docentes cuja categoria è desconhecida?
SELECT *
FROM Docente
WHERE Categoria IS NULL;
SQL-DML - Operadores
 
Qual a nota máxima alcançada por cada
aluno ?
SELECT codAluno, Max(Valor)
FROM Nota
SELECT codAluno, Max(Valor)
FROM Nota
GROUP BY codAluno
SELECT codAluno, Ano, Max(Valor)
FROM Nota
GROUP BY codAluno,
SELECT codAluno, Data, Max(Valor)
FROM Nota
GROUP BY codAluno, Data
SQL-DML
 
Funções de Agregação
 
 
Servem para permitir que os operadores descritos anteriormente
actuem apenas sobre sub-conjuntos de tuplos e não sobre a relação
completa. Utiliza-se para tal a cláusula “GROUP BY”
  Agrupa os tuplos de uma relação segundo um conjunto de atributos.
Exemplo:
  Listar o número total de provas efectuado por disciplina.
SELECT CodDisciplina, COUNT(*) AS Total
FROM Nota
GROUP BY CodDisciplina;
=
SQL-DML
 
Funções de Agregação - Restrições
 
A cláusula “HAVING” serve para actuar como um filtro sobre “GROUP
BY”. Dos vários agrupamentos produzidos pela cláusula “GROUP BY”
apenas aqueles que verificarem a condição presente em “HAVING”
serão apresentados no resultado final.
 
Listar a nota média das disciplinas para as quais já foram realizadas
mais de 1000 provas.
SELECT CodDisciplina, AVG(Nota) AS Media
FROM Nota
GROUP BY CodDisciplina
HAVING COUNT(*) > 1000;
SQL-DML
 
Funções de Agregação - Restrições
 
Apresentar a nota máxima dos alunos que têm média superior a 15.
SELECT CodAluno, MAX(Nota) AS Maximo
FROM Nota
GROUP BY CodAluno
HAVING AVG(Nota) > 15;
SQL-DML
 
Pesquisa de Padrões
 
É possível possível pesquisar informação com base em padrões, através
do operador “LIKE”
 
Exemplo: Seleccionar o código e nome de todos os docentes cujo nome
comece por J.
SELECT CodDocente, Nome
FROM Docente
WHERE Nome LIKE “J%”;
%  Qualquer ocorrência de qualquer caractér.
*  Uma ocorrência de qualquer caractér.
[v1,...vn]  Uma ocorrência dos caracteres apresentados.
SQL-DML
 
Pesquisa de Padrões
 
Seleccionar informação relativa aos clientes que se chamem “João”.
SELECT *
FROM Docente
WHERE Nome =‘João’;
 
Seleccionar informação relativa aos clientes que tenham “João” como
primeiro nome.
SELECT *
FROM Docente
WHERE Nome LIKE ‘João%’;
SQL-DML
 
Pesquisa de Padrões
 
Seleccionar informação relativa aos clientes que tenham ultimo nome
“Silva”
SELECT *
FROM Docente
WHERE Nome LIKE ‘%Silva’;
 
Seleccionar informação relativa aos clientes cujo nome contenha
“Pereira”
SELECT *
FROM Docente
WHERE Nome LIKE ‘%Pereira%’;
SQL-DML
• Pesquisa de Padrões
• Seleccionar informação relativa aos clientes que tenham ultimo nome
“Silva” e primeiro “João”
SELECT *
FROM Docente
WHERE Nome LIKE ‘João%Silva’;
• Seleccionar informação relativa aos clientes cujo nome não contenha
“Andrade”
SELECT *
FROM Docente
WHERE Nome NOT LIKE ‘%Andrade%’;
SQL-DML
 
Sub-Blocos
 
 
É possível encadear vários blocos SQL , normalmente através da
clausula IN (EXISTS, NOT IN, NOT EXISTS).
Qual o nome dos alunos que nunca fizeram nenhuma prova a “Álgebra”?
SELECT Nome
FROM Aluno
WHERE Numero NOT IN (
SELECT DISTINCT CodAluno
FROM Nota N, Disciplina D
WHERE N.CodDisciplina=D.CodDisciplina
AND D.Descricao=“Algebra”);
Primeira a ser executada
Download

Aula 9 - Departamento de Informática da Universidade da Beira