Você está na página 1de 23

Material de Apoio

INTRODUÇÃO À LINGUAGEM SQL

Prof. MSc. Jailson Santos


Universidade Federal de Santa Catarina
Departamento de Engenharia de Produção e Sistemas

Florianópolis
Nota

Estas notas explicativas, denominadas de material de apoio, têm por objetivo auxiliar
e fomentar a discussão teórica em sala, no que diz respeito ao conteúdo proposto. Para
tanto, este documento reúne uma coleção de pensamentos de seu autor, bem como faz
uso dos exercícios propostos pelo Professor Guilherme E. Vieira de seu material de ensino
(Material de apoio - Banco de Dados e SQL - 2023 [Prof Vieira]), ficando, portanto,
resguardado e conferido crédito de autoria ao professor que, gentilmente, disponibilizou seu
material de ensino.
1. INTRODUÇÃO À LINGUAGEM SQL

1.1 O que é SQL?


SQL (Structured Query Language) é uma linguagem de programação usada para
gerenciar e manipular dados em Sistemas de Gerenciamento de Bancos de Dados
Relacionais (RDBMS). Ele permite que você crie, atualize, delete e consulte dados em
bancos de dados de forma eficiente.

1.2 Por que SQL é importante?


SQL é essencial para a gestão de dados em uma ampla variedade de aplicações,
desde sistemas de gerenciamento de conteúdo até aplicativos empresariais. É uma
habilidade valiosa para desenvolvedores, analistas de dados, administradores de bancos
de dados e muitos outros profissionais de tecnologia.

1.3 História do SQL


A linguagem SQL foi desenvolvida pela IBM na década de 1970 e, desde então,
tornou-se um padrão amplamente adotado na indústria de TI. Ela é suportada por uma
variedade de sistemas de gerenciamento de bancos de dados, incluindo MySQL,
PostgreSQL, SQL Server e Oracle, entre outros.

2. BASES FUNDAMENTAIS DO SQL

2.1 Databases (Bancos de Dados)


Um banco de dados é uma coleção organizada de dados que pode incluir
informações como nomes, números, datas e muito mais. O SQL é usado para criar,
modificar e consultar bancos de dados.

2.2 Tabelas
As tabelas são estruturas fundamentais em um banco de dados. Elas representam
entidades do mundo real, como clientes, produtos ou pedidos. Cada tabela é composta por
colunas (atributos) e registros (linhas) que contêm os dados.

2.3 Registros (Linhas)


Cada registro em uma tabela representa uma instância dos dados dessa tabela. Por
exemplo, em uma tabela de clientes, cada registro pode representar um cliente específico.
2.4 Colunas
As colunas de uma tabela definem os tipos de dados que podem ser armazenados
nela. Cada coluna tem um nome e um tipo de dado associado, como texto, número inteiro
ou data.

3. EXPLORANDO O PGADMIN

O pgAdmin é uma poderosa ferramenta de administração para bancos de dados


PostgreSQL. Neste tópico, você aprenderá sobre as telas iniciais e as principais
funcionalidades do software.

Informações Gerais
Master Password: admin
User: postgres
Password: liict

3.1 Tela Inicial


Após a abertura do pgAdmin, você será recebido pela tela inicial. Vamos explorar as
principais áreas dessa tela:
Barra de Menu: A parte superior da tela contém o menu principal com opções como "File,"
"Edit," "View," "Tools," e "Help."

Barra de Ferramentas: Abaixo do menu, você encontrará a barra de ferramentas com


ícones para ações comuns, como criar um novo servidor ou banco de dados.

Navegador à Esquerda: À esquerda, está o navegador, onde você pode explorar a


estrutura do servidor PostgreSQL e seus objetos, como bancos de dados, schemas,
tabelas, funções e mais.

Painel de Informações: No painel central, você verá informações sobre os objetos


selecionados, como tabelas, colunas ou consultas.

Painel de Mensagens: Na parte inferior da tela, há um painel de mensagens que exibe


mensagens de status e resultados de consultas.

3.2 Conexão a um Servidor


Para começar, você precisa conectar o pgAdmin a um servidor PostgreSQL:
- Clique com o botão direito em "Servers" no navegador e escolha "Create" > "Server..."
- Na guia "General," dê um nome descritivo para o servidor.
- Na guia "Connection," insira os detalhes de conexão, como o nome do host, porta, nome
do banco de dados, nome do usuário e senha.
- Clique em "Save" para salvar as configurações e, em seguida, clique em "Connect" para
se conectar ao servidor.

