Você está na página 1de 47

Centro de Ciências Exatas e Tecnologia

Cursos de Informática

SQL Básico – Parte 1

Select from where

Prof. Daniel Luis Notari

Maio - 2020
Sumário
• Parte 1
– SQL DML (histórico)
– Comando select-from-where
• Parte 2
– Funções de agregação, agrupamento e ordenação
• Parte 3
– Produto Cartesiano e operações simples de junção
– Tabelas Virtuais (visões)
• Parte 4
– Álgebra Relacionais
– Operações de Conjuntos
– Junções
Módulos componentes de um SGBD
SQL
• SQL (Structured Query Language)
• Linguagem de pesquisa declarativa padrão
para banco de dados relacional.
• Muitas das características originais do SQL
foram inspiradas na álgebra relacional.
• http://pt.wikipedia.org/wiki/SQL
SQL
• DDL - Linguagem de Definição de Dados
– Manipulação de esquemas
• DML - Linguagem de Manipulação de Dados
– Manipulação de dados
– Consulta de dados
• DCL - Linguagem de Controle de Dados
– Permissões de acesso
• DTL - Linguagem de Transação de Dados
– Manipulação de transações
SQL

ANSI (American National Standards Institute)


ISO (International Standards Organization )
Processamento de Consultas
Dados para as consultas
• Tem-se a seguinte base de dados:
• LivrosTemp (codigo, titulo, autor, edicao, ano):
9.256.539 registros
Legenda:
• campo sublinhado : chave primária
• campo com #: chave estrangeira

Faça download do backup da base de dados em AVA da


disciplina. Tem a base completa e uma base reduzida
com dados entre 1000 e 10000 por tabela.
Sintaxe básica

SELECT <Lista_de_colunas>
FROM <Lista_de_tabelas>
[WHERE <Condição>]

• O resultado de uma consulta SQL é uma


relação ou uma tabela (resultset)
Sintaxe básica
• Recuperar o autor e o titulo do livro dos dez primeiros
registros
select autor, titulo
from livrostemp
limit 10
Exercício
1. Escreva uma consulta que liste o título e o
ano dos livros. Teste a consulta.
2. Escreva uma consulta que liste o título e a
edição dos livros. Teste a consulta.
3. Escreva uma consulta que liste o título, a
edição e o ano de publicação dos livros. Teste
a consulta.
Crie um nome arquivo no PgAdmin,
salve com o nome SQLBasico.sql
Você pode usar comentários com “—”
ou “\* */”
Exercício - Respostas
-- 1. Escreva uma consulta que liste o título e o ano dos livros.
select titulo, ano
from livrosTemp
limit 10
-- 2. Escreva uma consulta que liste o título e a edição dos livros.
select titulo, edicao
from livrosTemp
limit 10
-- 3. Escreva uma consulta que liste o título, a edição e o ano de
publicação dos livros.
select titulo, edicao, ano
from livrosTemp
limit 10
Sintaxe básica
• Uso de alias
– Permite renomear o nome de uma coluna ou tabela
– Comando as (as vezes omitido)

• Recuperar o autor e o titulo do livro dos dez primeiros registros


select l.autor, l.titulo
from livrostemp as l
limit 10

select l.autor, l.titulo


from livrostemp l
limit 10
Exercício
4. Escreva uma consulta que liste o título e o ano
dos livros. Teste a consulta.
5. Escreva uma consulta que liste o título e a
edição dos livros. Teste a consulta.
6. Escreva uma consulta que liste o título, a
edição e o ano de publicação dos livros. Teste a
consulta.

Reescreva as consultas acima usando alias


