0% acharam este documento útil (0 voto)
3 visualizações14 páginas

SQL: Operações de JOIN em Consultas

O documento é um recurso eletrônico sobre desenvolvimento de software, focando em HTML, CSS, JavaScript e PHP, organizado por Evandro Manara Miletto e Silvia de Castro Bertagnolli. Ele inclui exemplos práticos de consultas SQL, como INNER JOIN e OUTER JOIN, além de funções de agregação. O material foi publicado em 2014 e também está disponível em formato impresso.

Enviado por

visaovetorial
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
3 visualizações14 páginas

SQL: Operações de JOIN em Consultas

O documento é um recurso eletrônico sobre desenvolvimento de software, focando em HTML, CSS, JavaScript e PHP, organizado por Evandro Manara Miletto e Silvia de Castro Bertagnolli. Ele inclui exemplos práticos de consultas SQL, como INNER JOIN e OUTER JOIN, além de funções de agregação. O material foi publicado em 2014 e também está disponível em formato impresso.

Enviado por

visaovetorial
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

EVANDRO MANARA MILETTO

SILVIA DE CASTRO BERTAGNOLLI

D E
T O
N
LVIM
E IIE
ENVO
AR EB
S W
W
E
T
N TO
D
F
V I ME P

O
VOL E PH
SEN IPT

S
D E CR
A O VAS
ÃO , JA Ç ÃO
D UÇ , CSS U NIC
A
T RO TML COM
IN H O E
O M AÇÃ
C OR
M
INF
XO
EI
D451 Desenvolvimento de software II [recurso eletrônico] : introdu-
ção ao desenvolvimento web com HTML, CSS, JavaScript e
PHP / Organizadores, Evandro Manara Miletto, Silvia de
Castro Bertagnolli. – Dados eletrônicos. – Porto Alegre :
Bookman, 2014.

Editado também como livro impresso em 2014.


ISBN 978-85-8260-196-9

1. Informática – Desenvolvimento de software. 2. HTML.


3. CSS. 4. JavaScript. 5. PHP. I. Miletto, Evandro Manara.
II. Bertagnolli, Silvia de Castro.

CDU 004.41

Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052

MIletto_Iniciais_eletronica.indd ii 06/05/14 09:22


SELECT [Link] as "nome do cliente", forma_pagto.nome as
"forma de pagto"
FROM cliente CROSS JOIN forma_pagto;

DICA
O resultado da consulta desse exemplo é apresentado na Tabela 6.13.
Como a coluna nome aparece
Conforme é possível observar na tabela abaixo, o resultado da consulta tem 21 nas duas tabelas, é necessário
linhas. Como a operação de CROSS JOIN combina todas as linhas da primeira ta- colocar o nome da tabela, ou
bela com todas as linhas da segunda tabela, o número de linhas resultantes é sem- ”alias”, antes do nome da
pre igual ao número de linhas da tabela A (cliente) multiplicado pelo número de coluna, indicando, assim,
linhas da tabela B (forma_pagto). a qual tabela este campo
pertence.

Tabela 6.13 Resultado da consulta com CROSS JOIN


Nome do cliente Forma de pagto

José dos Ramos Boleto

José dos Ramos Cartão

José dos Ramos Débito

Ana Paula dos Santos Boleto

Ana Paula dos Santos Cartão

Ana Paula dos Santos Débito

Luciano Modelo Boleto


DICA
Luciano Modelo Cartão
A tabela cliente (Tabelaø6.1)
Luciano Modelo Débito tem 7 linhas e a tabela
forma_pagto tem 3 linhas,
Maria Julia Perfeito Boleto
portanto o resultado da
Maria Julia Perfeito Cartão consulta tem 21 linhas (7 ×
Maria Julia Perfeito Débito 3 = 21).

Robson Silva da Silva Boleto

Robson Silva da Silva Cartão


Linguagem SQL

Robson Silva da Silva Débito

Arthur dos Passos Boleto

Arthur dos Passos Cartão

Arthur dos Passos Débito


capítulo 6

Constância Rabelo Boleto

Constância Rabelo Cartão

Constância Rabelo Débito

143

Miletto_06.indd 143 26/03/14 15:26