3.3 Explorando o Servidor


Após a conexão bem-sucedida, você pode explorar o servidor no navegador:

Databases (Bancos de Dados): Expandindo a pasta "Databases," você verá uma lista de
bancos de dados disponíveis. Clique com o botão direito para criar, backup ou restaurar
bancos de dados.

Schemas: Os schemas são espaços de nomes para objetos de banco de dados. Você pode
criar schemas e organizar objetos dentro deles.
Login/Group Roles: Aqui você gerencia os usuários e grupos de usuários com diferentes
níveis de acesso ao servidor e aos bancos de dados.

3.4 Criando um banco e importando o arquivo do banco


Para criar um banco de dados no pgAdmin, siga os seguintes passos:
- No navegador à esquerda, expanda o servidor PostgreSQL conectado e clique com o
botão direito em "Databases."
- Escolha "Create" > "Database..."
- Na guia "General," insira um nome para o novo banco de dados no campo "Name."
- Defina outras opções, como a codificação (encoding) e o proprietário, se necessário.
- Clique em "Save" para criar o banco de dados.

Com o banco criado, para importar o arquivo que contém o script com os dados, você
deverá abrir uma ferramenta de consulta. Para tanto, siga as instruções:

- Clique com o botão direito no banco de dados e escolha "Query Tool" para abrir uma janela
de consulta SQL.
- Na barra de ferramentas, click em “open file” (ícone da pastinha). Em seguida, será aberta
uma janela para que você selecione o arquivo da sua máquila local.
- Em seguida selecione todo o bloco de código (pode usar o atalho Crtl + a). Por fim, clique
em "Execute" para executá-la. Os resultados serão exibidos no painel de mensagens.

4. LINGUAGEM DE CONSULTA DE DADOS (DQL)

A Linguagem de Consulta de Dados (DQL) é uma parte fundamental da Linguagem


SQL (Structured Query Language) que permite recuperar informações de um banco de
dados. O DQL é usado para fazer consultas que retornam dados específicos com base em
critérios definidos pelo usuário. Vamos discutir os conceitos fundamentais do DQL e
fornecer exemplos práticos.

4.1 Comandos SQL Básicos de DQL

SELECT: O comando SELECT é o principal comando DQL e é usado para recuperar dados
de tabelas de um banco de dados. Ele permite projetar colunas específicas ou todas as
colunas de uma tabela. Aqui está um exemplo simples:
SELECT sobrenome, userid, cargo
FROM empregado

Neste exemplo, estamos selecionando as colunas "sobrenome", "userid" e “cargo” da tabela


"empregado". A cláusula FROM especifica a tabela da qual os dados serão selecionados.
Ela é usada em conjunto com o comando SELECT, obrigatoriamente (princípio da
ATOMICIDADE).

WHERE: A cláusula WHERE é usada para filtrar os resultados da consulta com base em
uma condição. Por exemplo:

SELECT nome
FROM empregado
WHERE id_depto = ‘41’

Pergunta-se:
Por que na cláusula WHERE, a especificação do departamento é feita entre aspas?

Observações:
1. Em cláusulas de seleção, usa-se convencionalmente aspas simples e em cláusulas de
projeção usa aspas duplas.
2. Quando usamos o * como parâmetro para o SELECT, na verdade queremos que a
consulta (query) retorne todos os atributos (colunas) da entidade (tabela) consultada.
Experimente rodar a query acima substituindo o atributo “nome” por * e repare na saída dos
dados.

Operadores de Comparação: O DQL utiliza operadores de comparação, como "=", ">",


"<", "<>" (diferente), entre outros, para definir as condições nas cláusulas WHERE. Por
exemplo:

SELECT nome, preco_atacado_sugerido


FROM produto
WHERE preco_atacado_sugerido >= 500
Consultas Combinadas: Você pode combinar várias condições em uma consulta usando
os operadores lógicos AND, OR e NOT. Por exemplo:

SELECT id_produto
FROM item
WHERE preco > 100 AND quantidade < 500

Pergunta-se:
Quantos produtos atenderam às condições definidas na query?

ORDER BY: A cláusula ORDER BY é usada para classificar os resultados em ordem


