1 of 20

Banco de Dados

Introdução a BD

Prof. Marcelo Iury de Sousa Oliveira

marcelo@ci.ufpb.br

http://sites.google.com/site/marceloiury

Banco de Dados

Aula 7 – SQL: Consultas Simples

2 of 20

Banco de Dados

Introdução a BD

Consultas Básicas

3 of 20

Exemplo

  • Professor(nome, siape, categoria, salario, cod_depto)
  • Disciplina(nome, cod_disciplina, carga_horária)
  • Departamento(nome_depto, numero_depto)
  • Ministra(siape, cod_disciplina, periodo)

Banco de Dados de Exemplo

4 of 20

Insert into Ministra values ('16710', 'IF971', '2020.1');

Insert into Ministra values ('16710', 'IF971', '2020.2');

Insert into Ministra values ('16730', 'IF972', '2020.1');

Insert into Ministra values ('16730', 'IF972', '2020.2');

Insert into Ministra values ('16720', 'IF973', '2020.1');

Insert into Ministra values ('16720', 'IF973', '2020.2');

Insert into Ministra values ('16740', 'IF974', '2020.1');

Insert into Ministra values ('16760', 'IF975', '2020.2');

Insert into Ministra values ('16760', 'IF975', '2021.1');

Insert into Disciplina values ('Artes das Trevas', 'IF971', '60h') ;

Insert into Disciplina values ('Trato de Criaturas Mágicas', 'IF972', '60h');

Insert into Disciplina values ('Defesa Contra Artes das Trevas', 'IF973', '75h');

Insert into Disciplina values ('Poções', 'IF974', '75h');

Insert into Disciplina values ('Herbologia', 'IF975', '60h');

Insert into Professor values ('Severo Snape', '16710', 'Adjunto 1', 1000.00, 'D003') ;

Insert into Professor values ('Remo Lupin', '16720', 'Adjunto 2', 2000.00, 'D003');

Insert into Professor values ('Rúbeo Hagrid', '16730', 'Adjunto 1', 1500.00, 'D001');

Insert into Professor values ('Horácio Slughorn', '16740', 'Adjunto 1', 1500.00, 'D003');

Insert into Professor values ('Pomona Sprout', '16750', 'Adjunto 1', 1500.00, 'D002');

Insert into Professor values ('Guilhermina Grubbly-Plank', '16760', 'Adjunto 1', 1500.00, 'D001’);

Insert into Departamento values ('Magia', 'D003');

Insert into Departamento values ('Ervas e Plantas', 'D001');

Insert into Departamento values ('Criaturas Mágicas', 'D001');

Banco de Dados de Exemplo

https://docs.google.com/document/d/1V_8KfV0HjSR8epXMxdJIGHe-oZKC2UPiM4mxQtQPhZ0/edit?usp=sharing

5 of 20

Insert into Disciplina values ('Artes das Trevas', 'IF971', '60h') ;

Insert into Disciplina values ('Trato de Criaturas Mágicas', 'IF972', '60h');

Insert into Disciplina values ('Defesa Contra Artes das Trevas', 'IF973', '75h');

Insert into Disciplina values ('Poções', 'IF974', '75h');

Insert into Disciplina values ('Herbologia', 'IF975', '60h');

Insert into Departamento values ('Magia', 'D003');

Insert into Departamento values ('Ervas e Plantas', 'D001');

Insert into Departamento values ('Criaturas Mágicas', 'D001');

Insert into Professor values ('Severo Snape', '16710', 'Adjunto 1', 1000.00, 'D003') ;

Insert into Professor values ('Remo Lupin', '16720', 'Adjunto 2', 2000.00, 'D003');

Insert into Professor values ('Rúbeo Hagrid', '16730', 'Adjunto 1', 1500.00, 'D001');

Insert into Professor values ('Horácio Slughorn', '16740', 'Adjunto 1', 1500.00, 'D003');

Insert into Professor values ('Pomona Sprout', '16750', 'Adjunto 1', 1500.00, 'D002');

Insert into Professor values ('Guilhermina Grubbly-Plank', '16760', 'Adjunto 1', 1500.00, 'D001');

Insert into Ministra values ('16710', 'IF971', '2020.1');

Insert into Ministra values ('16710', 'IF971', '2020.2');

Insert into Ministra values ('16730', 'IF972', '2020.1');

Insert into Ministra values ('16730', 'IF972', '2020.2');

Insert into Ministra values ('16720', 'IF973', '2020.1');

Insert into Ministra values ('16720', 'IF973', '2020.2');

Insert into Ministra values ('16740', 'IF974', '2020.1');

Insert into Ministra values ('16760', 'IF975', '2020.2');

Insert into Ministra values ('16760', 'IF975', '2021.1');

Banco de Dados de Exemplo

https://docs.google.com/document/d/1V_8KfV0HjSR8epXMxdJIGHe-oZKC2UPiM4mxQtQPhZ0/edit?usp=sharing

Versão corrigida ;)

