Você está na página 1de 57

Programação e Sistemas de Informação

Modulo14 – Linguagem de Manipulação de Dados

Sumário:
Funções de cálculo e agregação de dados no SQL:
-Função AVG;
-Função MAX;
-Função MIN.
Funções de cálculo – Função AVG
2

Para além das funções COUNT e SUM abordadas na ultima aula


pode-se ainda utilizar as funções AVG, MAX e MIN.

A função AVG (de Average, média em inglês) devolve a média em


relação aos valores do campo indicado, tendo em conta
eventualmente, algum critério de seleção aplicado.
3

Funções de cálculo – Função MAX

A função MAX (de máximo) devolve o maior valor encontrado no


campo indicado, tendo em conta eventualmente, algum critério de
seleção aplicado.
4
Funções de cálculo – Função MIN

A função MIN (de mínimo) devolve o menor valor encontrado no


campo indicado, tendo em conta eventualmente, algum critério de
seleção aplicado.

Nota: As funções MAX e MIN também podem ser utilizadas


com campos tipo texto, nestes casos, devolvem os dados tendo
em conta a sua posição na ordem alfabética.
5

Próxima aula

 Pesquisas com agregação de dados no SQL.


Programação e Sistemas de Informação
Modulo14 – Linguagem de Manipulação de Dados

Sumário:
Pesquisas com agregação de dados no SQL:
- Utilizando a cláusula GROUP BY;
- Utilizando a cláusula HAVING.
7

Pesquisa com agregação de dados

As consultas de agregação de dados permitem analisar dados, e,


em conjunto com as funções de agregação, executar cálculos sobre
o conteúdo das tabelas.

No SQL é possível realizar dois tipos de consultas com agregação


de dados:
 Baseadas na instrução SELECT com a cláusula GROUP
BY.
 Baseadas na instrução SELECT com a cláusula HAVING.
8
Pesquisa com agregação de dados–Clausula GROUP BY

A cláusula GROUP BY permite combinar registos com valores


idênticos no campo especificado, num só registo. Sobre cada
grupo é executada a função de agregação de dados definida na
cláusula SELECT.
Relembrando a sintaxe do comando SELECT, agora incluindo a
cláusula GROUP BY :
Pesquisa com agregação de dados–Clausula GROUP BY
9

Os argumentos expressão1, expressão2 … da cláusula GROUP


BY podem referenciar campos, cálculos sobre campos ou
constantes.

Podem existir no máximo 10 expressões como argumentos da


cláusula.

A ordem de indicação das expressões determina a ordem dos


níveis de agrupamento, do maior para o mais pequeno.
10

Pesquisa com agregação de dados–Clausula GROUP BY

Exemplo:
11

Pesquisa com agregação de dados – Causula HAVING

A cláusula HAVING é idêntica à cláusula WHERE.


A cláusula WHERE determina quais os registos que devem ser
apresentados. Qualquer critério definido nesta cláusula é aplicado
antes dos registos serem sujeitos a cálculos ou agregações.
Já qualquer critério definido com a cláusula HAVING é aplicado
depois dos registos serem agrupados.
Isto permite aplicar critérios de seleção sobre o resultado
calculado para cada grupo.
12

Pesquisa com agregação de dados –Clausula HAVING


Relembrando a sintaxe do comando SELECT, agora incluindo a
cláusula HAVING:

Expressão-having – critério pelo qual será feita a seleção sobre o


resultado calculado para cada grupo. Pode usar-se os
operadores de comparação.
13

Pesquisa com agregação de dados –Clausula HAVING

Exempl
o:
SELECT codempresa, sum (valorprojecto)
FROM projecto
GROUP BY codempresa
HAVING sum(valorprojeto) > 380000.00;
14

Próxima aula

 Pesquisas com duas ou mais tabelas.


Programação e Sistemas de Informação
Modulo14 – Linguagem de Manipulação de Dados

Sumário:

Pesquisas com duas ou mais tabelas no SQL.


16

Pesquisa com duas ou mais tabelas