ascendente (ASC) ou descendente (DESC). Por exemplo:

SELECT sobrenome, userid, cargo


FROM empregado
ORDER BY cargo
ou
ORDER BY cargo DESC

LIMIT: A cláusula LIMIT é usada para limitar o número de resultados retornados por uma
consulta. Por exemplo:

SELECT *
FROM pedido
ORDER BY total DESC
LIMIT 1

Esta consulta retorna as informações do pedido que gerou o maior faturamento da empresa.

SELECT DISTINC: O comando SELECT DISTINCT é usado para retornar apenas valores
únicos em uma projeção. No exemplo abaixo, usamos esse comando para listar todos os
produtos vendidos pela empresa até o momento.

SELECT DISTINCT id_produto


FROM item
Pergunta-se:
O que aconteceria se fizéssemos a mesma consulta sem o DISTINCT?
Por que não utilizei a tabela produto para saber a lista de produtos vendidos pela empresa?

4.2 Comentando o código


No pgAdmin, você pode fazer comentários em suas consultas SQL de duas maneiras
principais: usando a notação de comentários de uma única linha e a notação de
comentários de várias linhas. Aqui está como fazer isso:

Comentários de Uma Única Linha: Para adicionar um comentário de uma única linha em
uma consulta SQL no pgAdmin, você pode usar o símbolo --, seguido do texto do
comentário. Qualquer texto após -- na mesma linha será considerado um comentário e não
afetará a execução da consulta. Exemplo:

-- Este é um comentário de uma única linha


SELECT nome
FROM cliente

Comentários de Múltiplas Linhas: Para adicionar comentários de várias linhas em suas


consultas SQL no pgAdmin, você pode usar a notação /* ... */. Qualquer texto entre /* e */
será tratado como um comentário e não afetará a execução da consulta. Exemplo:

/*
Este é um comentário
de múltiplas linhas
*/
SELECT nome
FROM cliente

O uso de comentários é uma prática recomendada para documentar suas consultas


SQL e torná-las mais compreensíveis para você e outros colaboradores. Eles são úteis para
explicar a lógica da consulta, fornecer informações sobre a finalidade da consulta ou indicar
as alterações feitas.
LET’S PRACTICE!
SQL_01: Para todos os funcionários da tabela de empregado, liste o cargo, sobrenome e
departamento, nesta ordem. Certifique-se de que os diferentes títulos são listados em
ordem alfabética e que os funcionários que têm o mesmo título estão em listados em ordem
alfabética inversa.

SQL_02: Construa uma query para consultar o sobrenome e o salário de todos os


funcionários que trabalham no departamento 41.

SQL_03: Suponha que a empresa esteja cogitando dar um aumento para seus
funcionários. A fim de verificar como ficariam os novos valores, construa uma query para
projetar um aumento de 10% no salário de todos os funcionários do departamento 41.

4.3 Usando títulos de colunas e apelidos (aliases)


No PostgreSQL e em outros sistemas de gerenciamento de banco de dados
relacionais, você pode usar títulos de colunas e apelidos (aliases) para personalizar os
nomes das colunas em resultados de consultas. Isso é útil quando você deseja tornar os
resultados das consultas mais legíveis ou fornecer nomes mais descritivos para as colunas.
Neste guia, explicarei como usar títulos de colunas e apelidos no pgAdmin.

Usando Títulos de Colunas: Você pode usar títulos de colunas para atribuir um nome
temporário a uma coluna em uma consulta. Isso não altera o nome real da coluna na tabela,
mas apenas como ela é exibida nos resultados da consulta.

SELECT nome, salario, salario*1.1 AS "Salário Reajustado"


FROM empregado

Usando Apelidos (Aliases) para Tabelas: É possível ainda dar apelidos para as tabelas.
Isso se torna útil quando trabalhamos com projeções em múltiplas tabelas, nas quais se
encontram atributos com o mesmo nome. Para facilitar a identificação, chamamos cada
atributo em particular pelo apelido da tabela correspondente. Repare no exemplo abaixo:
SELECT DISTINCT E.nome AS "Nome do Empregado", C.nome AS "Nome do Cliente"
FROM empregado E, cliente C
Observação:
O uso da cláusula AS não é obrigatória, porém, recomendável.

4.4 Relacionamento entre tabelas (Joins)