INNER JOIN
A operação de INNER JOIN ou junção interna é uma das operações mais utilizadas
em consultas que envolvem duas ou mais tabelas. O INNER JOIN faz a junção de
duas tabelas, combinando as linhas que satisfazem a condição de junção. Conside-
re a junção de tabelas A e B. Se a condição de junção for satisfeita para a primeira
linha da tabela A e a primeira linha da tabela B, os dados dessas duas linhas são
combinados em uma linha de resultado.

A sintaxe básica desse comando é a seguinte:

SELECT <campos>
FROM Tabela A INNER JOIN Tabela B
ON condição;

EXEMPLO
O objetivo desse exemplo é mostrar como recuperar o nome do cliente, código do pedido e data/hora
do pedido. Essa consulta envolve a tabela cliente (o nome do cliente está na tabela cliente) e a tabela
pedido (o código e a data do pedido estão na tabela pedido).

As linhas da tabela cliente devem ser combinadas (relacionadas) com as linhas da tabela pedido. Po-
rém, devem ir para o resultado apenas as linhas em que o valor do campo e_mail_cliente é igual nas
duas tabelas. O comando para essa consulta é:

SELECT p.codigo_pedido, [Link], p.data_hora


FROM pedido p INNER JOIN cliente c
ON p.e_mail_cliente=c.e_mail_cliente;

A Figura 6.1 apresenta o INNER JOIN entre as tabelas cliente e pedido.

Tabela pedido Tabela cliente


codigo_pedido e_mail_cliente data_hora nome e_mail_cliente

101 joseramos@[Link] 28/02/2012 13h José dos Ramos Joseramos@[Link]


Desenvolvimento de software II

102 mariajulia@emailcom 18/03/2013 16h Ana Paula dos Santos anapaulasantos@[Link]

.... Luciano Modelo lmodelo@[Link]

.... Maria Jullia Perfeito mariajulia@[Link]

.... ...

107 anapaulasantos@[Link] 19/07/2013 16h Constância Rabelo constanciarabelo@[Link]

Figura 6.1 Exemplo de INNER JOIN.


Fonte: dos autores.

144

Miletto_06.indd 144 26/03/14 15:26


A Tabela 6.14 apresenta o resultado obtido na consulta.

Tabela 6.14 Resultado da consulta utilizando INNER JOIN


codigo_pedido nome data_hora

101 José dos Ramos 28/02/2012 13h

102 Maria Julia Perfeito 18/03/2013 16h

103 Arthur dos Passos 23/04/2013 9h

104 José dos Ramos 04/05/2013 20h

105 Constância Rabelo 17/07/2013 10h

106 Constância Rabelo 18/07/2013 17h

107 Ana Paula dos Santos 19/07/2013 16h

No exemplo acima, a condição de junção utiliza o operador “=”. Assim, podemos


classificar essa operação de junção com um EQUI-JOIN. Existem outros tipos de
JOIN: NON-EQUI-JOIN, NATURAL JOINS, SEF JOINS e OUTER JOINS.

EXEMPLO
Uma consulta pode envolver mais do que duas tabelas. Nesse exemplo, é mostrado como recuperar o
nome do produto, o fabricante e a categoria. Essa consulta envolve três tabelas, pois o nome do produto
está na tabela produto, o nome do fabricante está na tabela fabricante e a categoria, na tabela cate-
goria. Podemos realizar um INNER JOIN entre a tabela produto e a tabela fabricante, pois existe um
campo de ligação entre essas duas tabelas que é o codigo_fabricante. Com a tabela resultante dessa
operação de junção, é realizado um outro Join com a tabela categoria, selecionando as linhas em que
codigo_categoria é igual nas duas tabelas.

SELECT [Link] as "nome do produto", [Link] as "fabricante",


[Link] as "categoria"
FROM produto p INNER JOIN fabricante f
ON p.codigo_fabricante=f.codigo_fabricante
INNER JOIN categoria c
ON p.codigo_categoria = c.codigo_categoria;

As tabelas a seguir apresentam os resultados das operações de junção desse último


exemplo.

145

Miletto_06.indd 145 26/03/14 15:26


Tabela 6.15 Resultado do Join entre as tabelas produto e fabricante
codigo_produto nome ... [Link] codigo_categoria

1001 Celular Smart Samsung 4

1002 Celular Smart 2013 LG 4

1003 Notebook fino Dell 2

1004 Roteador rápido IBM 2

1005 Notebook estelar Positivo 2

1006 Smartphone 2000 Nokia 4

1007 PC Apple 2

