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