No PostgreSQL e em outros sistemas de gerenciamento de banco de dados
relacionais, o relacionamento entre tabelas, também conhecido como "joins," permite
combinar dados de duas ou mais tabelas com base em uma coluna comum. O pgAdmin é
uma ferramenta popular para criar consultas SQL que envolvem joins. Vamos explorar os
tipos de joins mais comuns no pgAdmin, incluindo equijoins, self joins e outer joins.

Equijoins (Natural joins): É o tipo mais comum de join. Ele combina registros de duas
tabelas com base em valores correspondentes em uma coluna específica. Isso cria um
novo conjunto de resultados que inclui colunas de ambas as tabelas. FOCAREMOS NESTE
TIPO DE JOIN.

SELECT E.nome AS “Nome do Empregado”, D.nome AS “Nome do Departamento”


FROM empregado E, depto D
WHERE E.id_depto = D.id

Outer joins: Os outer joins, ou joins externos, permitem combinar registros de duas tabelas,
preservando os registros não correspondentes de uma ou ambas as tabelas.

Fonte: https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-joins/
Self Join: Um self join ocorre quando você combina uma tabela consigo mesma. Isso é útil
quando você deseja relacionar registros dentro da mesma tabela. Um exemplo comum é
uma tabela de funcionários em que cada registro tem um campo "supervisor_id" que se
refere ao ID do supervisor.

SELECT E1.nome AS "Nome do Empregado", E2.nome AS "Nome do Gerente"


FROM empregado E1, empregado E2
WHERE E1.id_gerente = E2.id

4.5 Literais e concatenação


No PostgreSQL, você pode usar literais e operadores de concatenação para
manipular strings em consultas SQL. Neste guia, explicarei como usar literais e o operador
de concatenação || (pipes) no pgAdmin.

Uso de Literais: Os literais são valores de texto que você insere diretamente em uma
consulta SQL. Eles podem ser cadeias de caracteres entre aspas simples ou duplas,
números ou datas. O uso de literais é comum quando você deseja incluir valores fixos em
suas consultas. Veja os exemplos abaixo:

SELECT 'Olá, Mundo!' AS “saudação”

SELECT 42 AS “resposta”

SELECT '2023-09-19' AS “Data Atual”

Concatenação com Pipes (||): O operador de concatenação no PostgreSQL é


representado por dois pipes ||. Ele é usado para combinar valores de texto, colunas ou
literais em uma única string. Isso é útil quando você deseja criar strings mais complexas
combinando várias partes. Aqui estão alguns exemplos de concatenação com pipes no
pgAdmin:

SELECT nome || ' ' || sobrenome || ' é ' || cargo || ' e recebe US$ ' || salario
FROM empregado

SELECT E.nome || ' trabalha no depto de ' || D.nome || ' na ' || R.nome
FROM empregado E, depto D, região R
WHERE E.id_depto = D.id AND D.id_regiao = R.id

SELECT E.nome || ' ' || E.sobrenome || ' tem como gerente ' || G.nome
FROM empregado E, empregado G
WHERE E.id_gerente = G.id
ORDER BY G.nome

LET’S PRACTICE!
SQL_04: Crie uma query para exibir o sobrenome, salário e o percentual de comissão para
todos os representantes de vendas da tabela de empregados. Use o título “Representantes
de Vendas”.

SQL_05: Crie uma query para exibir os nomes do departamento e da região em que estão
localizados todos os departamentos da Summit Sporting Goods.

SQL_06: Crie uma query para exibir o nome e sobrenome de todos os representantes de
vendas e seus clientes. Mostre a resposta como: “<nome do cliente> é um cliente do(a)
<primeiro nome do empregado> <sobrenome do empregado>.” e nomeie a coluna como
“Representantes de vendas e seus clientes”.

SQL_07: Crie uma query para exibir o nome e sobrenome dos gerentes de armazém da
tabela armazém. Mostrar resultados como: "<Nome e Sobrenome> é o gerente do armazém
<número de armazém>" e mudar o nome da coluna para "Gerentes e seus armazéns". Use
‘aliases’ (apelidos).

4.6 Padrões de escrita e operadores de comparação

LIKE: O operador LIKE é usado para fazer correspondência parcial em consultas de texto.

SELECT sobrenome, nome