A caraterística fundamental de uma base de dados relacional reside no fato de se


estabelecerem relacionamentos entre tabelas.
Nas consultas podemos incluir várias tabelas numa instrução SELECT, na linha
FROM. Contudo, a junção de duas ou mais tabelas numa consulta tem de ter em
conta o modo como as tabelas estão relacionadas entre si.
Quando se utiliza duas ou mais tabelas numa consulta deve evitar-se usar
instruções sem estabelecer o respetivo relacionamento entre as tabelas, isto é sem
incluir na cláusula WHERE a igualdade entre os campos comuns.
Quando existem campos com o mesmo nome em tabelas diferentes, cada um
deles deve ser identificado incluindo o nome da tabela a que pertence seguida de
um ponto e do nome do campo. Exemplo: empresa.codempresa
17

Pesquisa com duas ou mais tabelas

Exemplo1:
18

Pesquisa com duas ou mais tabelas

Exemplo2
: SELECT nome, email, idprojecto
FROM arquitecto, projarq
WHERE arquitecto.nridordem = projarq.nridordem
19

Próxima aula

 Clausula JOIN.
Programação e Sistemas de Informação
Modulo14 – Linguagem de Manipulação de Dados

Sumário:

Clausula JOIN:
- INNER JOIN;

- RIGHT JOIN;

- LEFT JOIN.
21

INNER JOIN

Para além da utilização da clausula WHERE vista na ultima


aula, outra forma de efetuar pesquisas com duas ou mais
tabelas, obtendo dados relacionados, é utilizando a clausula
INNER JOIN.
A cláusula INNER JOIN representa uma ligação entre
dois campos permitindo assim relacionar tabelas em
consultas.
O INNER JOIN faz a interseção entre as tabelas retornando
apenas as “ligações comuns”.
22

INNER JOIN

Sintaxe geral da clausula INNER JOIN:

SELECT tabela1.campo, tabela2.campo


FROM tabela1 INNER JOIN tabela2
ON tabela1.campo = tabela2.campo;

Se não se colocar a condição ON, o SGDB vai pegar no


primeiro campo da tabela1 e vai juntar a todos os da tabela2 e
assim sucessivamente para todos os campos da tabela1.
23

INNER JOIN

Considere a seguinte base de dados constituída pelas tabelas Marca


e Automóvel:
24

INNER JOIN

Ao executar a consulta :
SELECT Nome_Marca, Matricula, Modelo
FROM Marca INNER JOIN Automovel ON Marca.Cod_Marca=Automovel.Marca;

o resultado é o seguinte:
Mostra todos os registos da tabela
Marca que possuem um registo
correspondente na tabela Automóvel.
Essa correspondência é feita através do
campo que contem o código da marca
nas duas tabelas.
Oito automóveis estão associados a
alguma marca, enquanto que os demais
não.
25

RIGHT JOIN

O RIGHT JOIN faz a intersecção de duas tabelas retornando


os dados de acordo com a tabela da direita (a segunda tabela
que foi declarada), independente de no relacionamento com a
tabela da esquerda não existir o valor do campo de
relacionamento.

SELECT tabela1.campo, tabela2.campo


FROM tabela1 RIGHT JOIN tabela2
ON tabela1.campo = tabela2.campo;
26

RIGHT JOIN
Exemplo:
SELECT Nome_Marca, Matricula, Modelo
FROM Marca RIGHT JOIN Automovel ON Marca.Cod_Marca = Automovel.Marca;

Com o RIGHT JOIN serão


apresentados todos os automóveis,
mesmo aqueles que não estejam
associados a nenhum registo da
tabela Marcas.
207, 307 e 300C são modelos que
estão registados na tabela
Automóveis, mas não estão
associados a nenhuma marca.
27

LEFT JOIN

O LEFT JOIN faz o relacionamento de duas tabelas retornando


todos os campos da tabela à esquerda (a primeira tabela que foi
declarada), independente de no relacionamento com a tabela da
direita não existir o valor do campo de relacionamento.

