Buscar

Projeção em SQL - Banco de Dados

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Projeção em SQL	
APRESENTAÇÃO
Atualmente, vive-se em uma sociedade cada vez mais orientada a dados e, com isso, existe uma 
grande demanda por tecnologias que permitem o gerenciamento e a manipulação desses dados. 
Entre essas possibilidades, muitas ferramentas em uso utilizam Sistemas de Gerenciamento de 
Banco de Dados (SGBDs). No SGBD, entre outros recursos, é possível criar tabelas para 
armazenar os dados e, se for necessário recuperá-los, desenvolver consultas na linguagem SQL. 
A SQL tem como parte dos seus fundamentos a teoria das operações da álgebra relacional. Entre 
as operações básicas, existe a Projeção, que permite expressar quais colunas podem ser 
apresentadas para uma tabela de interesse.
Nesta Unidade de Aprendizagem, você vai aprender a formalização teórica para a operação de 
projeção em álgebra relacional. Além disso, vai compreender como a projeção é utilizada em 
banco de dados relacionais. Por fim, verá alguns exemplos práticos de como essa operação é 
implementada no SGBD PostgreSQL. 
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Definir a operação de projeção em álgebra relacional.•
Exemplificar a operação de projeção em banco de dados relacional.•
Implementar a operação de projeção em SQL.•
DESAFIO
Muitos softwares em uso, atualmente, utilizam banco de dados relacionais para gerenciar e 
armazenar os dados de interesse. 
Portanto, o conhecimento de operações que permitam a consulta 
desses dados é de extrema importância tanto para operacionalizar 
o software como para auxiliar gestores na tomada de decisão com 
base na análise dos dados.
Você foi contratado para trabalhar como desenvolvedor de sistemas para um cliente que realiza 
vendas de produtos de esporte em lojas distribuídas em cinco endereços. Essa empresa utiliza o 
SGBD PostgreSQL, considerando que você tem acesso às tabelas VENDAS 
e PRODUTOS e suas respectivas colunas entre parênteses.
VENDAS (ID_VENDA, ID_CLIENTE, ID_LOJA, ID_VENDEDOR, NR_ITENS, 
VALOR, DT_OPERACAO).
PRODUTOS (ID_PRODUTO, FORNECEDOR, DESCRICAO, ESPORTE, 
NR_ESTOQUE).
O time de gestores está avaliando algumas métricas e estratégias 
de vendas e solicitou que você desenvolva consultas em SQL que retornem as seguintes 
relações:
(A) Lista de todas as vendas com valor maior que 800 reais realizadas na loja de código 1. As 
informações de interesse a serem projetas 
(em ordem) são: número identificador do vendedor; total do valor da venda; e data da venda. E a 
ordem de apresentação dos elementos 
deve ser do maior valor vendido para o menor.
(B) Lista de todos os clientes que totalizaram compras com valor igual 
e maior que 600 reais. As informações de interesse a serem projetas (em ordem) são: número 
identificador do cliente; data da compra; loja em que foi feita; número de itens comprados; 
e valor da compra. E a ordem de apresentação dos elementos deve ser de tal forma que facilite a 
visualização de todas as compras realizadas pelo mesmo cliente.
(C) Lista de todas as categorias esportivas em que há produtos disponíveis. Essa relação será 
utilizada como lista de opções de 
um relatório digital que está sendo desenvolvido. A ordem de apresentação dos elementos deve 
ser ascendente da descrição 
das categorias.
Observações:
Na base de dados, as vendas são armazenadas sem a indicação da moeda e com uso de ponto 
para indicar os centavos. Por exemplo: “120.34”.
Além da operação de projeção (cláusula "SELECT"), você precisará combinar a operação de 
seleção (cláusula “WHERE”). O comando para ordenação também será necessário ("ORDER 
BY").
Sendo assim, você deverá utilizar a sintaxe válida de SQL, ou seja, de forma que sua consulta 
possa ser executada no SGBD PostgreSQL sem erros de interpretação. Obviamente, aqui, 
devem ser consideradas as prévias criações das tabelas, a inserção dos dados e tudo o que 
for necessário para operacionalizar as consultas reais.
INFOGRÁFICO
Há duas operações relacionais classificadas como unárias por ocorrerem sobre relações isoladas. 
São elas: projeção e seleção. Essas operações podem, inicialmente, causar alguma confusão 
devido às suas similaridades.
No Infográfico, você verá a comparação entre as duas operações por meio da apresentação de 
pontos em comum e, principalmente, das diferenças entre elas.
CONTEÚDO DO LIVRO
A álgebra relacional é composta por um conjunto de operações usadas para manipular relações 
como um todo. Uma dessas operações é a projeção. Por meio dela, é possível expressar quais 
atributos de interesse se deseja recuperar de determinada relação. Por sua vez, uma relação pode 
ser entendida como um conjunto de elementos ou uma tabela de dados. Sendo assim, esse é um 
conceito de suma importância para consultas em banco de dados.
No capítulo Projeção em SQL, da obra Consultas em banco de dados, você conhecerá a 
operação de projeção em álgebra relacional e sua relação com consultas em banco de dados 
relacionais. Além disso, alguns casos serão apresentados para melhor ilustrar as possibilidades 
de uso do SGBD PostgreSQL.
Boa leitura.
CONSULTAS EM 
BANCO DE DADOS
Alessandra Maciel Paz Milani 
Projeção em SQL
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Definir a operação de projeção em álgebra relacional.
 � Exemplificar a operação de projeção em banco de dados relacional.
 � Implementar a operação de projeção em SQL.
Introdução
Você já deve ter escutado que, além dos conceitos do modelo de dados 
para definir a estrutura do banco de dados, será necessário um conjunto 
básico de operações para manipulá-lo, conhecido, no modelo relacional, 
como álgebra relacional (ELMASRI; NAVATHE, 2011). Por conseguinte, há 
diferentes operações fundamentais na álgebra relacional, como seleção, 
projeção, produto cartesiano, união, etc.
Neste capítulo, você conhecerá a operação de projeção em álgebra 
relacional, identificará a operação de projeção em banco de dados re-
lacionais por meio de diversos exemplos conceituais e compreenderá 
como implementar a operação de projeção em SQL no SGBD PostgreSQL.
1 Projeção em álgebra relacional
É importante lembrar que a álgebra relacional oferece um alicerce formal para 
as operações do modelo relacional, por meio dos quais o usuário conseguirá 
especificar as solicitações de recuperação para conjuntos ou relações. Note, 
ainda, que “[...] as entradas e as saídas de uma consulta são relações [...]” 
(RAMAKRISHNAN; GEHRKE, 2011, p. 84).
Elmasri e Navathe (2011) apontam que as operações da álgebra relacional 
podem ser divididas em dois grupos: um inclui o conjunto de operações da 
teoria de conjunto da matemática (união, intersecção, diferença de conjunto 
e produto cartesiano), e o outro consiste em operações desenvolvidas espe-
cificamente para banco de dados relacionais, como projeção e seleção. Além 
disso, uma vez que a projeção trabalha apenas com um conjunto de entrada, 
ela é classificada como uma operação relacional unária, ou seja, trata-se de 
uma função com somente uma variável de entrada.
Em seu dicionário de banco de dados relacionais, Date (2016) define sim-
plificadamente projeção de como: deixe a relação r ter atributos chamados 
A1, A2, ..., An. Então, e somente então, a expressão r{A1, A2, ..., An} denota 
a projeção de r em {A1, A2, ..., An} e retorna a relação com o cabeçalho 
{A1, A2, ..., An} e o corpo constituído por todas as tuplas t, de modo que 
exista uma tupla em r que tenha o mesmo valor para os atributos A1, A2, ..., 
An, como t tem.
Outra maneira de formalizar a operação de projeção, representada pela 
letra grega pi (π), seria utilizarmos a seguinte expressão:
π<Lista de atributos> (Relação)
Então, por exemplo, considere a seguinte relação: 
Funcionarios = {matricula, nome, endereco, data _ nascimento, 
estado _ civil}
E esta instância:
Funcionarios = {1001, Ana, Rua Florida, 12/05/1970, Casado,1002, Carlos, Rua Tulipa, 22/06/1990, Solteiro,
 1003, João, Avenida Flor, 01/02/1975, Casado,
 1004, Rubens, Rua Violeta, 02/10/1980, Casado}
Projeção em SQL2
Suponha que seja necessário buscar uma relação que apresente a matri-
cula, o nome e o estado_civil dos funcionários — a formalização dessa 
operação poderá ser representada como:
πmatrícula, nome, estado civil (Funcionários)
Por fim, o retorno dessa operação de projeção será a relação 
Funcionarios2={matricula, nome, estado_civil} contendo 
as seguintes tuplas:
Funcionarios2 = {1001, Ana, Casado,
 1002, Carlos, Solteiro,
 1003, João, Casado,
 1004, Rubens, Casado}
Outra analogia para entender esse conceito reside no fato de que a projeção 
produzirá como saída um subconjunto vertical do conjunto sob análise. Além 
disso, intuitivamente, você pode visualizar essa estrutura de dados como uma 
tabela; portanto, podemos dizer que a operação de projeção (π) selecionará 
colunas de interesse dessa tabela, como exemplificado na Figura 1.
Figura 1. Representação visual da operação de projeção.
3Projeção em SQL
A seguir, observaremos como se comportam as buscas com projeção de 
dados por exemplos em tabelas.
2 Exemplos de projeção em banco 
de dados relacional
Vamos conferir mais alguns exemplos para a operação de projeção em banco 
de dados, iniciando pelo caso de uma relação ou um conjunto, que aqui cha-
maremos de tabela aluno, que contém dados de alunos. Nessa tabela, há seis 
atributos, ou colunas, listados a seguir: 
1. id_aluno = número identificador do aluno;
2. nome = nome de registro do aluno;
3. nome_pref = nome preferencial do aluno;
4. data_nasc = data de nascimento;
5. sit_matr = situação de matrícula, onde 0 = Não Ativo e 1 = Ativo;
6. email = endereço eletrônico do aluno.
Considere um caso no qual você precisa enviar uma mensagem de alerta por 
e-mail para todos os alunos. Com base no que já vimos neste capítulo, como 
poderíamos escrever uma expressão para essa consulta? E qual seria o resultado 
dessa busca considerando o exemplo da instância apresentada no Quadro 1?
id_
aluno
nome
nome_
pref
data_
nasc
sit_
matr
email
27001 João 
Gustavo 
Rico
João 
Gustavo
12/04/1990 0 Jg_rico@
mail.com
27043 Luís Tadeu 
Marciano
Marciano 26/08/1999 1 tadeum@
mail.com
27023 Otávio 
Nunes 
Santos
Nunes 05/05/1998 1 o_nunes@
mail.com
Quadro 1. Tabela para representação do conjunto de aluno
(Continua)
Projeção em SQL4
id_
aluno
nome
nome_
pref
data_
nasc
sit_
matr
email
28056 Marta 
Azevedo
Marta 10/06/1992 1 m.azevedo@
mail.com
28943 Michele 
Lima 
Toledo
Mi 22/12/1995 0 mi_lt@
mail.com
Quadro 1. Tabela para representação do conjunto de aluno
(Continuação)
A resposta para essa questão está apresentada na Figura 2, na qual há uma 
representação visual para ilustrar o problema discutido, relacionado à tabela 
aluno. Na sequência, são apresentados a formulação da operação de projeção 
em álgebra relacional e o resultado esperado para essa operação de projeção, 
indicado por meio de uma nova tabela, de coluna única (email), na qual 
aparece o endereço eletrônico para os alunos que constavam na tabela original.
Figura 2. Representação visual para a operação de projeção da coluna email para a tabela 
aluno. 
5Projeção em SQL
Agora, suponha que você tem interesse em saber também o nome preferen-
cial pelo qual o aluno gostaria de ser chamado. O que seria preciso alterar nessa 
operação de projeção para considerar esse atributo adicional? Simples! Basta 
adicionarmos o nome do atributo correspondente, quando a nova expressão 
fica da seguinte maneira:
πnome_pref, email (aluno)
A nova relação resultante para essa operação de projeção está apresentada 
no Quadro 2.
NOME_PREF EMAIL
João Gustavo jg_rico@mail.com
Marciano tadeum@mail.com
Nunes o_nunes@mail.com
Marta m.azevedo@mail.com
Mi mi_lt@mail.com
Quadro 2. Resultado da operação de Projeção na tabela aluno, considerando o novo 
atributo a ser apresentado
Outro exemplo seria considerar um conjunto de dados para clientes de uma 
loja de vendas pela internet. Em uma tabela chamada cliente_compra, 
10 atributos foram criados para armazenar os dados dos clientes e de suas 
compras. Considerando os elementos da relação apresentada no Quadro 3, 
você consegue identificar qual seria a operação de projeção aplicada para 
gerar esse retorno?
Projeção em SQL6
cp nome_cli dt_compra qtde_itens valor_total
12345678987 Gustavo Rico 10/03/2020 3 50
34125678943 Tadeu 
Marciano
10/03/2020 6 180
34561278956 Jardel Nunes 11/03/2020 2 600
34567891278 Joaquim 
Azevedo
11/03/2020 4 150
12563478990 Paulo Lima 12/03/2020 10 200
Quadro 3. Tabela para representação do conjunto cliente_compra resultante de uma 
operação de projeção
Para obtermos o retorno apresentado no Quadro 3, precisaremos forma-
lizar uma operação de projeção que indique nosso interesse em apresentar 
as mesmas colunas que aparecem na tabela resultante; portanto, deveremos 
escrever o nome dessas cinco colunas: cpf_cli, nome_cli, dt_com-
pra, qtde_itens, valor_total. Ainda, precisaremos informar qual 
é a tabela de origem para recuperar esses dados, ou seja, incluir o nome da 
cliente_compra. Dessa maneira, podemos formular a seguinte expres-
são em álgebra relacional, lembrando-se de iniciar com a letra pi, já que ela 
representa a operação de projeção.
π 
CPF_CLI, NOME_CLI, DT_COMPRA, QTDE_ITENS, VALOR_TOTAL (CLIENTE_COMPRA)
3 Implementação de projeção em SQL
Agora que você já está familiarizado com a operação de projeção, veremos 
como ela pode ser implementada na linguagem prática para o modelo rela-
cional. Vale ressaltar que a linguagem SQL (Structured Query Language) foi 
desenvolvida com base em linguagens de consultas formais, entre elas a álgebra 
relacional. Assim, você consegue identificar qual seria a parte correspondente 
7Projeção em SQL
em uma instrução SQL para a operação de projeção? Na Figura 3, observamos 
como se daria a implementação SQL correspondente ao primeiro exemplo 
deste capítulo, da relação de funcionários.
Figura 3. Exemplo de problema, expressão da álgebra relacional e sua conversão para SQL. 
A partir desse momento, usaremos em nossos exemplos o Sistema de 
Gerenciamento de Banco de Dados (SGBD) PostgreSQL (POSTGRE, 2020). 
Para apresentarmos as execuções dos comandos de consulta e dos respectivos 
resultados, usaremos o software gráfico pgAdmin, disponibilizado gratuita-
mente junto ao pacote de instalação do PostgreSQL.
Note ainda que, para esse exemplo funcionar, precisamos ter criado antes 
uma tabela funcionarios e, então, inserir alguns elementos de exemplo. 
Nesse processo, ajustaremos os nomes dos atributos para remover acentos or-
tográficos e espaços em branco entre as palavras. Assim, você pode considerar 
o seguinte comando para a criação da tabela de funcionários:
CREATE TABLE public.funcionarios (matricula varchar(20), nome 
varchar(20), endereco varchar(20), dt _ nascimento date, es-
tado _ civil varchar(20));
Projeção em SQL8
Depois, alguns dados de funcionários podem ser adicionados à tabela 
criada. No nosso exemplo, adicionamos informações para quatro funcionários, 
conforme os comandos indicados a seguir:
INSERT INTO public.funcionarios(matricula, nome, endereco, 
dt _ nascimento, estado _ civil)VALUES ('1001', 'Ana', 'Rua Flo-
rida', to _ date('12-05-1970','DD-MM-YYYY'), 'Casado');
INSERT INTO public.funcionarios(matricula, nome, endereco, 
dt _ nascimento, estado _ civil)VALUES ('1002', Carlos, 'Rua Tu-
lipa, to _ date('22-06-1990','DD-MM-YYYY'), 'Solteiro');
INSERT INTO public.funcionarios(matricula, nome, endereco, 
dt _ nascimento, estado _ civil)VALUES ('1003', 'João', 'Avenida 
Flor', to _ date('01-02-1975','DD-MM-YYYY'), 'Casado');
INSERT INTO public.funcionarios(matricula, nome, endereco, 
dt _ nascimento, estado _ civil)VALUES ('1004', 'Rubens', 'Rua 
Violeta', to _ date('02-10-1970','DD-MM-YYYY'), 'Casado');
Aofinal desse processo, temos disponível uma tabela de funcionários 
com colunas e linhas conforme indicado na Figura 4: no topo, aparece o 
comando SQL (iniciado com o comando SELECT), utilizado para a opera-
ção de projetar todas as colunas e todas as possíveis linhas dessa tabela de 
funcionários; e, abaixo (com o título Data Output), o resultado da execução 
desse comando, em uma visão tabular, com todas as informações contidas 
na tabela funcionarios.
Figura 4. Exemplo de implementação da operação de projeção em SQL no SGBD Post-
greSQL. Nesse caso, é realizada uma consulta para apresentar os dados de todas as colunas 
da tabela de funcionários.
9Projeção em SQL
Agora, confira na Figura 5, o detalhe para a implementação da operação 
de projeção em SQL do nosso problema de exemplo, o mesmo apresentado 
na Figura 3. No topo da imagem, aparece a linha correspondente ao comando 
SQL, para que sejam projetadas apenas duas colunas específicas, e, logo abaixo, 
consta a informação resultante dessa operação de projeção.
Figura 5. Implementação da operação de projeção em SQL no SGBD PostgreSQL. Nesse 
caso, é realizada uma consulta para apresentar as informações contidas em duas colunas 
específicas: estado_civil e nome da tabela funcionarios. 
Em SQL, a projeção corresponderá à cláusula SELECT: você poderá esco-
lher listar apenas alguns atributos da sua tabela, informando, assim, o nome 
de cada um deles na cláusula SELECT, como no exemplo da Figura 5, ou, 
então, indicar que tem a intenção de projetar todos os atributos por meio do 
asterisco, como no exemplo da Figura 4.
Projeção em SQL10
Apesar de a operação de projeção dispor de uma estrutura simples, na prática a maneira 
como você implementa o seu comando SELECT poderá impactar o desempenho 
da sua consulta.
Por exemplo, o fato de você indicar que sua consulta deve projetar todas as colunas 
de uma tabela usando o asterisco “*” no lugar de apenas indicar aquelas colunas 
que sejam realmente o seu objeto de interesse pode resultar em um maior tempo 
de processamento para o SGBD retornar a consulta. Entre os motivos para isso, está 
a premissa de que, ao termos mais colunas projetadas, potencialmente teremos mais 
dados em escopo e, logo, mais “custo” para o SGBD.
Evidentemente, essa questão dependerá muito de uma série de configurações do 
SGBD em uso, das características da sua tabela (número de colunas, tipos de dados, 
número de linhas, se índices de busca foram criados, etc.), da combinação da operação 
de projeção com outras operações relacionais e do problema em questão a que você 
precisa atender.
Então, para alguns casos nos quais a consulta envolve uma tabela com poucas colunas 
e poucos dados, dificilmente o fato de solicitar a busca por todas as colunas causará 
um impacto perceptível aos usuários. Contudo, essa questão poderá ficar bastante 
evidente em cenários nos quais grandes volumes de dados estão sendo manipulados.
Assim, como uma boa prática de desenvolvimento de consultas, principalmente 
quando da incorporação de uma solução a um sistema comercial, você deve considerar 
a indicação das colunas de interesse (somente). E, caso necessário, retornar todas 
colunas; então, ainda seria preferível que você indicasse explicitamente o nome de 
cada uma delas na sua cláusula SELECT (em vez de usar o “*”).
A otimização de consulta é um tópico de estudo mais avançado, pois requerer o 
estudo prévio de outros temas, em especial as demais operações da álgebra relacional. 
Mas, se estiver curioso, pode consultar o capítulo 19 do livro de Elmasri e Navathe 
(2011), que está indicado na lista de referências deste capítulo. 
Além disso, considerando que você faça uma consulta para retornar somente 
o atributo estado_civil, você verá como resultado 4 linhas, uma para 
cada tupla; assim, aparecerão informações repetidas, como mostra a Figura 6. 
Esse não seria o resultado esperado para álgebra relacional. Então, por que 
isso aconteceu? Por questões de desempenho, o SGBD está configurado para 
realizar a consulta com o plano mais simples. Dessa maneira, ele não avalia 
duplicidades sem que seja requerido.
11Projeção em SQL
Figura 6. Implementação em SQL no SGBD PostgreSQL para o exemplo da busca de 
funcionários com elementos duplicados.
Para que as duplicidades não ocorram, você poderá utilizar o comando 
DISTINT logo após o SELECT e antes da lista de atributos. Por meio dessa 
especificação, o SGBD entenderá que precisa descartar duas ou mais linhas 
com os mesmos valores para as colunas em projeção, como exemplificado 
na Figura 7.
Figura 7. Implementação em SQL no SGBD PostgreSQL para o exemplo da busca de 
funcionários com o uso de DISTINCT para que não retornem elementos duplicados.
Observe que a ordem com que a colunas são informadas na cláusula 
SELECT será a mesma em que as informações serão apresentadas no conjunto 
resultante (veja o exemplo da Figura 5). No caso da escolha por todas as 
colunas, a ordem apresentada será a mesma na qual a tabela foi criada (veja 
o exemplo da Figura 4). 
Projeção em SQL12
Por fim, diferentes operações podem ser combinadas com a projeção, desde 
uma operação básica, como a seleção, que adicionará a cláusula WHERE ao 
comando SQL para que a consulta retorne apenas elementos que atendam 
à determinada condição, até operadores aritméticos, como um contador de 
ocorrências de elementos para uma coluna em especial. Contudo, por aqui 
encerramos a introdução à operação de projeção da álgebra relacional, com 
seus respectivos exemplos aplicados a tabelas e implementados em SQL.
DATE, C. J. The new relational database dictionary: terms, concepts, and examples. 
Sebastopol: O’Reilly, 2016.
ELMASRI, R.; NAVATHE, S. B. Sistemas de banco de dados. 6. ed. São Paulo: Pearson 
Addison Wesley, 2011.
POSTGRE. [Site]. 2020. Disponível em: https://www.Postgre.org/. Acesso em: 25 maio 
2020.
RAMAKRISHNAN, R.; GEHRKE, J. Sistemas de gerenciamento de banco de dados. 3. ed. 
Porto Alegre: AMGH, 2011. E-book.
Leituras recomendadas
MACHADO, F. N. R. Projeto e implementação de banco de dados. 3. ed. São Paulo: Érica, 2014.
MANNINO, M. V. Projeto, desenvolvimento de aplicações e administração de banco de 
dados. 3. ed. Porto Alegre: AMGH, 2008.
Os links para sites da web fornecidos neste capítulo foram todos testados, e seu fun-
cionamento foi comprovado no momento da publicação do material. No entanto, a 
rede é extremamente dinâmica; suas páginas estão constantemente mudando de 
local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade 
sobre qualidade, precisão ou integralidade das informações referidas em tais links.
13Projeção em SQL
DICA DO PROFESSOR
O uso de bancos de dados relacionais faz parte da realidade de muitas empresas dos mais 
variados negócios. Para fazer a consulta em banco de dados relacionais, o usuário pode usar 
operações escritas na linguagem SQL, que está baseada em conceitos da álgebra relacional, de 
maneira a recuperar os dados nas condições de interesse.
Nesta Dica do Professor, você verá algumas aplicações da operação de projeção em SQL e dicas 
para garantir um desempenho mais eficiente da sua consulta.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) Há diferentes operações da álgebra relacional que são utilizadas 
em banco de dados relacionais. Entre as operações fundamentais, 
está a projeção, que, de maneira intuitiva, pode ser entendida como 
a operação que irá retornar uma relação baseada nas colunas de interesse de uma 
tabela.
Assinale a alternativa que apresenta o conceito da operação de projeção da álgebra 
relacional:
A) Select * Conjunto.
B) Select A1, A2, An (*).
C) π (Conjunto).
D) π A1, A2, An (Conjunto).
E) Projetar (A1, A2, An).
2) Você é professor e precisa listar a situação final de cada aluno (aprovado ou 
reprovado) em uma disciplina X. Para isso, criou uma expressão em álgebra 
relacional que projetou a seguinte relação:
Alunos1 = { <10002, Aprovado>, <10003,Reprovado>, <10004, Aprovado>, <10005, 
Aprovado>, <10006, Aprovado>, <10007, Reprovado>, <10008, Aprovado> }.
Considerando a seguinte estrutura de atributos para a relação original de Alunos:
Alunos (Matrícula, Nome, Idade, Nota Prova, Nota Trabalho, Conceito Final).
Qual expressão da operação de projeção produz a relação Alunos1 e qual a expressão 
correspondente para uma consulta SQL válida para ser executada no SGBD?
Escolha a alternativa que contém as duas expressões:
A) π Matrícula, Conceito Final (Alunos) e SELECT * FROM ALUNOS;
B) π Matrícula, Conceito Final (Alunos) e SELECT MATRICULA, CONCEITO_FINAL 
FROM ALUNOS;
C) π Matrícula, Conceito Final (Alunos) e SELECT MATRICULA, NOME, CONCEITO 
FROM ALUNOS;
D) π <atributos> (Alunos) e SELECT * FROM ALUNOS;
E) π Nome, Conceito Final (Alunos) e SELECT NOME, CONCEITO_FINAL FROM 
ALUNOS;
Samuel está fazendo um levantamento de clientes frequentes em sua loja e deseja 
projetar uma relação dos clientes contendo informações na seguinte ordem: (1) Total 
de Compras, (2) Nome do cliente, (3) seu Email, (4) Endereço físico e (5) Número do 
3) 
CPF do cliente.
Ao desenvolver a consulta, ele também utilizou o comando SQL “ORDER BY” para 
ordenar a apresentação do resultado da sua projeção pelo valor dos elementos 
contidos na coluna correspondente ao total de compras do cliente. Sua intenção era 
que os clientes aparecessem do maior para o menor número total de compras.
Para tanto, considera-se que a tabela no banco de dados do sistema da loja de Samuel 
que armazena essa informação foi criada da seguinte maneira:
CREATE TABLE clientes (
 cpf numeric,
 nome varchar(40),
 email varchar(20),
 endereco varchar(40),
 total_compras numeric)
)
Assinale a alternativa que apresenta a consulta SQL desenvolvida pelo Samuel para 
gerar a relação de clientes planejada:
A) SELECT * FROM clientes ORDER BY 1 DESC;
B) SELECT * FROM clientes ORDER BY total_compras DESC;
C) SELECT total_compras, * FROM clientes ORDER BY total_compras;
D) SELECT total_compras, nome, email, endereco, cpf FROM clientes ORDER BY 
total_compras DESC;
SELECT total_compras, cpf, nome, email, endereco FROM clientes ORDER BY E) 
total_compras DESC;
4) Carla precisa ligar para todos os seus fornecedores de painéis MDF para negociar 
novos pedidos. Considera-se o seguinte esquema de banco de dados:
FORNECEDORES (ID, CNPJ, RAZAO_SOCIAL, NOME_COMERCIAL, 
ENDERECO, ESTADO, TELEFONE, FAX, EMAIL, MATERIAL).
Assinale a alternativa que contém a consulta SQL para ser interpretada pelo SGBD e 
atender à necessidade de Carla:
A) SELECT NOME, FONE FROM FORNECEDORES WHERE MATERIAL=’MDF’;
B) SELECT <ATRIBUTOS> FROM FORNECEDORES WHERE MATERIAL=’MDF’;
C) SELECT CNPJ, RAZAO_SOCIAL, NOME_COMERCIAL, ENDERECO, ESTADO, 
MATERIAL FROM FORNECEDORES;
D) SELECT ID, EMAIL, FAX, TELEFONE, ENDERECO, MATERIAL FROM 
FORNECEDORES;
E) SELECT NOME_COMERCIAL, TELEFONE FROM FORNECEDORES WHERE 
MATERIAL=’MDF’;
Marcos é um analista de sistemas que foi solicitado para auxiliar na estratégia de 
vendas de uma loja de bazar com artigos variados. Todas as operações da loja, 
inclusive o registro das vendas, são armazenadas em um banco de dados relacional. 
Entre as inúmeras consultas que Marcos deverá realizar, uma delas deve apresentar 
as categorias dos itens vendidos durante o final de semana (que somam mais de 10 
mil itens na tabela para o recorte de tempo selecionado para análise).
A consulta implementada por Marcos resultou na seguinte relação de categorias para 
os itens vendidos:
5) 
CATEGORIA 
Infantil 
Ferragem 
Cozinha 
Decoração Casa
Considera-se o seguinte esquema de banco de dados para a tabela sob consulta:
VENDAS(ID_VENDAS, ID_VENDEDOR, ID_PRODUTO, CATEGORIA, VALOR, 
DT_VENDA, FINAL_SEMANA).
Assinale a alternativa que corresponde ao comando SQL executado por Marcos para 
produzir esse resultado:
A) SELECT * FROM VENDAS;
B) SELECT * FROM VENDAS WHERE FINAL_SEMANA = ‘SIM’;
C) SELECT CATEGORIA FROM VENDAS WHERE FINAL_SEMANA = ‘SIM’;
D) SELECT DISTINCT CATEGORIA FROM VENDAS WHERE FINAL_SEMANA = 
‘SIM’;
E) SELECT *, DISTINCT CATEGORIA FROM VENDAS WHERE FINAL_SEMANA = 
‘SIM’;
NA PRÁTICA
De maneira intuitiva, pode-se dizer que a operação de projeção da álgebra relacional produz um 
novo conjunto de elementos com base na escolha das colunas de uma tabela que deseja 
recuperar informações. Portanto, essa é uma operação fundamental para consultas em banco de 
dados.
Neste Na Prática, você vai conhecer um estudo de caso de uma empreendedora que está 
expandindo seus negócios para vendas 
pela Internet. Para planejar e executar a campanha de fidelização 
dos primeiros clientes, ela precisa consultar sua base de dados.
Conteúdo interativo disponível na plataforma de ensino!
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Conceitos básicos para operações da álgebra relacional
Neste site, você poderá ver seis operações da álgebra relacional explicadas de maneira resumida, 
o que pode ser um recurso interessante para comparar ou relembrar quais são essas operações 
fundamentais.
Conteúdo interativo disponível na plataforma de ensino!
Fundamentos de álgebra relacional e sua relação com o SQL
Neste vídeo, você verá os fundamentos de álgebra relacional e sua relação com o SQL. Além da 
operação de projeção, coberta em detalhes, outras também são apresentadas: seleção, produto 
cartesiano, junção, união, interseção, diferença e divisão. Você acompanhará a teoria da álgebra 
relacional, bem como alguns exemplos práticos comparados com o SQL.
Conteúdo interativo disponível na plataforma de ensino!
Sistemas de Gerenciamento de Banco de Dados
Para aprofundar seu conhecimento sobre o assunto, confira, nesta obra, de autoria de 
Ramakrishnan e Gehrke, o capítulo 4, dedicado à álgebra e aos cálculos relacionais.
Tutorial para entender e exercitar SQL
Este tutorial fornece instruções SQL fáceis de entender e permite que você pratique enquanto 
estiver aprendendo, usando um interpretador SQL on-line. Praticando seus comandos SQL e 
vendo resultados imediatos, você aprenderá rapidamente. Está disponível em inglês e em 
espanhol.
Conteúdo interativo disponível na plataforma de ensino!

Continue navegando

Outros materiais