FROM empregado
WHERE sobrenome LIKE 'B%'
ORDER BY sobrenome, nome
Observação:
Temos dois tipos de padrões:
% (porcentagem) indica qualquer texto, independente do seu tamanho.
_ (underline) indica qualquer caractere, ficando restrito a quantidade de “underlines”
definidos na expressão.

SELECT nome, telefone


FROM cliente
WHERE telefone LIKE '540-___-____'

BETWEEN: O operador BETWEEN é usado para verificar se um valor está dentro de um


intervalo. Por exemplo:

SELECT nome, salario


FROM empregado
WHERE salario BETWEEN 1000 AND 5000

Pergunta-se:
Como seria possível chegar no mesmo resultado sem o uso do BETWEEN?

IN: O operador IN é usado para verificar se um valor está em um conjunto de valores.

SELECT nome, avaliacao_credito, cep, id_rep_vendas


FROM cliente
WHERE avaliacao_credito = 'EXCELENTE' OR cep = '22809' AND
id_rep_vendas IN ('10','11','12','13','14')

LET’S PRACTICE!
SQL_08: Escreva uma consulta SQL e mostre a tabela resultante para listar o sobrenome,
nome, id do departamento e salário de todos os gestores de armazém dos departamentos
42 a 44, cujo salário é superior a US$ 1600.

SQL_09: Escreva uma consulta SQL e mostre a tabela resultante para listar o sobrenome,
nome e id do departamento de todos os funcionários dos departamentos 31 e 41.
SQL_10: Escreva uma consulta SQL e mostre a tabela resultante para listar o nome, id do
departamento e salario de todos os funcionários que ganham mais que US$ 2000 que não
estejam nos departamentos 31 ou 41.

SQL_11: Escreva uma consulta SQL e mostre a tabela resultante para listar o sobrenome,
nome, id do departamento e cargo dos funcionários que estão no departamento 41 que são
estoquistas ou gerente de armazém.

SQL_12: Escreva uma consulta SQL e mostre a tabela resultante para listar o nome e
sobrenome dos funcionários cujo nome termina em “e” e que tenha exatamente seis letras.

SQL_13: Faça uma consulta SQL e mostre a tabela resultante para listar o nome,
sobrenome, ID e cargo dos funcionários cujos sobrenomes são Brown, Burns, Washington
e Jackson. Liste-os em ordem alfabética pelo nome e sobrenome.

SQL_14: Faça uma consulta SQL e mostre a tabela resultante para listar o nome do cliente
e nome e sobrenome do representante de vendas, cujo sobrenome comece com a letra H.

5. OPERAÇÕES ARITMÉTICAS E TEXTUAIS EM SQL

A seguir são apresentadas as principais funções para manipulação de atributos


numéricos e textuais. Vale ressaltar que para a manipulação dos cálculos aritméticos é
considerada a ordem de precedência básica da matemática: (), * e /, e por fim + e -.

SELECT sobrenome, nome,((((salario+250)*12)-salario*12)/(salario*12)*100)


FROM empregado

Pergunta-se:
O que retorna a query acima?

ABS (num): A função ABS retorna o valor absoluto de um número, ou seja, o valor sem
sinal negativo. Exemplo:

SELECT ABS(-5)
MOD (num1, num2): A função MOD retorna o resto da divisão entre dois números.
Exemplo:

SELECT MOD(10, 3)

ROUND (num, casas_decimais): A função ROUND é usada para arredondar um número


para um número específico de casas decimais. Exemplo:

SELECT ROUND(3.14159, 2)

Observação:
É possível passar um valor negativo para o segundo parâmetro da função ROUND. Repare
nos exemplos abaixo:

SELECT ROUND(6.1,-1)

No exemplo acima, a query arredonda o 6 para dezena mais próxima. No caso, o 6 está
mais próximo do 10 do que do zero, por isso o resultado é 10.

SELECT ROUND(6.1,-2)

Neste outro exemplo, a query arredonda o 6 para centena mais próxima. No caso, o 6 está
mais próximo do 0 do que do 100, por isso o resultado é 0.

TRUNC (num, casas_decimais): A função TRUNC é usada para truncar um número para
um número específico de casas decimais (remove as casas decimais).

SELECT TRUNC(3.14159, 2)

Repare que esta query retorna 3.14 (truncado para 2 casas decimais).

POWER (base, exp): A função POWER calcula a potência de um número elevado a uma
potência específica.