Tabela 6.16 Join entre tabela resultante do primeiro Join (produto e fabricante) e a tabela
categoria

codigo_produto [Link] ... [Link] codigo_categoria [Link]

1001 Celular Smart Samsung 4 Telefonia

1002 Celular Smart 2013 LG 4 Telefonia

1003 Notebook fino Dell 2 Informática

1004 Roteador rápido IBM 2 Informática

1005 Notebook estelar Positivo 2 Informática

1006 Smartphone 2000 Nokia 4 Telefonia

1007 PC Apple 2 Informática

EXEMPLO
(Consulta com a utilização de uma condição na cláusula WHERE.) Para recuperar o nome do produto e o
fabricante para os produtos da categoria 4, utilize:

SELECT [Link], [Link]


FROM produto p INNER JOIN fabricante f
ON p.codigo_fabricante=[Link]
INNER JOIN categoria c
ON p.codigo_categoria = c.codigo_categoria
WHERE p.codigo_produto=4;

146

Miletto_06.indd 146 26/03/14 15:26


O resultado do Join dessas três tabelas é o mesmo da consulta anterior (Tabe-
laʸ6.16). Porém, selecionando apenas as linhas que satisfazem a condição codi-
go_categoria = 4, temos o resultado da Tabela 6.17.

Tabela 6.17 Resultado da consulta para os produtos da categoria 4


codigo_produto nome ... [Link] codigo_categoria [Link]

1001 Celular Smart Samsung 4 Telefonia

1002 Celular Smart 2013 LG 4 Telefonia

1006 Smartphone 2000 Nokia 4 Telefonia

OUTER JOIN
O OUTER JOIN ou junção externa recupera todas as linhas de uma tabela, mesmo
quando não exista uma associação entre as tabelas envolvidas na operação. Exis-
tem três tipos de OUTER JOIN:

• tabela_A LEFT OUTER JOIN tabela_B (junção externa à esquerda): são recu-
peradas todas as linhas da tabela A (tabela à esquerda do comando JOIN), mesmo
quando não há uma linha correspondente na tabela B.

• tabela_A RIGHT OUTER JOIN tabela_B (junção externa à direita): são recu-
peradas todas as linhas da tabela B (tabela à direita do comando JOIN), mesmo
quando não há uma linha correspondente na tabela A.

• tabela_A FULL OUTER JOIN tabela_B (junção externa total): são recuperadas
todas as linhas da tabela A e todas as linhas da tabela B, mesmo que não exista
associação entre as linhas dessas tabelas.

EXEMPLO
Nesse exemplo, veremos como recuperar o nome do funcionário e o código dos pedidos associados a
esse funcionário. Mesmo que o funcionário não tenha um pedido, seu nome também deve aparecer no
resultado da consulta. A consulta deve estar ordenada pelo campo usuario.

A tabela funcionario tem os funcionários de códigos: 1001, 1002, 1003 e 1004. Ao analisar a tabela pedido,
é possível verificar que nenhum dos pedidos tem o valor 1004 no campo codigo_funcionario, significan-
do que o funcionário 1004 não fez pedido. Se fosse utilizado o operador INNER JOIN para essa consulta, o
funcionário usr04 (1004) não apareceria no resultado, já que o valor 1004 não aparece nas linhas da tabela
pedido. Então, para resolver essa consulta, precisamos utilizar a junção externa (OUTER JOIN):

SELECT [Link], p.codigo_pedido


FROM funcionario f LEFT OUTER JOIN pedido p
ON f.codigo_funcionario=p.codigo_funcionario
ORDER BY [Link];

147

Miletto_06.indd 147 26/03/14 15:26


A Tabela 6.18 apresenta o resultado da consulta do último exemplo.

Tabela 6.18 Resultado da consulta com LEFT OUTER JOIN


usuario codigo_pedido

usr01 104

usr02 102

usr02 105

usr03 103

usr03 106

usr03 107

usr04

Se a tabela funcionario estiver do lado direito do Join, devemos utilizar o Right


Outer Join, como no exemplo a seguir.

EXEMPLO
SELECT [Link], p.codigo_pedido
FROM pedido p RIGHT OUTER JOIN funcionario f
ON f.codigo_funcionario=p.codigo_funcionario
ORDER BY [Link];

Funções de agregação
O comando SELECT, além de útil para listar os campos desejados no resultado da
consulta, também pode ser utilizado para o retorno de informações agrupadas.
Para isso, utilizamos as funções de agregação, as quais atuam no banco de dados
sobre um determinado conjunto de informações.

