SQL
Ana Carolina Salgado
Fernando Fonseca
Valéria Times
11/12/25 © CIn/UFPE 2
SQL
 SQL - Structured Query Language
Linguagem de Consulta Estruturada
 Fundamentada no modelo relacional, inclui
comandos para:
definição de dados
consulta
atualização
11/12/25 © CIn/UFPE 3
SQL
Origem:
 Primeira versão: SEQUEL, definida por Chamberlain
em 1974 na IBM
 Em 1975 foi implementado o primeiro protótipo
 Revisada e ampliada entre 1976 e 1977 e teve seu
nome alterado para SQL por razões jurídicas
 Em 1982, o American National Standard Institute
tornou SQL padrão oficial de linguagem em ambiente
relacional
 Utilizada tanto de forma interativa como incluída em
linguagens hospedeiras
11/12/25 © CIn/UFPE 4
SQL
Enfoques de SQL:
 Linguagem interativa de consulta (ad-hoc):
usuários podem definir consultas
independente de programas.
 Linguagem de programação para acesso a
banco de dados: comandos SQL embutidos
em programas de aplicação.
 Linguagem de administração de dados: o DBA
pode utilizar SQL para realizar suas tarefas.
11/12/25 © CIn/UFPE 5
SQL
Enfoques de SQL (cont):
 Linguagem cliente/servidor: os programas clientes
usam comandos SQL para se comunicarem e
compartilharem dados com o servidor.
 Linguagem para banco de dados distribuídos:
auxilia na distribuição de dados por vários nós e na
comunicação de dados com outros sistemas.
 Caminho de acesso a outros bancos de dados em
diferentes máquinas: auxilia na conversão entre
diferentes produtos em diferentes máquinas.
11/12/25 © CIn/UFPE 6
S Q L
Usos de SQL
DDL
Criar (CREATE)
Destruir (DROP)
Modificar (ALTER)
DML
Consultar (SELECT)
Inserir (INSERT)
Remover (DELETE)
Atualizar (UPDATE)
Segurança
Controle
Administração
Implementação
Ambiente
11/12/25 © CIn/UFPE 7
SQL
Vantagens:
 Independência de fabricante
 Portabilidade entre sistemas
 Redução de custos com treinamento
 Comandos em inglês
 Consulta interativa
 Múltiplas visões de dados
 Manipulação dinâmica dos dados
11/12/25 © CIn/UFPE 8
SQL
Desvantagens:
 A padronização inibe a criatividade
 Está longe de ser uma linguagem relacional
ideal
 Algumas críticas:
falta de ortogonalidade nas expressões
discordância com as linguagens hospedeiras
não dá suporte a alguns aspectos do modelo
relacional.
11/12/25 © CIn/UFPE 9
Esquema Relacional dos
Exemplos
Num-Dep Num-Loc
Locais
Trabalha-em Cad-Emp Num-Proj Horas
Empregado Cad Nome Sexo Salário Num-Dep Cad-Spv
DepartamentoNúmero Nome Cad-Ger Data-Ini
Cad Nome Data-nasc Grau-P
Dependente
Projeto Número Nome Local Num-Dep
11/12/25 © CIn/UFPE 10
SQL
Comandos SQL (padrão ANSI):
 Criação e destruição de tabelas
 Extração de dados de uma tabela
 Inserção, modificação e remoção de
dados
 Definição de visões
 Definição de privilégios de acesso
11/12/25 © CIn/UFPE 11
SQL
Criação de Tabelas
CREATE TABLE <tabela>
(<descrição dos atributos>
<descrição das chaves>)
 Descrição dos atributos: lista dos atributos
com respectivos tipos de dados: smallint,
char, money, varchar, integer, decimal,
float, real, date, time, timestamp, logical.
11/12/25 © CIn/UFPE 12
SQL
 A chave primária deve ser declarada como
not null unique
ou PRIMARY KEY (<atributos>)
 Descrição das chaves: lista das chaves
estrangeiras na forma:
FOREIGN KEY (<atributo>) REFERENCES
<tabela> (<atributo>)
11/12/25 © CIn/UFPE 13
SQL
Criação de tabelas:
Exemplo:
Empregado Cad Nome Sexo Salário Num-Dep Cad-Spv
CREATE TABLE Empregado
(Cad smallint not null,
Nome char (20),
Sexo char,
Salário decimal (10,2),
Num-Dep integer,
Cad-Spv smallint,
PRMARY KEY (Cad),
FOREIGN KEY Num-Dep REFERENCES Departamento
(Número),
FOREIGN KEY Cad-Spv REFERENCES Empregado (Cad))
11/12/25 © CIn/UFPE 14
SQL
Criação de tabelas:
Exemplo:
Trabalha-em Cad-Emp Num-Proj Horas
CREATE TABLE Trabalha-em
(Cad-emp smallint not null ,
Num-Proj integer not null ,
Horas decimal (3,1)
PRIMARY KEY (Cad_emp, Num_proj)
FOREIGN KEY Cad-Emp REFERENCES Empregado
(Cad),
FOREIGN KEY Num-Proj REFERENCES Projeto
(Número))
11/12/25 © CIn/UFPE 15
SQL
Destruição de tabelas
DROP TABLE <tabela>
Elimina a tabela que foi previamente
criada.
Exemplo:
DROP TABLE Empregado
11/12/25 © CIn/UFPE 16
SQL
Extração de Dados de uma Tabela
Comando SELECT
 Selecionando atributos (Projeção):
SELECT <lista de atributos> FROM
<tabela>
Exemplo: Listar nome e salário de todos
os empregados
SELECT Nome, Salário FROM Empregado
11/12/25 © CIn/UFPE 17
SQL
 Selecionando todos os atributos
SELECT * FROM <tabela>
Exemplo: Listar o conteúdo de Empregado
SELECT * FROM Empregado
11/12/25 © CIn/UFPE 18
Operadores Relacionais: =, !=, <, <=, >, >=
Operadores Lógicos: AND, OR e NOT
SQL
 Selecionando tuplas da tabela
SELECT <lista de atributos> FROM
<tabela> WHERE <condição>
onde condição:
<nome atributo> <operador> <valor>
11/12/25 © CIn/UFPE 19
SQL
 Selecionando tuplas da tabela