SELECT tabela1.campo, tabela2.campo


FROM tabela1 LEFT JOIN tabela2
ON tabela1.campo = tabela2.campo;
28

LEFT JOIN
SELECT Nome_Marca, Matricula, Modelo
FROM Marca LEFT JOIN Automovel ON Marca.Cod_Marca=Automovel.Marca;

Exemplo: O LEFT JOIN faz a junção das duas tabelas


“dando” preferência aos registos da tabela
Marcas.
Todos os registros da tabela marcas serão
mostrados, independente de haver
correspondência na tabela carros. Quando
não houver correspondência na tabela carros,
será mostrado o valor NULL ou nulo.
As marcas General Motors, Renault e
Mercedes Benz não tem nenhum carro
registado, mesmo assim elas apareceram no
resultado.
29

Resumindo...

Junto com o INNER JOIN, existem o LEFT JOIN e o RIGHT JOIN, que
funcionam de maneira semelhante.
O INNER JOIN, faz o relacionamento entre duas tabelas e depois exibe o que
está nas duas tabelas do relacionamento indicado.
O LEFT JOIN faz a mesma coisa, porém retorna os dados de acordo com a
tabela da esquerda (a primeira tabela que foi declarada), independentemente de
no relacionamento com a tabela da direita possuir ou não o valor do campo de
relacionamento.
O RIGHT JOIN faz o mesmo que o LEFT JOIN, porém retorna os dados de
acordo com a tabela da direita (a segunda tabela que foi declarada),
independentemente de no relacionamento com a tabela da esquerda possuir ou
não o valor do campo de relacionamento.
30

WHERE versus JOIN

A nível de resultado final, não existem diferenças entre junções via JOINs ou
via cláusula WHERE. A utilização da cláusula JOIN resulta de uma evolução
da linguagem SQL, embora possam ser utilizadas ambas as formas uma vez que
versões mais recentes tentam sempre manter a compatibilidade com versões
mais antigas.
Se ambas produzem o mesmo resultado, quais serão as razões para preferir
uma construção em detrimento de outra?
 Clareza de código: O uso de JOIN’s não “polui” o código. As junções na
cláusula WHERE confundem, pois não se sabe, com um simples olhar, o que é
filtro e o que é junção. É mau encontrar um instrução SQL com 20 condições
variando entre junções e filtros.
31

WHERE versus JOIN

 Evolução: Se o padrão ANSI92 especifica operadores de junção


específicos (JOIN’s) então será melhor utilizá-los. Especificar
junções na cláusula WHERE só demonstra uma certa resistência em
evoluir e adotar notações mais modernas.
 Flexibilidade: Supondo que uma junção é feita via cláusula
WHERE e que posteriormente o efeito INNER JOIN tenha de ser
substituído por um RIGHT JOIN. Se a junção foi feita via JOIN
basta trocar algumas palavras chaves. Se a junção foi feita via
cláusula WHERE pode ser bem mais complicado.
32

Próxima aula

 Uniões em SQL.
Programação e Sistemas de Informação
Modulo14 – Linguagem de Manipulação de Dados

Sumário:

Uniões em SQL:

- UNION e UNION ALL.


34

UNION
UNION
Une duas operações de pesquisa (SELECT).
As duas pesquisas devem ter o mesmo número de campos, e
estes devem de ser do mesmo tipo de dados.
O resultado apenas apresentará registos distintos.

SELECT campo1, campo2 FROM tabela1


UNION
SELECT campo1, campo2 FROM tabela2;

Nota: Caso os nomes dos campos sejam diferentes nas duas tabelas,
os nomes dos campos resultantes são os dos campos presentes no
primeiro SELECT.
35

UNION

Considere-se uma base de dados referente a uma empresa . Esta


base de dados contem as seguintes duas tabelas:
36

UNION
Considere a seguinte consulta-união:
SELECT Nome, Vencimento FROM Empregados_Guimarães
UNION
SELECT Nome_Empregado, Vencimento FROM Empregados_Lisboa;