Dentre as principais funções de agregação, podemos citar:

• AVG(<atributo>): retorna a média dos valores de um determinado atributo.


Desenvolvimento de software II

• COUNT(*) ou COUNT(<atributo>): retorna a quantidade de registros que sa-


tisfazem a consulta

• MAX(<atributo>): retorna o valor máximo do atributo.

• MIN(<atributo>): retorna o valor mínimo do atributo.

• SUM(<atributo>): retorna a soma dos valores do atributo.

148

Miletto_06.indd 148 26/03/14 15:26


A seguir, conheça os detalhes de cada uma dessas funções de agregação.

Função de agregação AVG


Para que se obtenha a média aritmética a partir de um conjunto de valores numé-
ricos, utiliza-se a função AVG (average) da seguinte forma:

SELECT AVG(atributo)
FROM <tabela>
[WHERE <condição>]

Veja a seguir um exemplo de uso dessa função:

EXEMPLO
Qual é a média dos valores dos produtos da categoria Informática?

SELECT AVG(preco)
FROM produto INNER JOIN categoria
ON produto.codigo_categoria = categoria.codigo_categoria
WHERE [Link] = 'Informática';

As tuplas que satisfazem a condição [Link] = ‘Informática’ estão


destacadas na Tabela 6.19.

Tabela 6.19 Visualização das tuplas que satisfazem a condição de categoria igual
àʸInformática
codigo_ quan- codigo_ codigo_
produto nome preco descricao tidade fabricante categoria

1001 Celular Smart 870 Celular com acesso à Internet 50 10 4

1002 Celular Smart 2013 920 Celular com jogos e roteador 15 30 4

1003 Notebook fino 3400 Tela giratória 10 50 2

1004 Roteador rápido 540 ʸ 5 60 2


Linguagem SQL

1005 Notebook estelar 2500 Preto com conexão 4 80 2

1006 Smatphone 2000 500 ʸ 34 20 4

1007 PC 1300 Com monitor, teclado e mouse 20 70 2

O resultado obtido com a consulta é o seguinte:


capítulo 6

AVG(preco)

1935

149

Miletto_06.indd 149 26/03/14 15:26


Função de agregação COUNT
É utilizada para contar ocorrências que satisfaçam determinada consulta. Pode ser
utilizada também para contar todas as linhas de uma tabela. Essa função é repre-
sentada da seguinte forma:

SELECT COUNT(<atributo>)
FROM <tabela>
[WHERE <condição>]

Veja a seguir um exemplo de uso dessa função.

EXEMPLO
SELECT count(*)
FROM produto

Analisando a Tabela 6.5, temos como retorno da consulta:

COUNT(*)

EXEMPLO
Quantos produtos da categoria Informática temos no banco de dados?

SELECT count(*)
FROM produto INNER JOIN categoria
ON produto.codigo_categoria = categoria.codigo_categoria
WHERE [Link] = 'Informática';

O resultado obtido com a consulta desse último exemplo é o seguinte:


Desenvolvimento de software II

COUNT(*)

Esse resultado pode, também, ser comprovado analisando a Tabela 6.19 e verifican-
do que quatro produtos são da categoria Informática (codigo_categoria=2).

No caso de substituirmos o “*” na função de agregação por um determinado atri-


buto, somente os valores válidos, ou seja, os não nulos, serão contabilizados. As-
sim, se utilizarmos:

150

Miletto_06.indd 150 26/03/14 15:26


SELECT count(descricao)
FROM produto inner join categoria
ON produto.codigo_categoria = categoria.codigo_categoria
WHERE [Link] = 'Informática';

o resultado final da consulta será 3, não 4, pois, conforme pode ser visualizado na
Tabela 6.19, uma das tuplas não possui descrição.

Função de agregação MAX


É utilizada para determinar, dentre um conjunto de valores, qual é o maior valor.
Assim como na função AVG, devemos definir sobre qual atributo a função incide.
Essa função é representada da seguinte forma:

SELECT MAX(atributo)
FROM <tabela>
[WHERE <condição>]

Veja um exemplo de uso dessa função.

EXEMPLO
Qual é o maior preço dos produtos da categoria Informática?

SELECT max(preco)
FROM produto INNER JOIN categoria
ON produto.codigo_categoria = categoria.codigo_categoria
WHERE [Link] = 'Informática';