Exemplos:
Listar nome e sexo dos empregados do
departamento 15.
SELECT Nome, Sexo FROM Empregado
WHERE Num-Dep = 15
Listar nome e sexo dos empregados do
departamento 15 com salário > R$ 1.000,00
SELECT Nome, Sexo FROM Empregado
WHERE Num-Dep = 15 AND Salário > 1000
11/12/25 © CIn/UFPE 20
SQL
Operadores BETWEEN e NOT BETWEEN:
substituem o uso dos operadores <= e >=
... WHERE <nome atributo> BETWEEN
<valor1> and <valor2>
Exemplo:
Listar os empregados com salário entre R$
1.000,00 e R$ 2.000,00
SELECT * FROM Empregado
WHERE Salário BETWEEN 1000 and 2000
11/12/25 © CIn/UFPE 21
SQL
Operadores LIKE e NOT LIKE: só se aplicam sobre
atributos do tipo char. Operam como = e !=,
utilizando os símbolos: % (substitui uma palavra)
e _ (substitui um caracter).
...WHERE <nome atributo> LIKE <valor1>
Exemplo:
 Listar os empregados que tem como primeiro
nome ‘José‘
SELECT Nome FROM Empregado
WHERE Nome LIKE ‘José%’
11/12/25 © CIn/UFPE 22
SQL
Operadores IN e NOT IN: procuram dados que
estão ou não contidos em um dado conjunto de
valores.
... WHERE <nome atributo> IN <valores>
Exemplo:
-Listar o nome e data de nascimento dos
dependentes com grau de parentesco ‘M’ ou ‘P’
SELECT Nome, Data-Nasc FROM Dependentes
WHERE Grau-P IN (‘M’, ‘P’)
11/12/25 © CIn/UFPE 23
SQL
Operadores IS NULL e IS NOT NULL:
identificam valores nulos dos atributos.
... WHERE <nome atributo> IS NULL
Exemplo:
Listar os projetos que não tenham local
definido
SELECT * FROM Projeto
WHERE Local IS NULL
11/12/25 © CIn/UFPE 24
SQL
 Ordenando os dados selecionados
(ORDER BY)
SELECT <lista atributos> FROM <tabela>
[WHERE <condição>] ORDER BY
<Nome atributo> {ASC |
DESC}
11/12/25 © CIn/UFPE 25
SQL
Exemplo:
Listar todos os empregados ordenados
ascendentemente por nome.
SELECT * FROM Empregado ORDER BY
Nome
Listar todos os empregados ordenados
descendentemente por salário
SELECT * FROM Empregado
ORDER BY Salário DESC
11/12/25 © CIn/UFPE 26
SQL
 Realizando cálculo com informação
selecionada
Pode-se criar um campo que não pertença à
tabela a partir de cálculos sobre atributos da
tabela
Exemplo:
Mostrar o novo salário dos empregados
calculado com base no reajuste de 60%
para os que ganham abaixo de R$ 1.000,00
11/12/25 © CIn/UFPE 27
SQL
SELECT Nome, Novo-salário = (Salário *
1.60)
FROM Empregado WHERE Salário <
1000
11/12/25 © CIn/UFPE 28
SQL
 Utilizando funções sobre conjuntos
Comandos: MAX, MIN, SUM, AVG, COUNT
Exemplos:
Mostrar o valor do maior salário dos
empregados
SELECT MAX (Salário) FROM Empregado
11/12/25 © CIn/UFPE 29
SQL
Mostrar qual o salário médio dos
empregados
SELECT AVG (Salário) FROM
Empregado
Quantos empregados ganham mais de
R$1.000,00?
SELECT COUNT (*) FROM Empregado
WHERE Salário > 1000
11/12/25 © CIn/UFPE 30
SQL
 Cláusula DISTINCT
Elimina tuplas duplicadas do resultado de
uma consulta.
Exemplo:
Quais os diferentes salários dos
empregados?
SELECT DISTINCT Salário FROM
Empregado
11/12/25 © CIn/UFPE 31
SQL
 Agrupando informações selecionadas
(GROUP BY)
Organiza a seleção de dados em grupos
Exemplo:
Listar os empregados por sexo
SELECT Nome, Sexo FROM Empregado
GROUP BY Sexo
11/12/25 © CIn/UFPE 32
SQL
 Agrupando Informações de forma
condicional (HAVING)
Seleciona entre as tuplas resultantes, as
que satisfazem um dada condição.
11/12/25 © CIn/UFPE 33
SQL
Exemplo:
Listar o número total de empregados
que recebem salários superior a
R$1.000,00, agrupados por
departamento mas só daqueles com
mais de 5 empregados.
SELECT Num-Dep, COUNT (*)
FROM Empregado
WHERE Salário > 1000
GROUP BY Num-Dep
HAVING COUNT(*) > 5
11/12/25 © CIn/UFPE 34
SQL
 Recuperando dados de várias tabelas
(JOIN)
Citar as tabelas envolvidas na cláusula
FROM
Qualificadores de nomes: para referenciar
o nome do empregado, Empregado.Nome
Exemplos:
Listar o nome do empregado e do
departamento onde está alocado
11/12/25 © CIn/UFPE 35
SQL
SELECT Empregado.Nome,Departamento.Nome
FROM Empregado, Departamento
WHERE Empregado.Num-Dep=
Departamento.Numero;
Listar os nomes dos departamentos que têm
projetos
SELECT Departamento.Nome
FROM Departamento, Projeto
WHERE Projeto.Num-Dep=
Departamento.Numero;
11/12/25 © CIn/UFPE 36
SQL
 Observações:
Podemos utilizar as cláusulas (NOT)
LIKE, (NOT) IN, IS (NOT) NULL
misturadas aos operadores AND, OR e
NOT nas equações de junção.
Podemos agrupar e/ou ordenar o
resultado de uma junção.
Agrupamento/Ordenação pode ser feito
através de mais de um atributo.
11/12/25 © CIn/UFPE 37
SQL
 Exemplo: Listar os departamentos que têm
projetos com número superior a 99 e localizados
em RJ ou SP ordenados por nome de
departamento
SELECT Departamento.Nome
FROM Departamento, Projeto
WHERE Projeto.Local IN (‘RJ’, ‘SP’)
AND Projeto.Número > 99
AND Projeto.Num-Dep=
Departamento.Codigo
ORDER BY Departamento.Nome ;
11/12/25 © CIn/UFPE 38
SQL
 Outro Exemplo: Classificando uma Junção