Nota: Ao contrário das uniões, uma consulta baseada numa


associação (cláusula inner join) cria uma tabela virtual contendo
somente os registos relacionados .
37

UNION ALL

UNION ALL

Tem igual comportamento ao UNION, mas este apresenta todos


os resultados mesmo os repetidos.

SELECT campo1, campo2 FROM tabela1


UNION ALL
SELECT campo1, campo2 FROM tabela1;
38

UNION ALL
Executando a seguinte consulta – união:

SELECT Nome, Vencimento FROM Empregados_Guimarães


UNION ALL
SELECT Nome_Empregado, Vencimento FROM Empregados_Lisboa;
39

Próxima aula

 Subpesquisas em SQL.
Programação e Sistemas de Informação
Modulo14 – Linguagem de Manipulação de Dados

Sumário:
Subpesquisas em SQL.
41

Subpesquisas
Pesquisas encadeadas no SQL
Por vezes é necessário obter alguns dados para posteriormente serem
utilizados como condições de outras pesquisas. Pode fazer-se
recorrendo a uma nova estrutura SELECT-FROM-WHERE contida
na cláusula WHERE da pesquisa exterior.
NOTA:
Nas pesquisas encadeadas
OP podem utilizar-se todos os
operadores (desiganados
na sintaxe geral por OP)
vistos anteriormente-
lógicos/comparação
42

Subpesquisas
Exemplo1: Uma só tabela
Pretende-se saber todos os números de projetos, zona e
codempresa das empresas que têm projetos no Porto: Resultado
SELECT idprojecto, zona, codempresa do
FROM projecto Pesquisa SELECT A
servirá de
WHERE codempresa IN B critério ao
(SELECT codempresa FROM projecto SELECT B
WHERE zona=“Porto”); Pesquisa (Exterior)
A
Nota: As pesquisas encadeadas começam sempre pela pesquisa
encadeada e só depois vem a pesquisa exterior. Neste exemplo
executa primeiro o SELECT A e com o resultado deste executa o
SELECT B.
43

Subpesquisas
Exemplo2 – Duas tabelas

Pretende-se saber o nome da empresa que tem projetos no Porto.


Neste caso, é necessário utilizar duas tabelas, pois na tabela
projeto não existe o nome da empresa

SELECT codempresa, nome


FROM empresa inner join projecto
On empresa.codempresa = projecto.codempresa
WHERE codempresa IN
(SELECT codempresa
FROM projecto
WHERE zona=“porto”);
44

Subpesquisas

Por vezes é possível substituir pesquisas encadeadas por pesquisas


simples sem subpesquisas.
O exemplo anterior pode ser substituído por uma pesquisa simples
com duas tabelas, pois o resultado que se quer obter é o nome da
empresa.
SELECT empresa.codempresa, nome
FROM empresa INNER JOIN projecto
ON empresa.codempresa=projecto.codempresa
Where zona=“porto”;
45

Subpesquisas
Exemplo3 – Duas tabelas
Nota: Por vezes pode ser necessário usar as funções de calculo
nas pesquisas e com o resultado dessas funções fazer novas
pesquisas.
Neste caso, pretende-se saber qual o código e o nome das
empresas cujo valor dos projetos é superior à média dos mesmos.
SELECT projecto.codempresa, nome
FROM empresa INNER JOIN projecto
ON empresa.codempresa=projecto.codempresa
WHERE valorprojecto > (SELECT AVG (valorprojecto) FROM projecto);
46

Subpesquisas

As subpesquisas deverão ser utilizadas quando:

• Existe uma elevada complexidade do critério especificado na


clausula WHERE;

• Se pretende uma maior velocidade de processamento das


pesquisas;

• Não é possível obter os resultados pretendidos através de


uma pesquisa simples ( uso de funções).
47

Próxima aula

 Manipulação de dados em tabelas usando a


linguagem SQL.
Programação e Sistemas de Informação
Modulo14 – Linguagem de Manipulação de Dados

Sumário:
Manipulação de dados em tabelas no SQL:
-Inserção;
-Atualização;
-Eliminação;
-Visualização;
49