SELECT POWER(2, 3)
Nesting de Funções: É possível ainda aninhar funções, ou seja, usar o resultado de uma
função como argumento de outra. Veja o exemplo do aninhamento de ABS e ROUND:

SELECT ROUND(ABS(-5.678), 1)

INITCAP, UPPER, LOWER, CONCAT:

INITCAP (st): Transforma a primeira letra de cada palavra em maiúscula.


UPPER (st): Converte uma string em letras maiúsculas.
LOWER (st): Converte uma string em letras minúsculas.
CONCAT (st1, st2): Concatena duas ou mais strings. É equivalente ao uso do operador
pipes (II).

Exemplos:

SELECT INITCAP('olá, mundo!')


SELECT UPPER('abc')
SELECT LOWER('XYZ')
SELECT CONCAT('Hello', ' ', 'World')

LPAD, RPAD, REPLACE, SUBSTRING:

LPAD (st1, n, st2): Preenche uma string (st1) com caracteres (st2) à esquerda até atingir
um comprimento específico (n).
RPAD (st1, n, st2): Preenche uma string (st1) com caracteres (st2) à direita até atingir um
comprimento específico (n).
REPLACE (st, st_de_busca, st_de_substituição): Substitui todas as ocorrências de uma
substring por outra.
SUBSTRING (st, m, n): Extrai uma parte de uma string (st) com base em uma posição inicial
(m) e um comprimento (n).

Exemplos:

SELECT LPAD(RPAD(nome, 30, '*'), 40, '*')


FROM cliente
SELECT logradouro, REPLACE(REPLACE(logradouro, 'Street', 'St'), 'St','Street')
FROM cliente

SELECT pais, SUBSTRING(pais,1,3)


FROM cliente

LTRIM, RTRIM:

LTRIM (st): Remove espaços em branco à esquerda de uma string.


RTRIM (st): Remove espaços em branco à direita de uma string.

Exemplos:

SELECT LTRIM(' Olá') -- Retorna 'Olá'


SELECT RTRIM('Mundo ') -- Retorna 'Mundo'

TO_CHAR, TO_NUMBER, TO_DATE:

TO_CHAR (m, formato): Converte um valor (m) em uma string de acordo com um formato
específico.
TO_NUMBER (st, formato): Converte uma string em um valor numérico, seguindo um
formato desejado.
TO_DATE (st, formato): Converte uma string em uma data de acordo com um formato
específico.

Exemplos:

SELECT TO_CHAR(salario, ‘$9,999.99')


FROM empregado

Observação:
O formato 'L9,999.999' é usado para R$.

SELECT TO_NUMBER('42.75', '99.99')


SELECT TO_DATE('2023-09-19', 'YYYY-MM-DD')

Para fixar bem o conhecimento, suponha que você deseja construir uma query para
consultar o tempo de empresa (em dias) de cada funcionário no BD Sporting Goods. Uma
solução possível seria:

SELECT nome, CURRENT_DATE - data_admissao AS qtd_dias


FROM empregado
ORDER BY qtd_dias DESC

Pergunta-se:
E se quiséssemos saber a informação acima em anos, meses e dias? Como faríamos?

LENGTH: A função LENGTH retorna o número de caracteres em uma string.

SELECT LENGTH('Hello, World!')

Essas funções e técnicas são fundamentais para manipular dados em consultas SQL
de maneira eficaz e personalizada. Ao compreender como essas funções funcionam e
quando usá-las, você poderá criar consultas SQL mais poderosas e adaptadas às suas
necessidades específicas.

LET’S PRACTICE!
SQL_15: Qual cliente tem o maior nome? Ordene resultados pelo nome, em ordem
decrescente.

SQL_16: Escreva uma consulta SQL que contenha três colunas: a primeira, com
sobrenome “justificado” à direita (use LPAD com tamanho final de 20 caracteres), a
segunda, com a inicial do primeiro nome e a terceira, com o salário, escrito da seguinte
forma: ‘***** $9,999.99’ – com tamanho total de 15 caracteres) – para estoquistas.

SQL_17: Escreva um consulta SQL para mostrar os cargos de vice presidentes. Substitua
toda instância de VP por ‘Vice Presidente’. Nomeie a coluna “CARGOS DE VICE
PRESIDENTE”.
SQL_18: Escreva uma consulta SQL que irá projetar o ID, nome e sobrenome dos
empregados cujo IDs “sejam” ímpares.