Para cada departamento, liste o número, o
nome e o salário de seus empregados
SELECT D.Nome, E.Cad, E.Nome, E.Salario
FROM Departamento D, Empregado E
WHERE D.Numero = E.Num-Dep
ORDER BY D.Nome, E.Salario DESC;
11/12/25 © CIn/UFPE 39
SQL
 Outro Exemplo: Agrupando através de mais
de um atributo em uma Junção
Encontre o total de projetos de cada
funcionário
SELECT E.Num-Dep, E.Cad, COUNT(*) AS Total
FROM Trabalha-em T, Empregado E
WHERE E.Cad = T.Cad-Emp
GROUP BY E.Num-Dep, E.Cad
ORDER BY E.Num-Dep, E.Cad;
11/12/25 © CIn/UFPE 40
SQL
 Juntando mais de duas tabelas
Exemplo:
Listar o nome dos empregados, com
seu respectivo departamento que
trabalhem mais de 20 horas em algum
projeto
11/12/25 © CIn/UFPE 41
SQL
SELECT Empregado.Nome,
Departamento.Nome
FROM Empregado, Departamento,
Trabalha-em
WHERE Trabalha-em.Horas > 20
AND Trabalha-em.Cad-Emp = Empregado.Cad
AND Empregado.Num-Dep =
Departamento.Número;
11/12/25 © CIn/UFPE 42
SQL
 Utilizando consultas encadeadas
 O resultado de uma consulta é
utilizado por outra consulta, de forma
encadeada e no mesmo comando SQL.
O resultado do comando SELECT mais
interno (subselect) é usado por outro
SELECT mais externo para obter o
resultado final.
O SELECT mais interno (subconsulta ou
consulta aninhada) pode ser usado
apenas nas cláusulas WHERE e HAVING
do comando mais externo.
11/12/25 © CIn/UFPE 43
SQL
 Utilizando consultas encadeadas(Cont.)
 Existem 3 tipos de subconsultas:
ESCALAR: Retornam um único valor.
ÚNICA LINHA: Retornam várias
colunas, mas apenas uma única linha é
obtida.
TABELA: Retornam uma ou mais
colunas e múltiplas linhas.
11/12/25 © CIn/UFPE 44
SQL
 Exemplo: Usando uma subconsulta com
operador de igualdade
Listar os empregados que trabalham no
departamento de Informática.
SELECT Cad, Nome, Salario
FROM Empregado
WHERE Num-Dep =
(SELECT Numero
FROM Departamento
WHERE Nome = ‘Informática’ );
11/12/25 © CIn/UFPE 45
SQL
 Utilizando consultas encadeadas(Cont.)
 Observações
 A subconsulta anterior é do tipo
ESCALAR: Retorna o código do
departamento de Informática.
Operadores Relacionais: =, !=, <, <=, >, >=
A subconsulta deve sempre estar entre ().
11/12/25 © CIn/UFPE 46
SQL
 Exemplo: Usando uma subconsulta com
função agregada
Listar os empregados cujos salários são
maiores do que o salário médio, mostrando
o quanto são maiores.
SELECT Cad, Nome, Sexo,
Salario - ( SELECT AVG (Salario)
FROM Empregado) AS DifSal
FROM Empregado
WHERE Salario > ( SELECT AVG ( Salario)
FROM Empregado );
11/12/25 © CIn/UFPE 47
SQL
 Utilizando consultas encadeadas(Cont.)
 Observações
 A subconsulta anterior é do tipo
ESCALAR: Retorna o salário médio dos
empregados.
A condição abaixo é incorreta:
WHERE Salario > AVG ( Salario)
11/12/25 © CIn/UFPE 48
SQL
Exemplo: Subconsultas aninhadas: Uso do IN
Listar os departamentos que tenham
qualquer projeto em RJ
SELECT Departamento.Nome
FROM Departamento
WHERE Departamento.Número IN
(SELECT Projeto.Num-Dep FROM
Projeto
WHERE Projeto.Local = ‘RJ’) ;
11/12/25 © CIn/UFPE 49
SQL
Outro Exemplo: Uso do IN
Listar os dependentes dos funcionários que
trabalham no departamento de Informática
SELECT Nome, Data-nasc, Grau-P
FROM Dependente
WHERE Cad IN ( SELECT Cad
FROM Empregado
WHERE Num-Dep =
( SELECT Numero
FROM Departamento
WHERE Nome = ‘Informática’ ) );
11/12/25 © CIn/UFPE 50
SQL
Exemplo: Utilizando ANY / SOME
 São usadas com subconsultas que produzem uma
única coluna de números.
 Listar os empregados cujos salários são maiores
do que o salário de pelo menos um funcionário do
departamento 20
SELECT Cad, Nome, Sexo, Salario
FROM Empregado
WHERE Salario > SOME ( SELECT Salario
FROM Empregado
WHERE Num-Dep = 20) ;
11/12/25 © CIn/UFPE 51
SQL
Exemplo: Utilizando ALL
 É utilizado com subconsultas que produzem uma
única coluna de números.
 Listar os empregados cujos salários são maiores
do que salário de cada funcionário do
departamento 15
SELECT Cad, Nome, Sexo, Salario
FROM Empregado
WHERE Salario > ALL ( SELECT Salario
FROM Empregado
WHERE Num-Dep = 15) ;
11/12/25 © CIn/UFPE 52
SQL
 Regras genéricas de subconsultas
 A cláusula ORDER BY não pode ser usada em uma
subconsulta.
 A lista de atributos especificados no SELECT de
uma subconsulta deve conter um único elemento
(exceto para EXISTS).
 Nomes de atributos especificados na subconsulta
estão associados às tabelas listadas na cláusula
FROM da mesma.
 É possível referir-se a uma tabela da cláusula
FROM da consulta mais externa utilizando
qualificadores de atributos.
11/12/25 © CIn/UFPE 53
SQL
 Regras genéricas de subconsultas (Cont.)
Quando a subconsulta é um dos operandos
envolvidos em uma comparação, ela deve
aparecer no lado direito da comparação.
 Por exemplo, seria incorreto especificar:
SELECT Cad, Nome, Sexo, Salario
FROM Empregado
WHERE
( SELECT AVG ( Salario)
FROM Empregado ) < Salario;
11/12/25 © CIn/UFPE 54
SQL
 EXISTS e NOT EXISTS