Exercício - Respostas
-- 4. Escreva uma consulta que liste o título e o ano dos livros.
select l.titulo, l.ano
from livrosTemp l
limit 10
-- 5. Escreva uma consulta que liste o título e a edição dos livros.
select l.titulo as Titulo_do_livro, l.edicao as Edicao
from livrosTemp l
limit 10
-- 6. Escreva uma consulta que liste o título, a edição e o ano de
publicação dos livros.
select l.titulo, l.edicao, l.ano
from livrosTemp l
limit 10
Sintaxe básica
• Uso de asterisco
– Permite recuperar todos os campos de uma
consulta
• Recuperar o autor e o titulo do livro dos dez primeiros registros
select *
from livrostemp
limit 10
Sintaxe básica
• Uso de asterisco
– Pode resultar em redundância quando houver mais
de uma tabela na clausula FROM
– Solução: usar alias ou o nome da tabela na frente
• Recuperar o autor e o titulo do livro do codigo 1
select *
from livrostemp, livrostemp l
where codigo = 1
limit 10

ERRO: referência à coluna "codigo" é ambígua


LINE 3: where codigo = 1
Sintaxe básica
• Uso de asterisco (SOLUÇÃO REDUNDÂNCIA)
– Pode resultar em redundância quando houver mais
de uma tabela na clausula FROM
– Solução: usar alias ou o nome da tabela na frente
• Recuperar o autor e o titulo do livro do codigo 1
select *
from livrostemp, livrostemp l
where l.codigo = 1
limit 1
Sintaxe básica
• Clausula Distinct
• especifica eliminação de linhas duplicadas

- Consulta demonstrativa apenas

select ano select distinct ano


from livrostemp from livrostemp
where ano = 2013 where ano = 2013
limit 10 limit 10
Sintaxe básica
• Clausula Distinct
• especifica eliminação de linhas duplicadas
Lista a coluna ano para os dez primeiros registros

select ano select distinct ano


from livrostemp from livrostemp
limit 10 limit 10

Base completa

Base Reduzida
resulta em 2013 apenas
Exercício
7. Escreva uma consulta que liste o título e o ano dos
livros. Teste a consulta. Compare com a consulta 4.

8. Escreva uma consulta que liste o título e a edição dos


livros. Teste a consulta. Compare com a consulta 5.

9. Escreva uma consulta que liste todos os atributos


usando o comando *. Teste a consulta.

Reescreva as consultas acima usando o comando distinct


Exercício - Respostas
-- 7. Escreva uma consulta que liste o título e o ano dos livros.
select distinct l.titulo, l.ano
from livrosTemp l
limit 10
-- 8. Escreva uma consulta que liste o título e a edição dos livros.
select distinct l.titulo as Titulo_do_livro, l.edicao as Edicao
from livrosTemp l
limit 10
-- 9. Escreva uma consulta que liste todos os atributos usando o
comando *.
select *
from livrosTemp l
limit 10
Sintaxe básica
• Comparações entre substrings
• Operador de comparação LIKE
• Comparação de padrões de cadeias de caracteres
• As partes podendo especificar dois caracteres:
– % : substitui um número arbitrário de caracteres
entre zero ou mais caracteres
– Underscore (_) : substitui um único caractere
Recuperar todos os livros que possuem mais de 9 edições
select titulo, edicao A consulta não retornou
from livrostemp nenhum registro. Isto acontece porque
where edicao like '__' Edição tem somente um dígito
Sintaxe básica
• Comparações entre substrings
Recuperar todos os livros que possuem ao menos uma edição

select titulo, edicao


from livrostemp
where edicao like ‘_‘
limit 10
Sintaxe básica
• Comparações entre substrings

Recuperar todos os livros que possuem a palavra war no titulo