O resultado obtido com a consulta é o seguinte:

MAX(preco)

3400
Linguagem SQL

Você pode comprovar esse resultado analisando a Tabela 6.19. Observe, dentre os
produtos destacados na tabela, o que tem o maior preço.

Função de agregação MIN


É utilizada para determinar, dentre um conjunto de valores, qual é o menor valor.
Assim como a AVG e a MAX, deve ter a definição do atributo sobre o qual a função
incide. Essa função é representada da seguinte forma:
capítulo 6

SELECT MIN(atributo)
FROM <tabela>
[WHERE <condição>]

151

Miletto_06.indd 151 26/03/14 15:26


Observe um exemplo dessa função.

EXEMPLO
Qual é o menor preço dentre os produtos da categoria Informática?

SELECT min(preco)
FROM produto INNER JOIN categoria
ON produto.codigo_categoria = categoria.codigo_categoria
WHERE [Link] = 'Informática';

O resultado obtido com a consulta desse último exemplo é o seguinte:

MIN(preco)

540

Você pode comprovar esse resultado analisando a Tabela 6.19 e observando, den-
tre os produtos destacados na tabela, o que tem o menor preço.

Função de agregação SUM


A função de agregação utilizada para retornar a soma de um conjunto de valores
é a SUM. A função SUM, assim como AVG, MAX e MIN, deve ter a definição do atri-
buto sobre o qual a função incide. Essa função é representada da seguinte forma:

SELECT SUM(atributo)
FROM <tabela>
[WHERE <condição>]

Observe um exemplo dessa função.

EXEMPLO
Qual é a quantidade total de itens da categoria Informática?

SELECT sum(quantidade)
FROM produto INNER JOIN categoria
ON produto.codigo_categoria = categoria.codigo_categoria
WHERE [Link] = 'Informática';

O resultado obtido com a consulta do exemplo anterior é o seguinte:

SUM(quantidade)

39

152

Miletto_06.indd 152 26/03/14 15:26


Você pode comprovar esse resultado analisando a Tabela 6.19. Observe os produ-
tos destacados na tabela e some as suas quantidades). DICA
No comando SELECT, utilize
Valores calculados expressões com valores
Existe, também, a possibilidade de obtermos valores calculados diretamente em calculados para validar
uma expressão de consulta. Para isso, podemos dispor dos operadores matemáti- um resultado antes de uma
cos amplamente conhecidos: + (soma), – (subtração), / (divisão), * (multiplicação). operação de atualização
UPDATE.
No exemplo de utilização do comando UPDATE, solicitava-se que os produtos ar-
mazenados fossem reajustados em 5%. Algo semelhante é solicitado agora. Veja
o exemplo.

EXEMPLO
Consulte os nomes dos produtos e seus respectivos valores, considerando um acréscimo de 5% em cada
um dos produtos.

SELECT nome, preco*1.05


FROM produto;

Note que esse exemplo não altera as informações no banco de dados, apenas gera
uma lista de dados para visualização, permitindo a criação de várias outras expres-
sões. Esse recurso é muito útil para a geração de informações sem, necessariamen-
te, alterá-las, como relatórios e emissão de documentos.

O uso de funções de agregação sozinhas na cláusula SELECT não é uma prática


muito comum. Na grande maioria das vezes, o comando SELECT retorna infor-
mações de vários atributos, sendo necessário utilizar, na cláusula WHERE, vários
atributos e funções de agregação.

Formação de grupo
Quando existe a necessidade de utilizar uma função de agregação com atributos
de uma ou mais tabelas na cláusula SELECT, devemos empregar recursos de for-
mação de grupos. Para isso, utilizamos a função GROUP BY.
Linguagem SQL

A sintaxe desse comando é:

SELECT <atributo1>, <atributo n>, <função de agregação> FROM


<tabela>
[WHERE <condição>]
GROUP BY <atributo1>, <atributo n>
capítulo 6

[HAVING <condição>];

Com essa função, é possível agrupar informações semelhantes, obtendo um único


resultado para cada grupo. Observe o exemplo a seguir.
153

Miletto_06.indd 153 26/03/14 15:26


Encerra aqui o trecho do livro disponibilizado para
esta Unidade de Aprendizagem. Na Biblioteca Virtual
da Instituição, você encontra a obra na íntegra.

Você também pode gostar