SQL_19: Elabore uma query para mostrar todos os pedidos feitos (*), caso pedido tenha
sido feito entre 31/08 e 07/09 de 2021.

SQL_20: Mostrar o id do pedido, o id do cliente e valor final total líquido (que entrará para
a empresa) dos pedidos feitos entre 31/08 e 07/09 de 2021 cujo valor total original seja
maior que $7.000,00. Sabe-se que a empresa dará um desconto de $500 e pagará imposto
de 5% sobre o total após o desconto para pedidos cujo valor total original seja maior que
$7.000,00. O valor mostrado deve ser arredondado para 2 casas decimais.

6. AGREGAÇÕES E SUAS FUNÇÕES

COUNT: A função COUNT é usada para contar o número de registros em uma consulta.

SELECT COUNT(*) FROM pedido

Pergunta-se:
Qual a diferença entre esses Count's?

SELECT COUNT(*), COUNT(id), COUNT(id_gerente), COUNT(DISTINCT id_gerente)


FROM empregado

SUM(n), AVG(n), STDDEV(n) e VARIANCE(n): As funções retornam a soma, a média, o


desvio padrão e a variância, respectivamente, calculados para todos os valores em uma
coluna (atributo) selecionada, excluindo quaisquer valores nulos (NULL).
SELECT SUM(preco) AS "Soma dos preços",
AVG(preco) AS "Média dos preços",
STDDEV(preco) AS "Desvio padrão entre preços",
VARIANCE(preco) AS "Variância entre os preços"
FROM item
MIN e MAX: As funções MIN e MAX são usadas para encontrar o valor mínimo e máximo
em uma coluna, respectivamente. Por exemplo:

SELECT MAX(preco) AS "O maior preço",


MIN(preco) AS "O menor preço"
FROM item

Pergunta-se:
O que vocês acham que aconteceriam se o parâmetro passado para as funções MAX e
MIN fossem textuais? Experimentem executar o código abaixo:

SELECT MAX(nome), MIN(nome)


FROM empregado

GROUP BY: A cláusula GROUP BY é usada para agrupar resultados com base em valores
em uma ou mais colunas.

SELECT id_gerente, AVG(salario), COUNT(*), SUM(salario)


FROM empregado
GROUP BY id_gerente
ORDER BY AVG(salario) DESC

No exemplo acima, temos a média salarial por gerência, quanto empregos por
gerência e qual é o total da folha de pagamento por gerência.

HAVING: A cláusula HAVING é usada para filtrar grupos resultantes de uma consulta com
base em uma condição. Por exemplo:

SELECT cargo, TO_CHAR(AVG(salario),'$9999.99')


FROM empregado
WHERE salario > 1500
GROUP BY cargo
HAVING AVG(salario) > 1700
Observação:
HAVING diz respeito a uma condição aplicada a GRUPOS, enquanto WHERE trata de
condição referente a elementos.

LET’S PRACTICE!
SQL_21: Escreva um consulta SQL que mostre a média dos salários dos estoquistas, com
duas casas decimais e com cifrão ($).

SQL_22: Quantos empregados ganham entre $1000 e $1500?

SQL_23: Qual é o valor médio ($), o total ($) e a quantidade de pedidos por região dos
clientes? E descubra também qual região tem comprado mais de da empresa?

7. SUBCONSULTAS (SUBQUERIES)

Uma subconsulta é uma consulta aninhada dentro de outra consulta. Ela pode ser
usada em várias partes de uma consulta principal para realizar tarefas complexas. Por
exemplo, você pode usar uma subconsulta para encontrar o nome e o salário do empregado
que tem o menor salário da empresa:

SELECT nome, salario


FROM empregado
WHERE salario = (SELECT MIN(salario) FROM empregado

Outro exemplo seria:

SELECT I.id_item, I.id_pedido, P.nome, I.preco


FROM produto P, item I
WHERE P.id = I.id_produto AND
preco = (SELECT MAX(preco) FROM item)

Neste último exemplo, a query buscou o nome do produto que teve o maior preço
pago, dentre todos os pedidos.
LET’S PRACTICE!
SQL_24: Final de ano, o gerente quer escolher o funcionário do ano... diga a ele quem
vendeu ($) mais até hoje na empresa.

SQL_25: Mostre o nome dos vendedores que estão abaixo dos 25% da média de vendas
dos vendedores ?

Você também pode gostar