Foram projetadas para uso apenas com
subconsultas.
EXISTS
Retorna TRUE  existe pelo menos uma
linha produzida pela subconsulta.
 Retorna FALSE  a subconsulta produz
uma tabela resultante vazia.
11/12/25 © CIn/UFPE 55
SQL
 Exemplo: Utilizando EXISTS
Liste todos os empregados que trabalham no
departamento de Informática.
SELECT Cad, Nome, Sexo, Salario
FROM Empregado E
WHERE EXISTS
( SELECT *
FROM Departamento D
WHERE E.Num-Dep = D.Numero AND
D.Nome = ‘Informática’) ;
11/12/25 © CIn/UFPE 56
SQL
 Operações de Conjunto
 UNION
 Linhas duplicadas são removidas da tabela
resultante.
 Exemplo: Construa uma lista de todos os
locais onde existe um departamento ou um
projeto.
( SELECT Local FROM Projeto
WHERE Local IS NOT NULL )
UNION
( SELECT Local FROM Locais ) ;
11/12/25 © CIn/UFPE 57
SQL
 Operações de Conjunto (Cont.)
INTERSECT
 Exemplo: Construa uma lista de todos os
locais onde existe ambos um departamento e
um projeto.
( SELECT Local
FROM Projeto )
INTERSECT
( SELECT Local
FROM Locais ) ;
11/12/25 © CIn/UFPE 58
SQL
 Operações de Conjunto (Cont.)
EXCEPT / MINUS
 Exemplo: Construa uma lista de todos os
locais onde existe um departamento mas
nenhum projeto.
( SELECT Local
FROM Locais )
EXCEPT
( SELECT Local
FROM Projeto );
11/12/25 © CIn/UFPE 59
SQL
 Adicionando tupla à tabela
INSERT INTO <tabela> (<lista de
atributos>) VALUES (<valores>);
INSERT INTO Empregado(Cad, Nome,
Sexo, Salário, Num_Dep, Cad_Supv)
VALUES (015, ‘José da Silva’, ‘M’, 1000, 1,
020)
11/12/25 © CIn/UFPE 60
SQL
 Adicionando tuplas usando SELECT
INSERT INTO <tabela> (<lista de
atributos>)
SELECT <lista de atributos>
FROM <tabela>
WHERE <condição>
11/12/25 © CIn/UFPE 61
SQL
INSERT INTO depto-info (nome-depto, num-
emp, total-sal)
SELECT D.nome, COUNT(*), SUM (E.salario)
FROM Departamento D, Empregado E
WHERE D.numero = E.Num-Dep
GROUP BY D.nome
HAVING COUNT (*) > 50 ;
11/12/25 © CIn/UFPE 62
SQL
 Atualizando tuplas
UPDATE <nome tabela>
SET <nome atributo> = valor
WHERE <condição> ;
UPDATE Empregado SET Salário =
1500 WHERE Cad = 015;
11/12/25 © CIn/UFPE 63
SQL
 Apagando tuplas da tabela
DELETE FROM <tabela>
WHERE <condição> ;
DELETE FROM Empregado
WHERE Salário > 5000 ;
11/12/25 © CIn/UFPE 64
SQL
 Utilizando Visões (VIEWS)
São tabelas virtuais que não ocupam
espaço físico
 Criação, Utilização, Inserção,
Modificação, etc.
CREATE VIEW <nome da view>
<lista de atributos> AS SELECT...
11/12/25 © CIn/UFPE 65
SQL
Criar uma visão dos empregados do
departamento 10 que tenham mais de 20
horas de trabalho em projetos
CREATE VIEW Dep-10 AS
SELECT Empregado.Nome,
Trabalha-em.Num-Proj
FROM Empregado, Trabalha-em
WHERE Trabalha-em.Horas > 20
AND Trabalha-em.Cad-Emp =
Empregado.Cad
AND Empregado.Num-Dep = 10;
11/12/25 © CIn/UFPE 66
SQL
 Garantindo privilégios de acesso
GRANT <privilégios> ON <nome
tabela/view> TO <usuário> onde:
 <privilégios>: SELECT, INSERT, DELETE,
UPDATE, ALL
PRIVILEGES e
 <usuário>: usuário cadastrado, PUBLIC
GRANT SELECT ON Empregado TO acs;
11/12/25 © CIn/UFPE 67
SQL
REVOKE <privilégios> ON <nome
tabela/view> FROM <usuário>
REVOKE SELECT ON Projeto FROM
PUBLIC;
11/12/25 © CIn/UFPE 68
SQL
 Sumário
 Forma Geral de um Comando SQL:
SELECT [ DISTINCT / ALL] { * | expressão
[ AS novoNome] | listaAtributos }
FROM nomeTab1[alias1], nomeTab2[alias2],...
[ WHERE condição ]
[GROUP BY listaColunas] [HAVING condição]
[ORDER BY listaColunas]
11/12/25 © CIn/UFPE 69
SQL
 Sumário (Cont.)
Cada comando SQL produz uma tabela
resultante consistindo de 1 ou mais colunas e
de 0 ou mais linhas.
Cláusula SELECT
 Identifica colunas e/ou dados derivados que
aparecerão na tabela resultante.
 Todos os atributos devem ter suas
tabelas/visões correspondentes, listadas na
cláusula FROM.
 SELECT e FROM são as únicas cláusulas
obrigatórias.
11/12/25 © CIn/UFPE 70
SQL
 Sumário (Cont.)
Cláusula WHERE: Seleciona linhas para
serem incluídas na tabela resultante.
Cláusula ORDER BY
Permite ordenar a tabela resultante com
base nos valores de 1 ou mais atributos.
Pode ser feita de forma crescente ou
decrescente.
Se especificada, deve ser a última
cláusula do comando SQL.
11/12/25 © CIn/UFPE 71
SQL
 Sumário (Cont.)
Funções COUNT, SUM, AVG, MIN e MAX
Recebem uma coluna inteira como
argumento e retornam um único valor.
COUNT, MIN e MAX aplicam-se a atributos
numéricos/ não-numéricos.
É ilegal misturar estas funções com nomes
de atributos do SELECT, exceto se a
cláusula GROUP BY é usada.
Valores nulos são eliminados por cada
função (exceto no caso de COUNT(*)).
Para eliminar duplicadas, use DISTINCT.
11/12/25 © CIn/UFPE 72
SQL
 Sumário (Cont.)
