Linguagem deManipulação de Dados
Linguagem de Manipulação de Dados 2
Conteúdos
Introdução ao SQL Comando SELECT – Extracção de Dados
Pesquisas Simples Restrições na pesquisa de dados (Cláusula Where) Ordenação Junção de Tabelas Funções de Agregação Cláusulas Group By e Having Subpesquisas Uniões
Linguagem de Manipulação de Dados 3
Introdução ao SQL
Linguagem Standard para manipulação de dados É reconhecida por qualquer SGBD Serve de interface entre o utilizador e o Sistema
Gestor (como SQL Server, MS Access, Oracle, etc.) Os comando SQL correspondem a instruções
que visam manipular ou aceder aos dados existentes na Base de Dados
Linguagem de Manipulação de Dados 4
Características da Linguagem SQL
Com a linguagem SQL é possível: Criar, Alterar e Remover tabelas, chaves, índices,
views, etc; Inserir, Alterar e Apagar dados; Interrogar a Base de Dados (Pesquisar dados); Controlar o acesso dos utilizadores; Obter a garantia da consistência e integridade dos
dados.
Comando SELECT
A interrogação de qualquer Base de Dados Relacional faz-se sempre utilizando o comando SELECT
Em seguida é apresentada a sintaxe do comando onde: Parêntesis rectos indicam que o componente é opcional; Chavetas indicam que o utilizador terá que escolher um
dos valores colocados entre as chavetas; Palavras maiúsculas representam as palavras reservadas.
Linguagem de Manipulação de Dados 5
Comando SELECT
SELECT Campo1, Campo2, …, CampoN, *FROM Tabela1, …, TabelaK[WHERE Condição][GROUP BY …][HAVING …][ORDER BY …]
Linguagem de Manipulação de Dados 6
Pesquisas Simples
Aplicação simplificada do comando SELECT
SELECT Campo1, Campo2, …, CampoN, *FROM Tabela1, …, TabelaK
Em seguida são apresentados alguns exemplos de pesquisas simples.
Linguagem de Manipulação de Dados 7
Pesquisas Simples
Tendo em conta a seguinte tabela:
Seleccione todos os registos da tabela
SELECT BI, NomeFROM Empregado
ouSELECT * FROM Empregado
ou
SELECT empregado.BI, empregado.Nome FROM Empregado
Linguagem de Manipulação de Dados 8
Pesquisas Simples
Para as pesquisas que se seguem vamos assumir a seguinte tabela:
Linguagem de Manipulação de Dados 9
Pesquisas Simples
Seleccionar todos os nomes registados (sem repetições de nomes)
SELECT DISTINCT NomeFROM Empregado
Renomear Colunas e Tabelas
SELECT BI, Salario [AS] OrdenadoFROM Empregado [AS] Emp
ouSELECT Emp.BI, Emp.Salario AS OrdenadoFROM Empregado Emp
Linguagem de Manipulação de Dados 10
Pesquisas Simples
Apresentar o ordenado real (líquido) dos empregados (Salário - Descontos)
SELECT BI, Nome, Salario - Descontos AS OrdenadoFROM Empregado
Apresentar os empregados com o ordenado líquido superior a 500
SELECT BI, Nome, Salario-Descontos AS Ord FROM EmpregadoWHERE Salario - Descontos > 500
Linguagem de Manipulação de Dados 11
Cláusula WHERE
Permite restringir o número de linhas a apresentar.
Para se restringir o conjunto de registos é necessário enviar uma condição ao comando SELECTSELECT …FROM ..WHERE Condição
Linguagem de Manipulação de Dados 12
Operador Descrição
= Igual a
> Maior que
< Menor que
>= Maior ou Igual que
<= Menor ou Igual que
<> Diferente
Linguagem de Manipulação de Dados 13
Operadores RelacionaisOperador Exemplo
AND Cond1 AND Cond2
OR Cond1 OR Cond2
NOT NOT Condição
Operadores Lógicos
Operadores
Linguagem de Manipulação de Dados 14
Operador Descrição Exemplo
BETWEEN Entre dois valores BETWEEN Valor1 AND Valor2
IN Pertencente a um conjunto de valores
Campo IN (val1, val2, valN)
IS Tratamento de Nulos. Permite verificar se um campo está vazio.
Campo IS NULL
LIKE Comparação de Strings.Permite fazer comparações de partes da string através de WildCards.
Campo LIKE ‘T*’
Access Outros SGBD Significado
* % Qualquer string
? _ (underscore)
Um carácter qualquer
Wildcards
Outros operadores
Cláusula ORDER BY
A resposta a uma pergunta pode ser ordenada segundo uma ou mais colunas.
Para proceder à ordenação usa-se a cláusula ORDER BY seguido das colunas que queremos ordenar.
Por defeito as colunas são ordenadas ascendentemente.
Podemos mudar a direcção da ordenação usando as partículas ASC e DESC.
Linguagem de Manipulação de Dados 15
Esta cláusula, se existir, aparece sempre no final do comando SELECT
SELECT Campo1, Campo2, …, CampoN, *FROM Tabela1, …, TabelaK[WHERE Condição][GROUP BY …][HAVING …][ORDER BY Campo1 [ASC|DESC], Campo2 [ASC|DESC], …]
Linguagem de Manipulação de Dados 16
Cláusula ORDER BY
Pesquisas Simples
Apresentar os empregados ordenados pelo salário de forma decrescente
SELECT BI, Nome, SalarioFROM EmpregadoORDER BY Salario DESC
Apresentar todos os nomes registados (sem repetições de nomes) de forma ordenada
SELECT DISTINCT NomeFROM EmpregadoORDER BY Nome
Linguagem de Manipulação de Dados 17
Suponha as seguintes tabelas
Linguagem de Manipulação de Dados 18
NumEmp Nome Posto NumSeccao
1 Ana Programador 10
2 Nuno Engenheiro 70
CodSeccao Seccao
10 Fabrico
20 Comercial
70 Recursos Humanos
Empregado = {NumEmp, Nome, Posto, NumSeccao}
Seccao = {CodSeccao, Seccao}
Pesquisa com Várias Tabelas
Apresente todos os empregados e nome da secção a que pertencem.SELECT * FROM Empregado, Seccao
Linguagem de Manipulação de Dados 19
NumEmp Nome Posto NumSeccao CodSeccao Seccao
1 Ana Programador 10 10 Fabrico
2 Nuno Engenheiro 70 10 Fabrico
1 Ana Programador 10 20 Comercial
2 Nuno Engenheiro 70 20 Comercial
1 Ana Programador 10 70 Recursos Humanos
2 Nuno Engenheiro 70 70 Recursos Humanos
Resultado Incorrecto!
Pesquisa com Várias Tabelas
Pesquisa com Várias Tabelas
O comando anterior juntou as duas tabelas efectuando o produto cartesiano. Ou seja, associou a cada linha da tabela Empregado
o conjunto das linhas da tabela Seccao. Como a tabela Empregado contém 2 registos e a
tabela Seccao contém 3 registos o resultado final foi de 2*3=6 registos.
Linguagem de Manipulação de Dados 20
Ora o que se pretende é obter a informação existente nas duas tabelas, mas estas estão relacionadas através dos campos NumSeccao (tab. Empregado) e CodSeccao (tab. Seccao).
Portanto interessa visualizar o registo da tabela Seccao que tem o CodSeccao igual. Isto é, em que NumSeccao=CodSeccao.
Linguagem de Manipulação de Dados 21
Pesquisa com Várias Tabelas
Pesquisa com Várias Tabelas
Ou seja:SELECT * FROM Empregado, SeccaoWHERE NumSeccao=CodSeccao
Resultado
Linguagem de Manipulação de Dados 22
NumEmp Nome Posto NumSeccao CodSeccao Seccao
1 Ana Programador 10 10 Fabrico
2 Nuno Engenheiro 70 70 Recursos Humanos
Pesquisa com Várias Tabelas
O comando:SELECT * FROM Empregado, SeccaoWHERE NumSeccao = CodSeccao
É equivalente a:SELECT * FROM Empregado INNER JOIN Seccao ON NumSeccao=CodSeccao
Podendo ainda ser traduzido em:SELECT e.*, s.* FROM Empregado e INNER JOIN Seccao s ON e.NumSeccao=s.CodSeccao
Linguagem de Manipulação de Dados 23
Como se está a pesquisar dados em tabelas que estão relacionadas entre si, é aconselhável utilizar os operadores próprios para realizar essas junções.
Deste modo separam-se as selecções e as junções de uma forma clara.
Uma junção normal em SQL é chamada de junção interna (INNER JOIN).
Após a indicação da junção é necessário referir as colunas responsáveis pela junção (cláusula ON).
Linguagem de Manipulação de Dados 24
Junções de Tabelas (JOIN)
Existem várias variantes do JOIN: INNER JOIN - apenas aparecem os que fazem match; LEFT JOIN – além dos registos que fazem match, os
registos da tabela esquerda que não existam na direita também aparecem.
RIGHT JOIN – além dos registos que fazem match, aparecem todos os restantes registos da tabela direita que não existam na esquerda.
No LEFT JOIN e RIGHT JOIN (Outer Joins) quando o registo não existe numa das tabelas (não existe match) os valores aparecem a NULL.
Linguagem de Manipulação de Dados 25
Junções de Tabelas (JOIN)
Junções de Tabelas (JOIN)
Sintaxe do JOINTabela1 JUNÇÃO Tabela2 CLÁUSULA
Traduzindo para SQLTabela1 [INNER|LEFT|RIGHT] JOIN Tabela2 ON Tabela1.Campo=Tabela2.Campo
Linguagem de Manipulação de Dados 26
Referências
DAMAS, Luís: SQL, FCA
Linguagem de Manipulação de Dados 27