select titulo
from livrostemp
where titulo like ‘%War%'
limit 10
Exercício
10. Escreva uma consulta procurando o primeiro
nome do autor de livros como Daniel ou Daniele
ou Daniela. Use o comando like. Teste a
consulta.
11. Escreva uma consulta procurando a palavra
young no título dos livros. Use o comando like.
Teste a consulta.
12. Escreva uma consulta procurando o nome do
autor de livros como Daniel tanto no início, meio
ou fim. Use o comando like. Teste a consulta.
Exercício - Respostas
-- 10. Escreva uma consulta procurando o primeiro nome do autor de
livros como Daniel ou Daniele ou Daniela. Use o comando like.
select autor
from livrosTemp
where autor like 'Daniel_ %’ limit 100
-- 11. Escreva uma consulta procurando a palavra young no título dos
livros. Use o comando like. select autor
from livrosTemp
where titulo like '%young%' limit 100
-- 12. Escreva uma consulta procurando o nome do autor de livros
como Daniel tanto no início, meio ou fim. Use o comando like.
select autor
from livrosTemp
where autor like '%Daniel%' limit 100
Sintaxe básica
• Trabalhar com período de informações
• Clausula between
• Deve se fornecer um valor inicial e um valor final
Recuperar todos os livros publicados entre 2010 e 2011

select count(*)
from livrostemp
where ano between 2010 and 2011
O resultado
Base Reduzida tem apenas o ano 2013 aponta mais de
Testar com where ano between 2013 and 2013
300 mil
respostas
Exercícios
13. Escreva uma consulta que liste o titulo e ano
dos livros publicados entre 2000 e 2016. Teste a
consulta.
14. Escreva uma consulta que lista o autor e ano da
procura pela palavra young no título dos livros para
livros publicados entre 2000 e 2016. Use o
comando like. Teste a consulta.
15. Escreva uma consulta que lista o autor e ano da
procura pelo nome do autor de livros como Daniel
publicados entre 2000 e 2016. Use o comando like.
Teste a consulta.
Escreva as consultas acima usando o comando between
Exercícios – Respostas
-- 13. -- 15. select autor, ano
select l.titulo, ano from livrosTemp
from livrosTemp l where autor like '%Daniel%'
where ano between 2000 and ano between 2000 and 2016
and 2016 limit 100 limit 100
-- 14.
select autor, ano
from livrosTemp
where titulo like '%young%’
and ano between 2000 and 2016
limit 100
Sintaxe básica
• Campos Vazios: IS NULL (IS NOT NULL)
Recuperar todos os livros em que não há um nome de autor informado
select *
from livrostemp A consulta não retornou
where titulo is null nenhum registro

Recuperar todos os livros em que há um nome de autor informado

select *
from livrostemp
where titulo is not null
limit 10
Exercícios

16. Escreva uma consulta que pesquise por


nomes de autores nulos. Teste a consulta.
17. Escreva uma consulta que pesquise por
títulos não nulos. Teste a consulta.
18. Escreva uma consulta que pesquise por anos
nulos. Teste a consulta.
Exercícios - Respostas
-- 16. Escreva uma consulta que
pesquise por nomes de autores nulos.
select autor
from livrosTemp -- 18. Escreva uma consulta
where autor is null
que pesquise por anos
nulos.
-- 17. Escreva uma consulta que
pesquise por títulos não nulos. select ano
from livrosTemp
select titulo
where ano is null
from livrosTemp
where titulo is not null
Sintaxe básica
• Operadores de comparação
– Maior (ou igual)
– Menor (ou igual)
– Igual
– Diferente

select titulo
from livrostemp
where ano > 2000
limit 1

select titulo
from livrostemp
where ano >= 2000
limit 1
Sintaxe básica
• Operadores de comparação
– Maior (ou igual)
– Menor (ou igual)
– Igual
– Diferente

select titulo
from livrostemp
where ano <= 2000
limit 1 A consulta não retornou
select titulo nenhum registro
from livrostemp
where ano < 2000
limit 1
Sintaxe básica
• Operadores de comparação
– Maior (ou igual)
– Menor (ou igual)
– Igual
– Diferente

select titulo
A consulta não retornou nenhum
from livrostemp
registro
where ano = 2000
limit 1
select titulo
from livrostemp
where ano <> 2000
limit 1
Sintaxe básica
• Operadores Aritméticos
– Adição +
– Subtração - select 10000 * 1.3
– Multiplicação *
– Divisão /
• Aplicados diretamente a valores numéricos ou a atributos com
domínio numérico

Retirar os dois primeiros caracteres do ano

