Formação Desenvolvedor Moderno
Módulo: Banco de Dados
Capítulo: Consultas SQL
https://devsuperior.com.br
Agenda
• Álgebra relacional
• Projeção
• Restrição
• Produto cartesiano
• Junção
• SELECT, FROM, WHERE
• Junções
• Operadores LIKE, IN, BETWEEN
• Funções "comuns"
• Funções de agregação: COUNT, SUM, MIN, MAX, AVG
• Cláusulas DISTINCT, ORDER BY, TOP, LIMIT, GROUP BY
• Subconsulta
• União e diferença
2
Motivação
• Como extrair informações de uma base de dados?
• Como responder questões de negócio?
É preciso saber CONSULTAR os dados de forma a obter as informações
desejadas para responder as questões de negócio.
• Quais são os produtos da categoria dos eletrônicos?
• Qual foi o melhor vendedor do mês?
• Quanto foram os custos da empresa em cada categoria?
• Quais alunos já terminaram todas tarefas do curso?
Consultas SQL
A SQL possui um subconjunto dedicado a realizar consultas a uma base
de dados. São os comandos "SELECT ...".
Alguns autores classificam esse subconjunto como DQL (Data Query
Language), e outros autores o colocam dentro da DML (Data
Manipulation Language).
https://pt.stackoverflow.com/questions/262867/o-que-s%C3%A3o-as-
siglas-ddl-dml-dql-dtl-e-dcl
4
Referências
https://www.w3schools.com/sql/default.asp
https://github.com/devsuperior/scripts-sql-cap7
https://www.beecrowd.com.br
Álgebra relacional
As consultas a um banco de dados relacional estão fundamentadas em
uma base teórica muito consolidada e elegante chamada Álgebra
Relacional.
Da mesma forma que temos uma sólida álgebra na aritmética e nos
conjuntos, também a temos no modelo relacional (tabelas).
- Operações elementares (adição, subtração, multiplicação, etc.)
- Operações de conjuntos (interseção, união, diferença)
6
Aritmética
5 + 4 RESULTADO = 9
Expressão composta por O resultado é um NÚMERO
NÚMEROS e OPERADORES ARITMÉTICOS
Álgebra relacional
RESULTADO =
Expressão composta por O resultado é uma RELAÇÃO (TABELA)
RELAÇÕES (TABELAS) e OPERADORES RELACIONAIS
PROJEÇÃO
É uma operação que "filtra" as colunas da tabela.
Exemplo:
"Projeção das colunas id e nome da tabela tb_empregado"
Notação da álgebra relacional:
π (id, nome) tb_empregado
Notação SQL:
SELECT id, nome
FROM tb_empregado
8
Testando na prática
https://github.com/devsuperior/scripts-sql-cap7/blob/main/empregados.sql
RESTRIÇÃO (SELEÇÃO)
É uma operação que "filtra" as linhas da tabela
conforme um predicado. Exemplo:
"Restrição na tb_empregado das linhas tal que: dept_id = 2"
Notação da álgebra relacional:
σ (dept_id = 2) tb_empregado
Notação SQL:
SELECT *
FROM tb_empregado
WHERE dept_id = 2
10
Você pode combinar operações
π (id, nome) (σ (dept_id = 2) tb_empregado)
SELECT id, nome
FROM tb_empregado
WHERE dept_id = 2
RESULTADO FINAL =
11
PRODUTO CARTESIANO
É uma operação que faz o "cruzamento" de todos
registros entre duas tabelas. Exemplo:
"Produto cartesiano entre as tabelas tb_empregado e
tb_departamento"
Notação da álgebra relacional:
tb_empregado × tb_departamento
Notação SQL:
SELECT *
FROM tb_empregado, tb_departamento
12
JUNÇÃO
Faz o "cruzamento" entre duas tabelas apenas
dos registros correspondentes. Exemplo:
"Junção entre as tabelas tb_empregado e tb_departamento"
Notação da álgebra relacional:
tb_empregado tb_departamento
Notação SQL:
SELECT *
FROM tb_empregado
INNER JOIN tb_departamento ON tb_empregado.dept_id = tb_departamento.id
13
Alternativa: produto cartesiado + restrição
σ (tb_empregado.dept_id = tb_departamento.id) (tb_empregado × tb_departamento)
SELECT *
FROM tb_empregado, tb_departamento
WHERE tb_empregado.dept_id = tb_departamento.id
14
Resumo
Principais formas de obter a junção entre duas tabelas usando SQL:
SELECT *
FROM tb_empregado
INNER JOIN tb_departamento ON tb_empregado.dept_id = tb_departamento.id
SELECT *
FROM tb_empregado, tb_departamento
WHERE tb_empregado.dept_id = tb_departamento.id
15
Tipos de junção
https://www.w3schools.com/sql/sql_join.asp
16
Testando na prática
https://github.com/devsuperior/scripts-sql-cap7/blob/main/joins.sql
17
Renomeação: AS
Usos comuns:
• Remover ambiguidades
• Dar nome a campos calculados
• Dar nome a tabelas resultantes de subconsultas
18
Operadores LIKE, IN, BETWEEN
https://www.w3schools.com/sql/sql_like.asp
https://www.w3schools.com/sql/sql_in.asp
https://www.w3schools.com/sql/sql_ref_between.asp
Testando na prática:
https://github.com/devsuperior/scripts-sql-cap7/blob/main/sales.sql
Nota: o operador IN pode ser usado tanto para valores como para
tabelas.
19
Funções comuns
UPPER, LOWER
CAST, ROUND
DAY, MONTH, YEAR, EXTRACT
CONCAT
CASE
REPLACE
CHAR_LENGTH
MD5
Atenção: as funções variam um pouco entre os SGBDs
20
Funções de agregação
COUNT, SUM, AVG, MIN, MAX
https://www.w3schools.com/sql/sql_count_avg_sum.asp
https://www.w3schools.com/sql/sql_min_max.asp
21
DISTINCT
https://www.w3schools.com/sql/sql_distinct.asp
Exemplo: id e nome dos vendedores que venderam produtos mais
caros que 500.00
22
ORDER BY, TOP, LIMIT
https://www.w3schools.com/sql/sql_orderby.asp
https://www.w3schools.com/sql/sql_top.asp
23
GROUP BY
https://www.w3schools.com/sql/sql_groupby.asp
Exemplo: quantidade de vendas por dia
Exemplo: total em dinheiro vendido por vendedor
24
Subconsultas
Usos comuns:
• Diferença / União
• Resolução de consultas complexas
O resultado de uma consulta é uma tabela. Este resultado pode naturalmente ser
usado como parâmetro de uma cláusula FROM ou qualquer outra cláusula que
receba uma tabela como argumento.
Exemplo: data da venda e nome do vendedor para vendas cujo preço unitário seja
menor que 500
25
UNIÃO
https://www.w3schools.com/sql/sql_union.asp
Exemplo: id e data das vendas cujo preço unitário é maior que 800.0,
ou que sejam do vendedor "Joaquim Silva Borges"
26
DIFERENÇA
https://www.w3schools.com/sql/sql_in.asp
Exemplo: id, data, e quantidade de todas vendas que não sejam nos
mesmos dias em que o vendedor "Ivan Reis" vendeu.
Base de dados:
https://github.com/devsuperior/scripts-sql-cap7/blob/main/sales_diff.sql
27