6 of 20

Consultas em SQL

  • Estrutura básica da forma select-from-where:

Select

SELECT <lista de colunas>

FROM <lista de tabelas>

WHERE <condição>

7 of 20

Consultas em SQL

Select - Exemplos

SELECT * FROM Professor

SELECT * FROM Professor WHERE siape = ‘16710’

SELECT * FROM Professor WHERE salario > 1200 and categoria = ‘Adjunto 1’

8 of 20

O que essa consulta retorna?

  • Equivalente a uma seleção e projeção na Álgebra Relacional

Seleção de Atributos

SELECT nome, salario FROM Professor

WHERE siape = ‘16710’

9 of 20

Uso de alias (apelidos)

Equivalente, a operação Renomear na Álgebra Relacional

Uso de Alias na Seleção

SELECT nome, salario FROM Professor P

WHERE P.siape = ‘16710’

10 of 20

Resultados duplicados

(‘Adjunto 1’)

(‘Adjunto 2’)

(‘Adjunto 1’)

(‘Adjunto 1’)

(‘Adjunto 2’)

SELECT categoria

FROM Professor

SELECT DISTINCT categoria

FROM Professor

Eliminando Resultados Duplicados

11 of 20

Ordenando valores

Ordenando Valores

SELECT * FROM Professor ORDER BY nome DESC

SELECT * FROM Professor ORDER BY salario ASC

12 of 20

Junção de Tabelas

  • Equivalente, a operação de seleção, projeção, junção e renomeação da Álgebra Relacional

Junção de Tabelas

SELECT nome, nome_depto FROM Professor, Departamento WHERE cod_depto = numero_depto

13 of 20

Junção de Tabelas

  • SELECT

SELECT P.nome, D.nome, M.periodo

FROM Professor P, Disciplina D, Ministra M

WHERE P.siape = M.siape AND D.cod_disciplina = M.cod_disciplina

Renomeação e Junção de Tabelas

Erro ao usar colunas

com mesmo nome

14 of 20

Junção de Tabelas

  • Grau da relação resultado é igual a soma da quantidade de atributos de todas as tabelas.

Junção de Tabelas e Seleção de Tuplas

SELECT *

FROM Professor P, Disciplina D, Ministra M

WHERE P.siape = M.siape AND D.cod_disciplina = M.cod_disciplina AND salario = 1000

15 of 20

Comparação de Cadeias de Caracteres

Em alguns SGBDS, o operador LIKE pode vir como função. Exemplo

SELECT * FROM Disciplina

WHERE nome LIKE ‘IF_ _ _’

SELECT * FROM Disciplina

WHERE nome LIKE %magia%

“ %“ : Substitui um número qualquer de caracteres

“_“: Substitui um único caracter

Comparação de Caracteres

SELECT * FROM Disciplina WHERE nome LIKE(‘IF%')

16 of 20

  • Operador BETWEEN: Comparação de valores

Operador IN: filtro a partir de conjunto de valores

SELECT * FROM Professor

WHERE salario BETWEEN 1200 AND 3000

Comparação de Valores e Conjuntos

SELECT * FROM Professor

WHERE categoria IN (‘Adjunto 1’, ‘Assistente 1’)

17 of 20

  • Operador NOT: Ele ele pega a expressão e reverte ela. Se era uma condição TRUE, ela vira FALSE

SELECT * FROM Professor

WHERE salario NOT BETWEEN 1200 AND 3000

Operador NOT

SELECT * FROM Professor

WHERE categoria NOT IN

(‘Adjunto 1’, ‘Assistente 1’)

18 of 20

  • Operadores aritméticos podem ser usados nas consultas
    • Na seleção de atributos:

    • No condicional:

SELECT nome,

(1.1*salario) as salario_aumentado

FROM Professor WHERE categoria = ‘Adjunto 1’

SELECT * FROM Professor

WHERE salario+(salario*0.3)

BETWEEN 1200 AND 3000

Operações Matemáticas

19 of 20

  • IS NULL

    • No condicional:

SELECT * FROM Professor

WHERE categoria IS NULL

SELECT * FROM Professor

WHERE salario+(salario*0.3)

BETWEEN 1200 AND 3000

Outros Operadores

20 of 20

  • Funcionario (Codigo, PrimeiroNome, SegundoNome, UltimoNome, DataNasci, CPF, RG, Endereco, CEP, Cidade, Fone, CodigoDepartamento, Funcao, Salario)
  • Departamento (Codigo, Nome, Localizacao, CodigoFuncionarioGerente)

  1. Listar nome e sobrenome ordenado por sobrenome
  2. Listar todos os campos de funcionários ordenados por cidade
  3. Liste os funcionários que têm salário superior a R$ 1.000,00 ordenados�pelo nome completo
  4. Liste a data de nascimento e o primeiro nome dos funcionários�ordenados do mais novo para o mais velho
  5. Liste o nome, o nome do departamento e a função de todos os funcionários ���

    • No condicional:

Exercícios