select titulo, ano - 2000


from livrostemp
where ano > 2000
limit 10
Sintaxe básica
• Operadores Lógicos
– AND
– OR
– NOT
– Parênteses
• Aplicados diretamente na clausula where para
combinar predicados

select distinct ano


from livrostemp
where ano = 2012
or ano = 2013
Sintaxe básica
• Operadores Lógicos
– AND
– OR
– NOT
– Parênteses
• Aplicados diretamente na clausula where para
combinar predicados
select distinct ano
from livrostemp
where ano = 2013
and ano = 2013
limit 10
Sintaxe básica
• Operadores Lógicos
– AND
– OR
– NOT
– Parênteses
• Aplicados diretamente na clausula where para
combinar predicados

Select distinct ano


from livrostemp
where not (ano = 2002)
Sintaxe básica
• Operadores Lógicos
– AND
– OR
– NOT
– Parênteses
• Aplicados diretamente na clausula where para
combinar predicados
select distinct ano
from livrostemp
where (ano = 2012
or ano = 2013)
and edicao = '1'
limit 10
Exercícios
19. Escreva uma consulta que liste os livros
publicados entre 2000 e 2016. Teste a consulta.
20. Escreva uma consulta procurando a palavra
young no título dos livros para livros publicados
entre 2000 e 2016. Use o comando like. Teste a
consulta.
21. Escreva uma consulta procurando o primeiro
nome do autor de livros como Daniel publicados
entre 2000 e 2016. Use o comando like. Teste a
consulta.
Reescreva as consultas acima substituindo o comando between
por maior e menor e os operadores lógicos
Exercícios - Respostas
-- 19. Escreva uma consulta que liste os -- 21. Escreva uma
livros publicados entre 2000 e 2016.
consulta procurando o
select l.titulo, ano
primeiro nome do autor
from livrosTemp l
de livros como Daniel
where ano > 2000 and ano < 2016
publicados entre 2000 e
limit 100
2016. Use o comando like.
-- 20. Escreva uma consulta procurando
a palavra young no título dos livros para select autor, ano
livros publicados entre 2000 e 2016. Use from livrosTemp
o comando like. where autor like
select autor, ano '%Daniel%'
from livrosTemp and ano > 2000
where titulo like '%young%' and ano < 2016
and ano > 2000 and ano < 2016 limit 100
limit 100
Exercício para entregar
O cenário corresponde ao aplicativo Whatsapp. Este tem
a finalidade de troca de mensagens entre usuários de
aparelhos celulares ou grupos de usuários. Considerando
que a troca de mensagens pode ter anexos como imagens
e vídeos capturados pela câmera, recebidos de outros
usuários ou armazenados no aparelho e arquivos de
áudio gravados pelo usuário. Considerando também o
uso de ligações diretas de áudio pelo aplicativo como se
fosse telefone. Além disto, o aplicativo permite
configurações como o uso de criptografia para a troca de
mensagens entre os usuários ou grupos, permite silenciar
grupos ou usuários, além de ter informações pessoais
como uso de backup na nuvem.
Exercício para entregar
Exercício para entregar
1. Criar o modelo lógico aplicando as regras de
tradução para o Diagrama ER do WhatsApp.
2. Criar o projeto físico para o modelo lógico do
WhatsApp.
3. Inserir dados nas tabelas de acordo com
a. quatro usuários
b. um grupo envolvendo os quatro usuários
c. dez mensagens entre os usuários com anexos
d. cinco mensagens para o grupo com anexos
e. cinco ligações entre os usuários
Exercício para entregar
4. Resolver as seguintes consultas
a. Listar todos os usuários
b. Listar todos os grupos
c. Listar as mensagens com anexos
d. Listar as mensagens sem anexos
e. Listar os códigos de telefones
f. Listar as mensagens do dia de hoje
g. Listar as mensagens enviadas entre as 10 e as 18 horas
h. Listar os usuários de nome Daniel (ou outro nome
cadastrado)

Você também pode gostar