Cláusula GROUP BY
Permite que informação de resumo seja
incluída na tabela.
HAVING atua como uma cláusula WHERE
para grupos, restringindo-os.
Porém, HAVING pode ter funções
agregadas.

APRESENTACAO PARA MESTRADO EM PORTUGUES AREA LINGUISTICA

  • 1.
    SQL Ana Carolina Salgado FernandoFonseca Valéria Times
  • 2.
    11/12/25 © CIn/UFPE2 SQL  SQL - Structured Query Language Linguagem de Consulta Estruturada  Fundamentada no modelo relacional, inclui comandos para: definição de dados consulta atualização
  • 3.
    11/12/25 © CIn/UFPE3 SQL Origem:  Primeira versão: SEQUEL, definida por Chamberlain em 1974 na IBM  Em 1975 foi implementado o primeiro protótipo  Revisada e ampliada entre 1976 e 1977 e teve seu nome alterado para SQL por razões jurídicas  Em 1982, o American National Standard Institute tornou SQL padrão oficial de linguagem em ambiente relacional  Utilizada tanto de forma interativa como incluída em linguagens hospedeiras
  • 4.
    11/12/25 © CIn/UFPE4 SQL Enfoques de SQL:  Linguagem interativa de consulta (ad-hoc): usuários podem definir consultas independente de programas.  Linguagem de programação para acesso a banco de dados: comandos SQL embutidos em programas de aplicação.  Linguagem de administração de dados: o DBA pode utilizar SQL para realizar suas tarefas.
  • 5.
    11/12/25 © CIn/UFPE5 SQL Enfoques de SQL (cont):  Linguagem cliente/servidor: os programas clientes usam comandos SQL para se comunicarem e compartilharem dados com o servidor.  Linguagem para banco de dados distribuídos: auxilia na distribuição de dados por vários nós e na comunicação de dados com outros sistemas.  Caminho de acesso a outros bancos de dados em diferentes máquinas: auxilia na conversão entre diferentes produtos em diferentes máquinas.
  • 6.
    11/12/25 © CIn/UFPE6 S Q L Usos de SQL DDL Criar (CREATE) Destruir (DROP) Modificar (ALTER) DML Consultar (SELECT) Inserir (INSERT) Remover (DELETE) Atualizar (UPDATE) Segurança Controle Administração Implementação Ambiente
  • 7.
    11/12/25 © CIn/UFPE7 SQL Vantagens:  Independência de fabricante  Portabilidade entre sistemas  Redução de custos com treinamento  Comandos em inglês  Consulta interativa  Múltiplas visões de dados  Manipulação dinâmica dos dados
  • 8.
    11/12/25 © CIn/UFPE8 SQL Desvantagens:  A padronização inibe a criatividade  Está longe de ser uma linguagem relacional ideal  Algumas críticas: falta de ortogonalidade nas expressões discordância com as linguagens hospedeiras não dá suporte a alguns aspectos do modelo relacional.
  • 9.
    11/12/25 © CIn/UFPE9 Esquema Relacional dos Exemplos Num-Dep Num-Loc Locais Trabalha-em Cad-Emp Num-Proj Horas Empregado Cad Nome Sexo Salário Num-Dep Cad-Spv DepartamentoNúmero Nome Cad-Ger Data-Ini Cad Nome Data-nasc Grau-P Dependente Projeto Número Nome Local Num-Dep
  • 10.
    11/12/25 © CIn/UFPE10 SQL Comandos SQL (padrão ANSI):  Criação e destruição de tabelas  Extração de dados de uma tabela  Inserção, modificação e remoção de dados  Definição de visões  Definição de privilégios de acesso
  • 11.
    11/12/25 © CIn/UFPE11 SQL Criação de Tabelas CREATE TABLE <tabela> (<descrição dos atributos> <descrição das chaves>)  Descrição dos atributos: lista dos atributos com respectivos tipos de dados: smallint, char, money, varchar, integer, decimal, float, real, date, time, timestamp, logical.
  • 12.
    11/12/25 © CIn/UFPE12 SQL  A chave primária deve ser declarada como not null unique ou PRIMARY KEY (<atributos>)  Descrição das chaves: lista das chaves estrangeiras na forma: FOREIGN KEY (<atributo>) REFERENCES <tabela> (<atributo>)
  • 13.
    11/12/25 © CIn/UFPE13 SQL Criação de tabelas: Exemplo: Empregado Cad Nome Sexo Salário Num-Dep Cad-Spv CREATE TABLE Empregado (Cad smallint not null, Nome char (20), Sexo char, Salário decimal (10,2), Num-Dep integer, Cad-Spv smallint, PRMARY KEY (Cad), FOREIGN KEY Num-Dep REFERENCES Departamento (Número), FOREIGN KEY Cad-Spv REFERENCES Empregado (Cad))
  • 14.
    11/12/25 © CIn/UFPE14 SQL Criação de tabelas: Exemplo: Trabalha-em Cad-Emp Num-Proj Horas CREATE TABLE Trabalha-em (Cad-emp smallint not null , Num-Proj integer not null , Horas decimal (3,1) PRIMARY KEY (Cad_emp, Num_proj) FOREIGN KEY Cad-Emp REFERENCES Empregado (Cad), FOREIGN KEY Num-Proj REFERENCES Projeto (Número))
  • 15.
    11/12/25 © CIn/UFPE15 SQL Destruição de tabelas DROP TABLE <tabela> Elimina a tabela que foi previamente criada. Exemplo: DROP TABLE Empregado
  • 16.
    11/12/25 © CIn/UFPE16 SQL Extração de Dados de uma Tabela Comando SELECT  Selecionando atributos (Projeção): SELECT <lista de atributos> FROM <tabela> Exemplo: Listar nome e salário de todos os empregados SELECT Nome, Salário FROM Empregado
  • 17.
    11/12/25 © CIn/UFPE17 SQL  Selecionando todos os atributos SELECT * FROM <tabela> Exemplo: Listar o conteúdo de Empregado SELECT * FROM Empregado
  • 18.
    11/12/25 © CIn/UFPE18 Operadores Relacionais: =, !=, <, <=, >, >= Operadores Lógicos: AND, OR e NOT SQL  Selecionando tuplas da tabela SELECT <lista de atributos> FROM <tabela> WHERE <condição> onde condição: <nome atributo> <operador> <valor>
  • 19.
    11/12/25 © CIn/UFPE19 SQL  Selecionando tuplas da tabela Exemplos: Listar nome e sexo dos empregados do departamento 15. SELECT Nome, Sexo FROM Empregado WHERE Num-Dep = 15 Listar nome e sexo dos empregados do departamento 15 com salário > R$ 1.000,00 SELECT Nome, Sexo FROM Empregado WHERE Num-Dep = 15 AND Salário > 1000
  • 20.
    11/12/25 © CIn/UFPE20 SQL Operadores BETWEEN e NOT BETWEEN: substituem o uso dos operadores <= e >= ... WHERE <nome atributo> BETWEEN <valor1> and <valor2> Exemplo: Listar os empregados com salário entre R$ 1.000,00 e R$ 2.000,00 SELECT * FROM Empregado WHERE Salário BETWEEN 1000 and 2000
  • 21.
    11/12/25 © CIn/UFPE21 SQL Operadores LIKE e NOT LIKE: só se aplicam sobre atributos do tipo char. Operam como = e !=, utilizando os símbolos: % (substitui uma palavra) e _ (substitui um caracter). ...WHERE <nome atributo> LIKE <valor1> Exemplo:  Listar os empregados que tem como primeiro nome ‘José‘ SELECT Nome FROM Empregado WHERE Nome LIKE ‘José%’
  • 22.
    11/12/25 © CIn/UFPE22 SQL Operadores IN e NOT IN: procuram dados que estão ou não contidos em um dado conjunto de valores. ... WHERE <nome atributo> IN <valores> Exemplo: -Listar o nome e data de nascimento dos dependentes com grau de parentesco ‘M’ ou ‘P’ SELECT Nome, Data-Nasc FROM Dependentes WHERE Grau-P IN (‘M’, ‘P’)
  • 23.
    11/12/25 © CIn/UFPE23 SQL Operadores IS NULL e IS NOT NULL: identificam valores nulos dos atributos. ... WHERE <nome atributo> IS NULL Exemplo: Listar os projetos que não tenham local definido SELECT * FROM Projeto WHERE Local IS NULL
  • 24.
    11/12/25 © CIn/UFPE24 SQL  Ordenando os dados selecionados (ORDER BY) SELECT <lista atributos> FROM <tabela> [WHERE <condição>] ORDER BY <Nome atributo> {ASC | DESC}
  • 25.
    11/12/25 © CIn/UFPE25 SQL Exemplo: Listar todos os empregados ordenados ascendentemente por nome. SELECT * FROM Empregado ORDER BY Nome Listar todos os empregados ordenados descendentemente por salário SELECT * FROM Empregado ORDER BY Salário DESC
  • 26.
    11/12/25 © CIn/UFPE26 SQL  Realizando cálculo com informação selecionada Pode-se criar um campo que não pertença à tabela a partir de cálculos sobre atributos da tabela Exemplo: Mostrar o novo salário dos empregados calculado com base no reajuste de 60% para os que ganham abaixo de R$ 1.000,00
  • 27.
    11/12/25 © CIn/UFPE27 SQL SELECT Nome, Novo-salário = (Salário * 1.60) FROM Empregado WHERE Salário < 1000
  • 28.
    11/12/25 © CIn/UFPE28 SQL  Utilizando funções sobre conjuntos Comandos: MAX, MIN, SUM, AVG, COUNT Exemplos: Mostrar o valor do maior salário dos empregados SELECT MAX (Salário) FROM Empregado
  • 29.
    11/12/25 © CIn/UFPE29 SQL Mostrar qual o salário médio dos empregados SELECT AVG (Salário) FROM Empregado Quantos empregados ganham mais de R$1.000,00? SELECT COUNT (*) FROM Empregado WHERE Salário > 1000
  • 30.
    11/12/25 © CIn/UFPE30 SQL  Cláusula DISTINCT Elimina tuplas duplicadas do resultado de uma consulta. Exemplo: Quais os diferentes salários dos empregados? SELECT DISTINCT Salário FROM Empregado
  • 31.
    11/12/25 © CIn/UFPE31 SQL  Agrupando informações selecionadas (GROUP BY) Organiza a seleção de dados em grupos Exemplo: Listar os empregados por sexo SELECT Nome, Sexo FROM Empregado GROUP BY Sexo
  • 32.
    11/12/25 © CIn/UFPE32 SQL  Agrupando Informações de forma condicional (HAVING) Seleciona entre as tuplas resultantes, as que satisfazem um dada condição.
  • 33.
    11/12/25 © CIn/UFPE33 SQL Exemplo: Listar o número total de empregados que recebem salários superior a R$1.000,00, agrupados por departamento mas só daqueles com mais de 5 empregados. SELECT Num-Dep, COUNT (*) FROM Empregado WHERE Salário > 1000 GROUP BY Num-Dep HAVING COUNT(*) > 5
  • 34.
    11/12/25 © CIn/UFPE34 SQL  Recuperando dados de várias tabelas (JOIN) Citar as tabelas envolvidas na cláusula FROM Qualificadores de nomes: para referenciar o nome do empregado, Empregado.Nome Exemplos: Listar o nome do empregado e do departamento onde está alocado
  • 35.
    11/12/25 © CIn/UFPE35 SQL SELECT Empregado.Nome,Departamento.Nome FROM Empregado, Departamento WHERE Empregado.Num-Dep= Departamento.Numero; Listar os nomes dos departamentos que têm projetos SELECT Departamento.Nome FROM Departamento, Projeto WHERE Projeto.Num-Dep= Departamento.Numero;
  • 36.
    11/12/25 © CIn/UFPE36 SQL  Observações: Podemos utilizar as cláusulas (NOT) LIKE, (NOT) IN, IS (NOT) NULL misturadas aos operadores AND, OR e NOT nas equações de junção. Podemos agrupar e/ou ordenar o resultado de uma junção. Agrupamento/Ordenação pode ser feito através de mais de um atributo.
  • 37.
    11/12/25 © CIn/UFPE37 SQL  Exemplo: Listar os departamentos que têm projetos com número superior a 99 e localizados em RJ ou SP ordenados por nome de departamento SELECT Departamento.Nome FROM Departamento, Projeto WHERE Projeto.Local IN (‘RJ’, ‘SP’) AND Projeto.Número > 99 AND Projeto.Num-Dep= Departamento.Codigo ORDER BY Departamento.Nome ;
  • 38.
    11/12/25 © CIn/UFPE38 SQL  Outro Exemplo: Classificando uma Junção Para cada departamento, liste o número, o nome e o salário de seus empregados SELECT D.Nome, E.Cad, E.Nome, E.Salario FROM Departamento D, Empregado E WHERE D.Numero = E.Num-Dep ORDER BY D.Nome, E.Salario DESC;
  • 39.
    11/12/25 © CIn/UFPE39 SQL  Outro Exemplo: Agrupando através de mais de um atributo em uma Junção Encontre o total de projetos de cada funcionário SELECT E.Num-Dep, E.Cad, COUNT(*) AS Total FROM Trabalha-em T, Empregado E WHERE E.Cad = T.Cad-Emp GROUP BY E.Num-Dep, E.Cad ORDER BY E.Num-Dep, E.Cad;
  • 40.
    11/12/25 © CIn/UFPE40 SQL  Juntando mais de duas tabelas Exemplo: Listar o nome dos empregados, com seu respectivo departamento que trabalhem mais de 20 horas em algum projeto
  • 41.
    11/12/25 © CIn/UFPE41 SQL SELECT Empregado.Nome, Departamento.Nome FROM Empregado, Departamento, Trabalha-em WHERE Trabalha-em.Horas > 20 AND Trabalha-em.Cad-Emp = Empregado.Cad AND Empregado.Num-Dep = Departamento.Número;
  • 42.
    11/12/25 © CIn/UFPE42 SQL  Utilizando consultas encadeadas  O resultado de uma consulta é utilizado por outra consulta, de forma encadeada e no mesmo comando SQL. O resultado do comando SELECT mais interno (subselect) é usado por outro SELECT mais externo para obter o resultado final. O SELECT mais interno (subconsulta ou consulta aninhada) pode ser usado apenas nas cláusulas WHERE e HAVING do comando mais externo.
  • 43.
    11/12/25 © CIn/UFPE43 SQL  Utilizando consultas encadeadas(Cont.)  Existem 3 tipos de subconsultas: ESCALAR: Retornam um único valor. ÚNICA LINHA: Retornam várias colunas, mas apenas uma única linha é obtida. TABELA: Retornam uma ou mais colunas e múltiplas linhas.
  • 44.
    11/12/25 © CIn/UFPE44 SQL  Exemplo: Usando uma subconsulta com operador de igualdade Listar os empregados que trabalham no departamento de Informática. SELECT Cad, Nome, Salario FROM Empregado WHERE Num-Dep = (SELECT Numero FROM Departamento WHERE Nome = ‘Informática’ );
  • 45.
    11/12/25 © CIn/UFPE45 SQL  Utilizando consultas encadeadas(Cont.)  Observações  A subconsulta anterior é do tipo ESCALAR: Retorna o código do departamento de Informática. Operadores Relacionais: =, !=, <, <=, >, >= A subconsulta deve sempre estar entre ().
  • 46.
    11/12/25 © CIn/UFPE46 SQL  Exemplo: Usando uma subconsulta com função agregada Listar os empregados cujos salários são maiores do que o salário médio, mostrando o quanto são maiores. SELECT Cad, Nome, Sexo, Salario - ( SELECT AVG (Salario) FROM Empregado) AS DifSal FROM Empregado WHERE Salario > ( SELECT AVG ( Salario) FROM Empregado );
  • 47.
    11/12/25 © CIn/UFPE47 SQL  Utilizando consultas encadeadas(Cont.)  Observações  A subconsulta anterior é do tipo ESCALAR: Retorna o salário médio dos empregados. A condição abaixo é incorreta: WHERE Salario > AVG ( Salario)
  • 48.
    11/12/25 © CIn/UFPE48 SQL Exemplo: Subconsultas aninhadas: Uso do IN Listar os departamentos que tenham qualquer projeto em RJ SELECT Departamento.Nome FROM Departamento WHERE Departamento.Número IN (SELECT Projeto.Num-Dep FROM Projeto WHERE Projeto.Local = ‘RJ’) ;
  • 49.
    11/12/25 © CIn/UFPE49 SQL Outro Exemplo: Uso do IN Listar os dependentes dos funcionários que trabalham no departamento de Informática SELECT Nome, Data-nasc, Grau-P FROM Dependente WHERE Cad IN ( SELECT Cad FROM Empregado WHERE Num-Dep = ( SELECT Numero FROM Departamento WHERE Nome = ‘Informática’ ) );
  • 50.
    11/12/25 © CIn/UFPE50 SQL Exemplo: Utilizando ANY / SOME  São usadas com subconsultas que produzem uma única coluna de números.  Listar os empregados cujos salários são maiores do que o salário de pelo menos um funcionário do departamento 20 SELECT Cad, Nome, Sexo, Salario FROM Empregado WHERE Salario > SOME ( SELECT Salario FROM Empregado WHERE Num-Dep = 20) ;
  • 51.
    11/12/25 © CIn/UFPE51 SQL Exemplo: Utilizando ALL  É utilizado com subconsultas que produzem uma única coluna de números.  Listar os empregados cujos salários são maiores do que salário de cada funcionário do departamento 15 SELECT Cad, Nome, Sexo, Salario FROM Empregado WHERE Salario > ALL ( SELECT Salario FROM Empregado WHERE Num-Dep = 15) ;
  • 52.
    11/12/25 © CIn/UFPE52 SQL  Regras genéricas de subconsultas  A cláusula ORDER BY não pode ser usada em uma subconsulta.  A lista de atributos especificados no SELECT de uma subconsulta deve conter um único elemento (exceto para EXISTS).  Nomes de atributos especificados na subconsulta estão associados às tabelas listadas na cláusula FROM da mesma.  É possível referir-se a uma tabela da cláusula FROM da consulta mais externa utilizando qualificadores de atributos.
  • 53.
    11/12/25 © CIn/UFPE53 SQL  Regras genéricas de subconsultas (Cont.) Quando a subconsulta é um dos operandos envolvidos em uma comparação, ela deve aparecer no lado direito da comparação.  Por exemplo, seria incorreto especificar: SELECT Cad, Nome, Sexo, Salario FROM Empregado WHERE ( SELECT AVG ( Salario) FROM Empregado ) < Salario;
  • 54.
    11/12/25 © CIn/UFPE54 SQL  EXISTS e NOT EXISTS Foram projetadas para uso apenas com subconsultas. EXISTS Retorna TRUE  existe pelo menos uma linha produzida pela subconsulta.  Retorna FALSE  a subconsulta produz uma tabela resultante vazia.
  • 55.
    11/12/25 © CIn/UFPE55 SQL  Exemplo: Utilizando EXISTS Liste todos os empregados que trabalham no departamento de Informática. SELECT Cad, Nome, Sexo, Salario FROM Empregado E WHERE EXISTS ( SELECT * FROM Departamento D WHERE E.Num-Dep = D.Numero AND D.Nome = ‘Informática’) ;
  • 56.
    11/12/25 © CIn/UFPE56 SQL  Operações de Conjunto  UNION  Linhas duplicadas são removidas da tabela resultante.  Exemplo: Construa uma lista de todos os locais onde existe um departamento ou um projeto. ( SELECT Local FROM Projeto WHERE Local IS NOT NULL ) UNION ( SELECT Local FROM Locais ) ;
  • 57.
    11/12/25 © CIn/UFPE57 SQL  Operações de Conjunto (Cont.) INTERSECT  Exemplo: Construa uma lista de todos os locais onde existe ambos um departamento e um projeto. ( SELECT Local FROM Projeto ) INTERSECT ( SELECT Local FROM Locais ) ;
  • 58.
    11/12/25 © CIn/UFPE58 SQL  Operações de Conjunto (Cont.) EXCEPT / MINUS  Exemplo: Construa uma lista de todos os locais onde existe um departamento mas nenhum projeto. ( SELECT Local FROM Locais ) EXCEPT ( SELECT Local FROM Projeto );
  • 59.
    11/12/25 © CIn/UFPE59 SQL  Adicionando tupla à tabela INSERT INTO <tabela> (<lista de atributos>) VALUES (<valores>); INSERT INTO Empregado(Cad, Nome, Sexo, Salário, Num_Dep, Cad_Supv) VALUES (015, ‘José da Silva’, ‘M’, 1000, 1, 020)
  • 60.
    11/12/25 © CIn/UFPE60 SQL  Adicionando tuplas usando SELECT INSERT INTO <tabela> (<lista de atributos>) SELECT <lista de atributos> FROM <tabela> WHERE <condição>
  • 61.
    11/12/25 © CIn/UFPE61 SQL INSERT INTO depto-info (nome-depto, num- emp, total-sal) SELECT D.nome, COUNT(*), SUM (E.salario) FROM Departamento D, Empregado E WHERE D.numero = E.Num-Dep GROUP BY D.nome HAVING COUNT (*) > 50 ;
  • 62.
    11/12/25 © CIn/UFPE62 SQL  Atualizando tuplas UPDATE <nome tabela> SET <nome atributo> = valor WHERE <condição> ; UPDATE Empregado SET Salário = 1500 WHERE Cad = 015;
  • 63.
    11/12/25 © CIn/UFPE63 SQL  Apagando tuplas da tabela DELETE FROM <tabela> WHERE <condição> ; DELETE FROM Empregado WHERE Salário > 5000 ;
  • 64.
    11/12/25 © CIn/UFPE64 SQL  Utilizando Visões (VIEWS) São tabelas virtuais que não ocupam espaço físico  Criação, Utilização, Inserção, Modificação, etc. CREATE VIEW <nome da view> <lista de atributos> AS SELECT...
  • 65.
    11/12/25 © CIn/UFPE65 SQL Criar uma visão dos empregados do departamento 10 que tenham mais de 20 horas de trabalho em projetos CREATE VIEW Dep-10 AS SELECT Empregado.Nome, Trabalha-em.Num-Proj FROM Empregado, Trabalha-em WHERE Trabalha-em.Horas > 20 AND Trabalha-em.Cad-Emp = Empregado.Cad AND Empregado.Num-Dep = 10;
  • 66.
    11/12/25 © CIn/UFPE66 SQL  Garantindo privilégios de acesso GRANT <privilégios> ON <nome tabela/view> TO <usuário> onde:  <privilégios>: SELECT, INSERT, DELETE, UPDATE, ALL PRIVILEGES e  <usuário>: usuário cadastrado, PUBLIC GRANT SELECT ON Empregado TO acs;
  • 67.
    11/12/25 © CIn/UFPE67 SQL REVOKE <privilégios> ON <nome tabela/view> FROM <usuário> REVOKE SELECT ON Projeto FROM PUBLIC;
  • 68.
    11/12/25 © CIn/UFPE68 SQL  Sumário  Forma Geral de um Comando SQL: SELECT [ DISTINCT / ALL] { * | expressão [ AS novoNome] | listaAtributos } FROM nomeTab1[alias1], nomeTab2[alias2],... [ WHERE condição ] [GROUP BY listaColunas] [HAVING condição] [ORDER BY listaColunas]
  • 69.
    11/12/25 © CIn/UFPE69 SQL  Sumário (Cont.) Cada comando SQL produz uma tabela resultante consistindo de 1 ou mais colunas e de 0 ou mais linhas. Cláusula SELECT  Identifica colunas e/ou dados derivados que aparecerão na tabela resultante.  Todos os atributos devem ter suas tabelas/visões correspondentes, listadas na cláusula FROM.  SELECT e FROM são as únicas cláusulas obrigatórias.
  • 70.
    11/12/25 © CIn/UFPE70 SQL  Sumário (Cont.) Cláusula WHERE: Seleciona linhas para serem incluídas na tabela resultante. Cláusula ORDER BY Permite ordenar a tabela resultante com base nos valores de 1 ou mais atributos. Pode ser feita de forma crescente ou decrescente. Se especificada, deve ser a última cláusula do comando SQL.
  • 71.
    11/12/25 © CIn/UFPE71 SQL  Sumário (Cont.) Funções COUNT, SUM, AVG, MIN e MAX Recebem uma coluna inteira como argumento e retornam um único valor. COUNT, MIN e MAX aplicam-se a atributos numéricos/ não-numéricos. É ilegal misturar estas funções com nomes de atributos do SELECT, exceto se a cláusula GROUP BY é usada. Valores nulos são eliminados por cada função (exceto no caso de COUNT(*)). Para eliminar duplicadas, use DISTINCT.
  • 72.
    11/12/25 © CIn/UFPE72 SQL  Sumário (Cont.) Cláusula GROUP BY Permite que informação de resumo seja incluída na tabela. HAVING atua como uma cláusula WHERE para grupos, restringindo-os. Porém, HAVING pode ter funções agregadas.