Manipulação de dados em Tabelas – Inserção de dados


Inserir dados em tabelas usando o SQL – Comando
INSERT INTO
Uma vez definida a estrutura da base de dados, dever-se-á introduzir
valores nas tabelas que a constituem. Para tal usa-se o comando
INSERT INTO.
Sintax
e:
Tabela – nome da tabela onde vamos inserir os dados;
Campo – nome do campo onde se pretende inserir valores; esta indicação é
opcional. Quando usada pode-se indicar apenas os campos para os quais temos
dados. Se não forem indicados os campos, deve indicar-se todos os valores para os
mesmos.
Valor – o valor que se pretende introduzir no campo.
50

Manipulação de dados em Tabelas – inserção de Dados

Exemplo1- Pretende-se:

INSERT INTO Empresa


(CodEmpresa, nome, Morada, telefone)
VALUES (1, “Ramiro & João, Lda”, “Rua de Cima, 24”, 253421345);
51

Manipulação de dados em Tabelas – Inserção de dados


Exemplo2 – Pretende-se:

INSERT INTO Empresa


(CodEmpresa, nome, Morada, telefone)
VALUES (2, “Mota & Companhia”, “Parque Industrial, lote13”,253567543),
(3, “Raniro & Filhos”, “Travessa das Flres, 34”, 229872138),
(4, “Construções cari”, Rua da Caldeiroa, 15”, 253412529);
Nota: Em cada instrução pode-se inserir um ou mais registos. Cada
registo é separado do seguinte por virgula (,) e só no último ponto e
virgula (;).
52

Manipulação de dados em Tabelas- Inserção de dados

Também aqui a introdução de dados nas tabelas deve ser realizada


de forma a que não haja violação da integridade referencial. Assim
sendo, para inserir dados na tabela Projecto deve-se ter em conta o
campo codEmpresa. Os valores a inserir neste campo devem já estar
inseridos na tabela Empresa, caso contrário ocorre uma violação da
integridade referencial.

INSERT INTO Projecto Este código de


VALUES (8, “Guimarães”,320000.00, 2); empresa já
existe na tabela
Empresa
Nota: Como foram inseridos valores em todos os campos não é necessário
colocar o nome do campo.
53

Manipulação de dados em Tabelas–Actualização de dados


Alterar os dados em tabelas usando o SQL – Comando
UPDATE
Pode também ser necessário proceder à alteração dos valores de uma
tabela. Para tal usa-se o comando UPDATE.

Sintaxe:

tabela – nome da tabela onde se vai alterar os dados;


nome_campo – nome do campo onde se quer alterar
valores;
expressão – novo valor para o campo;
condição – a condição para o campo que se quer
alterar.
54

Manipulação de dados em Tabelas – Actualização de dados

Exemplo:
UPDATE Empresa
SET telefone = 253675436
WHERE codEmpresa = 2;
55

Manipulação de dados em Tabelas –Eliminação de dados


Eliminar dados em tabelas usando o SQL –
Comando DELETE
Por vezes pode ser necessário eliminar dados numa tabela da base de
dados.
O comando para Eliminar dados em tabelas no MySQL é DELETE.
Sintax
e:
nome_tabela – é o nome da tabela onde se encontram os
dados a eliminar.
condição – condição de eliminação dos dados
Nota: Este comando deve ser usado com cuidado, pois, uma condição
errada pode apagar vários registos indevidamente, ou então a ausência
de uma condição faz apagar todos os registos de uma tabela.
56

Manipulação de dados em Tabelas – Eliminação de


dados

Exemplo:DELETE FROM Empresa


WHERE codEmpresa = 2;
57

Manipulação de dados em Tabelas – Visualização de dados


Visualizar os dados em tabelas usando o SQL –
Comando SELECT
Depois de inserir dados numa tabela podemos visualizar o seu
conteúdo através do comando:

SELECT * FROM tabela;

Exemplo: SELECT * FROM Empresa;

Você também pode gostar