Você está na página 1de 25

Introdução

  SQL - Structured Query Language


Linguagem de Consulta Estruturada
 Apesar do QUERY no nome, não é apenas
Gerenciamento de Dados e Informação de consulta, permitindo definição (DDL) e
manipulação (DML) de dados
  Fundamentada no modelo relacional (álgebra
SQL relacional)
 Cada implementação de SQL pode possuir
Robson Fidalgo algumas adaptações para resolver certas
Valeria Times particularidades do SGBD alvo

CIn.ufpe.br CIn.ufpe.br

SQL - Origem/Histórico Enfoques de SQL


  Linguagem interativa de consulta (ad-hoc): usuários
podem definir consultas independente de programas
  Primeira versão: SEQUEL, definida por   Linguagem de programação para acesso a banco de
Chamberlain em 1974 na IBM dados: comandos SQL embutidos em programas de
aplicação
  Em 1975 foi implementado o primeiro protótipo
  Linguagem de administração de dados: o DBA pode
  Revisada e ampliada entre 1976 e 1977 e teve utilizar SQL para realizar suas tarefas
seu nome alterado para SQL por razões jurídicas   Linguagem cliente/servidor: os programas clientes usam
  Em 1982, o American National Standard Institute comandos SQL para se comunicarem e compartilharem
tornou SQL padrão oficial de linguagem em dados com o servidor
ambiente relacional   Linguagem para banco de dados distribuídos: auxilia na
distribuição de dados por vários nós e na transferência
  Utilizada tanto de forma interativa como incluída de dados entre outros sistemas
em linguagens hospedeiras   Caminho de acesso a outros bancos de dados em
diferentes máquinas: auxilia na conversão entre
CIn.ufpe.br CIn.ufpe.br

3
diferentes produtos em diferentes máquinas 4

Usos de SQL
SQL - Vantagens
DDL   Independência de fabricante
Criar (CREATE) Implementação   Portabilidade entre sistemas
Remover (DROP)
Modificar (ALTER) Ambiente   Redução de custos com treinamento
  Comandos em Inglês
SQL   Consulta interativa
  Múltiplas visões de dados
DML
Segurança Consultar (SELECT)
  Manipulação dinâmica dos dados.
Controle Inserir (INSERT)
Remover (DELETE)
Administração Atualizar (UPDATE)

CIn.ufpe.br CIn.ufpe.br

5 6

1
Esquema Relacional dos Exemplos
SQL - Desvantagens Empregado (Cad, Nome, Sexo, Salario, Num_Dep, Cad_Spv)
Num_Dep referencia Departamento (Numero),
  A padronização inibe a criatividade Cad_Spv referencia Empregado(Cad)
Departamento (Numero, Nome, Cad_Ger, Data_Ini)
  Está longe de ser uma linguagem relacional ideal
Cad_Ger referencia Empregado(Cad)
 Algumas críticas
Locais (Num_dep, Nome_Loc)
 falta de ortogonalidade nas expressões Num_Dep referencia Departamento (Numero)
 discordância com as linguagens hospedeiras
Projeto (Numero, Nome, Num_Dep, Local)
 não dá suporte a alguns aspectos do modelo Num_Dep referencia Departamento (Numero)
relacional
Trabalha_em (Cad_Emp, Num_Pro, Horas)
Cad_Emp referencia Empregado(Cad),
Num_Pro referencia Projeto (Numero)
Dependente (Cad_emp, Nome, Data_nasc, Grau_P)
Cad_emp referencia Empregado(Cad)
CIn.ufpe.br CIn.ufpe.br

7 8

Criação de Tabelas
Comandos SQL (Padrão ANSI)
  Definição de nova tabela → CREATE TABLE
SQL CREATE TABLE <nome da tabela>
  Criação, alteração e remoção de tabelas
  Inserção, modificação e remoção de dados (<descrição dos atributos>
  Extração de dados de uma tabela (Consultas) <descrição das chaves>
  Definição de visões <descrição das restrições);
  Definição de privilégios de acesso.
  Descrição dos atributos → <nome> <tipo>
  Tipos de dados (Oracle): varchar2, char,
nvarchar2, nchar, number, number(n),
number(m,n), binary_integer, binary_float,
binary_double, date, timestamp, blob, clob, nclob
CIn.ufpe.br CIn.ufpe.br

9 10

Criação de Tabelas Criação de Tabelas


Chave primária por auto-numeração (Cont.)
  Descrição das Chaves
 A chave primária deve ser declarada como  No Oracle
 Define-se uma sequência e esta será
SQL CONSTRAINT nometabela_pkey utilizada para gerar as chaves primárias
PRIMARY KEY (<atributos>)
SQL CREATE SEQUENCE <nome_seq>
Chave primária definida por auto-numeração INCREMENT BY 1 START WITH 1;
  Chave inteira cujo valor é atribuído pelo
sistema, sendo incrementado de 1 a O tipo do atributo que será a chave
cada nova inserção de uma tupla primária deve ser INTEGER

CIn.ufpe.br CIn.ufpe.br

11 12

2
Criação de Tabelas Criação de Tabelas
 Chave primária por auto-numeração   Descrição de Restrições
 No Oracle (Cont.)  Salário não pode ser inferior ao mínimo
 Ao inserir dados na tabela, deve-se
solicitar a criação do valor ao sistema no SQL CONSTRAINT nometabela_check
atributo chave utilizando o comando CHECK (salario >= 880.00)
  <nome_seq>.NEXTVAL
 Lista das chaves estrangeiras na forma   Cada valor do atributo é único na relação,
mesmo não sendo o atributo chave primária
SQL
CONSTRAINT nometabela_fkey SQL CONSTRAINT nometabela_const
FOREIGN KEY (<atributo>) UNIQUE (nome)
REFERENCES <outra_tabela> (<chave primária>)
CIn.ufpe.br CIn.ufpe.br
13 14

Criação de Tabelas Criação de Tabelas


  Exemplo 1: A entidade Departamento,   Exemplo 1 (Cont.)
considerando
SQL CREATE TABLE Departamento
 Chave primária com auto numeração (Numero integer,
Nome varchar2(15),
Cad_Ger integer,
Departamento (Numero, Nome, Cad_Ger, Data_Ini) Data_Ini date,
Cad_Ger referencia Empregado(Cad) CONSTRAINT Departamento_pkey
PRIMARY KEY (Numero));

SQL CREATE SEQUENCE Numero A chave estrangeira de Empregado (Cad_Ger) só


INCREMENT BY 1 START WITH 1; pode ser criada depois que a relação Empregado
for criada. Para tanto, posteriormente, altera-se a
definição da relação Departamento.
CIn.ufpe.br CIn.ufpe.br

15 16

Criação de Tabelas Criação de Tabelas


  Exemplo 2 (Cont.)
  Exemplo 2: A entidade Empregado, considerando
CREATE TABLE Empregado SQL
 O atributo Sexo deve ter os valores 'M' ou 'F' (Cad integer,
 O atributo Salario deve respeitar o mínimo Nome varchar2 (20),
Sexo char,
nacional Salario number (10,2),
Num_Dep number(1),
Cad_Spv number,
CONSTRAINT empregado_pkey PRIMARY KEY (Cad),
Empregado (Cad, Nome, Sexo, Salario, Num_Dep, Cad_Spv) CONSTRAINT empregado_fkey1 FOREIGN KEY
Num_Dep referencia Departamento (Numero), (Num_Dep) REFERENCES Departamento (Numero),
Cad_Spv referencia Empregado(Cad) CONSTRAINT empregado_fkey2 FOREIGN KEY
(Cad_Spv) REFERENCES Empregado (Cad),
CONSTRAINT Empregado_checkSal CHECK (salario >= 880.00),
CONSTRAINT Empregado_checkSex CHECK (sexo = 'M' OR
sexo = 'F') );
CIn.ufpe.br CIn.ufpe.br

17 18

3
Criação de Tabelas Criação de Tabelas
  Exemplo 3 (Considerando que a relação Projeto já foi
criada)   Criação de índices em uma tabela existente →
Trabalha_em_ (Cad_Emp, Num_Proj, Horas) CREATE INDEX
Cad_Emp referencia Empregado(Cad),  São estruturas que permitem agilizar a busca e
Num_Proj referencia Projeto (Numero) ordenação de dados em tabelas
SQL CREATE TABLE Trabalha_em
(Cad_Emp integer,
CREATE [UNIQUE] INDEX <nome> ON
Num_Proj integer, <tabela> (<atributo1>[, <atributo2>…]);
Horas number (3,1) ,
CONSTRAINT trabalha_em_pkey   Exemplo 3: Criar um índice sobre o atributo
PRIMARY KEY (Cad_emp, Num_proj), salario de Empregado
CONSTRAINT trabalha_em_fkey1
FOREIGN KEY (Cad_Emp) REFERENCES Empregado CREATE INDEX indice_sal ON
(Cad), Empregado (salario);
CONSTRAINT trabalha_em_fkey2
FOREIGN KEY (Num_Proj )REFERENCES Projeto É usado automaScamente pelo sistema
(Numero)); CIn.ufpe.br nas consultas realizadas por salario CIn.ufpe.br

19 20

Alteração de Tabelas Alteração de Tabelas


  Alterar definições de tabelas existentes → ALTER
TABLE   Exemplo 4: Acrescentar o atributo Diploma na
tabela Empregado
 Permite inserir/eliminar/modificar elementos da
definição de uma tabela SQL
ALTER TABLE EMPREGADO
ALTER TABLE <ação>; ADD (Diploma varchar2(20));

  Exemplo 5: Remover o atributo Diploma da tabela


Análoga ao Create /
Drop Empregado
SQL
ALTER TABLE EMPREGADO DROP (Diploma);
CIn.ufpe.br CIn.ufpe.br

21 22

Alteração de Tabelas Remoção de Tabelas


  Eliminar uma tabela que foi previamente criada →
  Exemplos 6: Acrescentar chave estrangeira de DROP TABLE
Empregado como gerente na tabela
Departamento DROP TABLE <tabela>;
SQL   Exemplo 7: Remover a tabela Trabalha_em
ALTER TABLE DEPARTAMENTO SQL DROP TABLE Trabalha_em;
ADD ( CONSTRAINT Departamento_fkey
FOREIGN KEY (Cad_Ger) REFERENCES Empregado (Cad));   Observações
Os dados são também excluídos
No caso do Oracle, para preservar as
definições da relação (só os dados são
Necessário para a segunda relação,
eliminados) utilizar em vez de DROP
sempre que duas relações têm chave
estrangeira uma da outra.
CIn.ufpe.br SQL TRUNCATE TABLE Trabalha_em; CIn.ufpe.br

23 24

4
Extração de Dados de uma Tabela Extração de Dados de uma Tabela
(Consulta) Empregado (Consulta)
  Consultar dados em uma tabela → SELECT Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2
Selecionando atributos (Projeção)
2 Maria F 800.00 2 NULL
3 João M 3000.00 1 2
π <lista de atributos> (Nome-da-relação) Álgebra Relacional
SQL
π nome, salario (Empregado) Álgebra Relacional
SELECT <lista de atributos> FROM <tabela>; S
Q

SQL L

  Exemplo 8: Listar nome e salário de todos os SELECT Nome, Salario FROM Empregado;
empregados Nome Salario
José 5000.00
Maria 800.00
CIn.ufpe.br CIn.ufpe.br
João 3000.00
25 26

Extração de Dados de uma Tabela Extração de Dados de uma Tabela


(Consulta) (Consulta)
Selecionando todos os atributos SQL
SQL SELECT * FROM Empregado;
SELECT * FROM <tabela>;

Exemplo 9: Selecionar todos os atributos dos Cad Nome Sexo Salario Num_Dep Cad_Spv
empregados 1 José M 5000.00 1 2

Empregado 2 Maria F 800.00 2 NULL


3 João M 3000.00 1 2
Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2 Observação
2 Maria F 800.00 2 NULL
Deve ser usado com cautela pois pode
3 João M 3000.00 1 2
comprometer o desempenho do sistema
π Cad,Nome, Sexo, Salario, Num_Dep, Cad_Spv (Empregado) SQL
CIn.ufpe.br CIn.ufpe.br
Álgebra Relacional 27 28

Extração de Dados de uma Tabela Extração de Dados de uma Tabela


(Consulta) (Consulta)
Selecionando tuplas da tabela → cláusula
WHERE   Exemplo 10: Listar todos os dados dos
SQL empregados do departamento 1
SELECT <lista de atributos> FROM <tabela>
Empregado
WHERE <condição>; Cad Nome Sexo Salario Num_Dep Cad_Spv

 Onde <condição> 1 José M 5000.00 1 2


2 Maria F 800.00 2 NULL
<nome atributo> <operador> <valor>
3 João M 3000.00 1 2

Uma constante,
variável ou σ Num_Dep = 1 (Empregado)
consulta aninhada
Álgebra Relacional
S
Q
L

CIn.ufpe.br CIn.ufpe.br

29 30

5
Extração de Dados de uma Tabela Extração de Dados de uma Tabela
(Consulta) (Consulta)
SQL   Exemplo 11: Listar nome e sexo dos empregados
SELECT * FROM Empregado WHERE Num_Dep = 1; do departamento 11 com salário > R$ 4.000,00

Empregado
Cad Nome Sexo Salario Num_Dep Cad_Spv
Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2
1 José M 5000.00 1 2
2 Maria F 800.00 2 NULL
3 João M 3000.00 1 2
3 João M 3000.00 1 2

Álgebra Relacional
σ Num_Dep = 1 AND salario > 4000.00 (Empregado)
π nome, sexo ( )

S
Q
L
CIn.ufpe.br CIn.ufpe.br

31 32

Extração de Dados de uma Tabela Extração de Dados de uma Tabela


SQL
(Consulta) (Consulta)
  Exemplo 12: Listar nome e salário dos
SELECT Nome, Sexo FROM Empregado
empregados do departamento com um dado
WHERE Num_Dep = 1 AND Salario > 4000.00;
código
Nome Sexo
Empregado
José M Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2
  Consulta para o usuário fornecer valores para o 2 Maria F 800.00 2 NULL
SELECT só na hora da execução 3 João M 3000.00 1 2
 Colocar parâmetro na forma &<variável>
SQL
π nome, salario ( )
σ Num_Dep = ? (Empregado)
SELECT <lista de atributos> FROM <tabela>
S
Q
Álgebra Relacional

L
WHERE <atributo> = &<variável>; CIn.ufpe.br CIn.ufpe.br

33 34

Extração de Dados de uma Tabela


(Consulta) Operadores SQL
SQL
  BETWEEN e NOT BETWEEN: substituem o uso
SELECT Nome, Salario FROM Empregado
dos operadores <= e >=
WHERE Num_Dep = &cod_dep;
SQL
  Após digitar e executar o comando acima, o
... WHERE <nome atributo> BETWEEN
sistema apresenta a mensagem:
<valor1> AND <valor2>;
Informe o valor para cod_dep:
  Exemplo 13: Listar os nomes dos empregados
  Caso o usuário digite 1 com salário entre R$ 4.000,00 e R$ 10.000,00
Nome Salario
José 5000.00
João 3000.00
CIn.ufpe.br CIn.ufpe.br

35 36

6
Operadores SQL Operadores SQL
Empregado
Cad Nome Sexo Salario Num_Dep Cad_Spv
  LIKE e NOT LIKE: só se aplicam sobre atributos do
1 José M 5000.00 1 2
tipo char
2 Maria F 800.00 2 NULL
3 João M 3000.00 1 2
 Operam como = e < >, respectivamente
 O uso do símbolo % permite que a posição na
π nome ( )
σ salario between 4000.00 and 10000.00(Empregado) cadeia de caracteres seja substituída por
Álgebra Relacional qualquer cadeia de caracteres
SQL
 O uso do símbolo _ permite que a posição na
SELECT Nome FROM Empregado cadeia de caracteres seja substituída por
WHERE Salario BETWEEN 4000 AND 10000; qualquer caractere
Nome
José
CIn.ufpe.br CIn.ufpe.br

37 38

Operadores SQL Operadores SQL


  LIKE e NOT LIKE (Cont.)
SQL SQL
...WHERE <nome atributo> LIKE <valor1>; SELECT Nome FROM Empregado
WHERE Nome LIKE 'Jo%';
  Exemplo 14: Listar os nomes dos empregados
que iniciam com Jo

Empregado Nome
José
Cad Nome Sexo Salario Num_Dep Cad_Spv
João
1 José M 5000.00 1 2
2 Maria F 800.00 2 NULL
3 João M 3000.00 1 2

π nome ( )
σ nome like 'Jo%' (Empregado)
S
Álgebra Relacional Q
L
CIn.ufpe.br CIn.ufpe.br

39 40

Operadores SQL Operadores SQL


Dependente
Cad_emp Nome Data_nasc Grau_P
  IN e NOT IN: procuram dados que estão ou não
contidos em um dado conjunto de valores 1 Bruno 01/02/2000 P
2 Gina 05/10/2002 M
SQL
1 Telma 04/03/2010 A
... WHERE <nome atributo> IN <valores>;
π nome, data_nasc ( )
σ grau_p in ('M', 'P) (Dependente)
  Exemplo 15: Listar o nome e data de nascimento SQL Álgebra Relacional
dos dependentes com grau de parentesco 'M' ou
'P' SELECT Nome, Data_Nasc FROM Dependente
  Considerando criada a tabela Dependente WHERE Grau_P IN ('M', 'P');
Nome Data_nasc

Bruno 01/02/2000
CIn.ufpe.br Gina 05/10/2002 CIn.ufpe.br

41 42

7
Operadores SQL Operadores SQL
  IS NULL e IS NOT NULL: identificam se o atributo
tem valor nulo (ou não informado) SQL
SQL ... WHERE <nome atributo> IS NULL; SELECT Numero, Nome FROM Projeto
WHERE Local IS NULL;
  Exemplo 16: Listar número e nome dos projetos
que não tenham local definido
Numero Nome
Projeto
3 Testes
Numero Nome Num_Dep Local
1 Desenvolvimento 1 Recife
2 Análise 1 Olinda
3 Testes 2 NULL

σ local is NULL (Projeto)


π numero, nome ( )
CIn.ufpe.br CIn.ufpe.br
Álgebra Relacional 43 44

Ordenando os Dados Selecionados Ordenando os Dados Selecionados


  Exemplo 17: Listar todos os dados dos
  Cláusula ORDER BY empregados ordenados ascendentemente por
nome
SQL
Empregado
SELECT <lista atributos> FROM <tabela> Cad Nome Sexo Salario Num_Dep Cad_Spv
[WHERE <condição>] 1
2
José M 5000.00 1 2
ORDER BY <Nome atributo> {ASC | DESC}; 2 3
Maria F 800.00 2 NULL
1
3 João M 3000.00 1 2

π cad, nome, sexo, salario, num_dep, cad_spv ( )


σ nome ASC (Empregado)
Crescente (default) S
Q
Álgebra Relacional L

CIn.ufpe.br CIn.ufpe.br

45 46

Ordenando os Dados Selecionados Ordenando os Dados Selecionados


  Exemplo 18: Listar todos os dados dos
SQL empregados ordenados descendentemente por
SELECT * FROM Empregado ORDER BY Nome; salário
Empregado
Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00
1
1 2
2 Maria F 3 800.00 2 NULL
2
Cad Nome Sexo Salario Num_Dep Cad_Spv 3 João M 3000.00 1 2
3 João M 3000.00 1 2
1 José M 5000.00 1 2 π cad, nome, sexo, salario, num_dep, cad_spv ( )
σ salario DESC (Empregado)
S
2 Maria F 800.00 2 NULL
Álgebra Relacional Q
L

CIn.ufpe.br CIn.ufpe.br

47 48

8
Ordenando os Dados Selecionados Realizando Cálculo com
Informação Selecionada
SQL   Pode-se criar um campo para a resposta da consulta
SELECT * FROM Empregado ORDER BY que não pertença à tabela a partir de cálculos sobre
Salario DESC; atributos da tabela
Uso de operadores aritméticos

Cad Nome Sexo Salario Num_Dep Cad_Spv


1 José M 5000.00 1 2
3 João M 3000.00 1 2
2 Maria F 800.00 2 NULL

CIn.ufpe.br CIn.ufpe.br

49 50

Realizando Cálculo com Realizando Cálculo com


Informação Selecionada Informação Selecionada
Exemplo 19: Mostrar nome e o novo salário dos
empregados, calculado com base no reajuste de
60% para os que ganham abaixo de R$ 4.000,00 Renomear
SQL

Empregado *1.6 SELECT Nome, (Salario * 1.60) AS Novo_salario


FROM Empregado WHERE Salario < 4000.00;
Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2
2 Maria F 800.00 2 NULL
3 João M 3000.00 1 2
*1.6 Nome Novo_Salario

π nome, salario * 1.6 ( )


σ salario < 4000.00 (Empregado) Maria 1280.00
S João 4800.00
Álgebra Relacional Q
L
CIn.ufpe.br CIn.ufpe.br

51 52

Funções Agregadas Funções Agregadas


  Exemplo 20: Mostrar o valor do maior salário dos
  Utilização de funções sobre conjuntos
empregados e o nome do empregado que o
Disparadas a partir do SELECT recebe
Empregado
Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2
2 Maria F 800.00 2 NULL
3 João M 3000.00 1 2

π nome, salario ( )
σ max(salario) (Empregado)
S

Álgebra Relacional
Q
L

CIn.ufpe.br CIn.ufpe.br

53 54

9
Funções Agregadas Funções Agregadas
  Exemplo 21: Mostrar qual o salário médio dos
  A solução é buscar o nome e o salário do empregados
empregado que tem o maior salário
Empregado
Consulta aninhada Cad Nome Sexo Salario Num_Dep Cad_Spv
SQL
1 José M 5000.00 1 2
SELECT Nome, Salario FROM Empregado

média
2 Maria F 800.00 2 média
NULL
WHERE Salario IN ( SELECT MAX (Salario) 3 João M 3000.00 1 2

FROM EMPREGADO );
σ avg (salario) (Empregado)
π salario ( )
Nome Salario S
Álgebra Relacional Q
L
José 5000.00

CIn.ufpe.br CIn.ufpe.br

55 56

Funções Agregadas Funções Agregadas


SQL   Exemplo 22: Quantos empregados ganham mais
SELECT AVG (Salario) FROM Empregado; de R$4.000,00?

Empregado
AVG(Salario) Cad Nome Sexo Salario Num_Dep Cad_Spv

Contar
2933.33 1 José M 5000.00 1 2
2 Maria F 800.00 2 contar NULL
3 João M 3000.00 1 2

σ count (salario > 4000.00) (Empregado)


Álgebra Relacional
S
Q
L

CIn.ufpe.br CIn.ufpe.br

57 58

Funções Agregadas Cláusula DISTINCT


  Elimina tuplas duplicadas do resultado de uma
SQL
consulta
SELECT COUNT (*) FROM Empregado Exemplo 23: Quais os diferentes códigos
WHERE Salario > 4000.00; dos supervisores dos empregados?
Empregado
Count(*) Cad Nome Sexo Salario Num_Dep Cad_Spv
1 1 José M 5000.00 1 2
2 Maria F 800.00 2 NULL
3 João M 3000.00 1 2
DisSnto

σ disSnct (cad_spv) (Empregado)


Álgebra Relacional S
Q
L
CIn.ufpe.br CIn.ufpe.br

59 60

10
Cláusula DISTINCT Cláusula GROUP BY
  Organiza a seleção de dados em grupos
SQL
Exemplo 24: Listar os quantitativos de
SELECT DISTINCT Cad_spv empregados de cada sexo
FROM Empregado;
Empregado
Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2
Cad_Spv

Contar
2 Maria F 800.00 2 NULL
-

Contar
3 João M 3000.00 1 2
2
Agrupar

π sexo, count(*) ( )
σ group by(sexo) (Empregado)
S

Álgebra Relacional
Q
L

CIn.ufpe.br CIn.ufpe.br

61 62

Cláusula GROUP BY Cláusula HAVING


Exceção: Funções agregadas   Agrupando Informações de forma condicional
 Vem depois do GROUP BY e antes do ORDER
Todos os atributos do SELECT BY
devem aparecer no GROUP BY
Exemplo 25: Listar o número total de
SQL empregados que recebem salários superiores a
SELECT Sexo, Count(*) FROM Empregado R$1.000,00 em cada departamento com mais
de 1 empregado
GROUP BY Sexo;

Sexo Count(*)
M 2
F 1

CIn.ufpe.br CIn.ufpe.br

63 64

Cláusula HAVING Cláusula HAVING


Empregado SQL
Cad Nome Sexo Salario Num_Dep Cad_Spv SELECT Num_Dep, COUNT (*) FROM Empregado
1 José M 5000.00 1 2 WHERE Salario > 1000 GROUP BY Num_Dep
Contar > 1

2 Maria F 800.00 2 NULL


HAVING COUNT(*) > 1;
3 João M 3000.00 1 2

Agrupar

Num_Dep Count(*)
π num_dep, count(*) ( )
σ salario > 1000.00, group by(num_dep), count(*) >1 (Empregado))
1 2
Álgebra Relacional S
Q
L

CIn.ufpe.br CIn.ufpe.br

65 66

11
Consultando Dados de Várias Tabelas
Uso de “Alias”
- Junção
  Para substituir nomes de tabelas em comandos   Junção de Tabelas (JOIN)
SQL  Citar as tabelas envolvidas na cláusula FROM
 São definidos na cláusula FROM  Qualificadores de nomes - utilizados para evitar
ambiguidades
SQL
  Referenciar os nomes de Empregado e de
SELECT A.nome FROM Departamento A Departamento
WHERE A.Numero = 15;
Empregado.Nome
Alias Departamento.Nome
Melhor ainda usar alias
CIn.ufpe.br CIn.ufpe.br

67 68

Junção de Tabelas
  Exemplo 26: Listar o nome de cada empregado e
Junção de Tabelas
o nome do departamento no qual está alocado SQL
SELECT E.Nome, D.Nome
Empregado FROM Empregado E, Departamento D
Cad Nome Sexo Salario Num_Dep Cad_Spv
WHERE E.Num_Dep = D.Numero;
1 José M 5000.00 1 2
2 Maria F 800.00 2 NULL
3 João M 3000.00 1 2

Departamento
E.NOME D.NOME
Numero Nome Cad_Ger Data_Ini
1 RH 3 12/03/2010 José RH
2 Contabilidade 2 15/01/2009 João RH
Maria Contabilidade

π E.nome, D.nome( Departamento))


σ (Empregado Num_Dep = Numero
Álgebra Relacional
CIn.ufpe.br CIn.ufpe.br

69 70

Junção de Tabelas Junção de Tabelas


  Exemplo 27: Listar os nomes dos departamentos SQL
que têm projetos SELECT D.Nome
Departamento FROM Departamento D, Projeto P
Numero Nome Cad_Ger Data_Ini
WHERE P.Num_Dep = D.Numero;
1 RH 3 12/03/2010
2 Contabilidade 2 15/01/2009

Projeto
Numero Nome Num_Dep Local
Nome
1 Desenvolvimento 1 Recife

2 Análise 1 Olinda
RH

3 Testes 1 NULL

π D.nome ( Projeto))
σ (Departamento Numero = Num_Dep
Álgebra Relacional
CIn.ufpe.br CIn.ufpe.br

71 72

12
Junção de Tabelas Junção de Tabelas
Departamento
  Pode-se utilizar as cláusulas (NOT) LIKE, (NOT) IN, Numero Nome Cad_Ger Data_Ini

IS (NOT) NULL misturadas aos operadores AND, 1 RH 3 12/03/2010


2 Contabilidade 2 15/01/2009
OR e NOT nas equações de junção ( cláusula
WHERE ) Projeto
 Exemplo 28: Listar os nomes dos departamentos Numero Nome Num_Dep Local

que têm projetos com número (identificação) 1 Desenvolvimento 1 Recife

inferior a 3 e estão localizados em Olinda ou 2 Análise 1 Olinda

Recife, ordenados por nome de departamento. 3 Testes 1 NULL

Álgebra Relacional

π D.nome (
σ P.Numero < 3, P.Local IN ('Olinda', 'Recife') (Departamento
CIn.ufpe.br Numero = Num_Dep Projeto)) CIn.ufpe.br

73 74

SQL Junção de Tabelas Junção de Tabelas


SELECT D.Nome   Classificando uma Junção
FROM Departamento D, Projeto P Exemplo 29: Para cada departamento, liste o
WHERE P.Local IN ('Olinda', 'Recife') nome do departamento, e para cada um deles,
listar o número, o nome e o salário de seus
AND P.Numero < 3 empregados, ordenando a resposta em ordem
AND P.Num_Dep = D.Numero decrescente de salário e em ordem alfabética
ORDER BY D.Nome;

Nome
RH

CIn.ufpe.br CIn.ufpe.br

75 76

Junção de Tabelas Junção de Tabelas


Departamento SQL
Numero Nome Cad_Ger Data_Ini
1 RH 3 12/03/2010 SELECT D.Nome, E.Cad, E.Nome, E.Salario
2 Contabilidade 2 15/01/2009
FROM Departamento D, Empregado E
Empregado WHERE D.Numero = E.Num_Dep
Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2
ORDER BY E.Salario DESC, E.Nome;
2 Maria F 800.00 2 NULL
3 João M 3000.00 1 2

D.NOME E.CAD E.NOME E.SALARIO



RH 1 José 5000.00
π D.Nome , E.Cad, E.Nome, E.Salario, order by E.Salario DESC, E.Nome (σ (Departamento RH 3 João 3000.00
Numero = Num_Dep Empregado)) Contabilidade 2 Maria 800.00
Álgebra Relacional
CIn.ufpe.br CIn.ufpe.br

77 78

13
Junção de Tabelas Junção de Tabelas
Empregado
Cad Nome Sexo Salario Num_Dep Cad_Spv
  Agrupando por meio de mais de um atributo em
1 José M 5000.00 1 2
uma Junção 2 Maria F 800.00 2 NULL

Exemplo 30: Encontre o total de projetos de 3 João M 3000.00 1 2

cada empregado por departamento, Trabalha_em


informando o código do departamento e o Cad_Emp Num_Proj Horas
1 1 20
cadastro desse empregado 1 2 24
2 2 44

3 3 15

3 2 15

3 1 14

π E.Num_Dep , E.Cad, count(*) (σ (Empregado Cad = Cad_Emp Trabalha_em))


CIn.ufpe.br CIn.ufpe.br

79 Álgebra Relacional 80

Junção de Tabelas Junção de Tabelas


SQL
SELECT E.Num_Dep, E.Cad, COUNT(*) AS Total   Realizando Junção com mais de duas tabelas
FROM Trabalha_em T, Empregado E  Exemplo 31: Listar o nome dos empregados
WHERE E.Cad = T.Cad_Emp juntamente com o nome do departamento no
qual estão alocados e que trabalhem mais de
GROUP BY E.Num_Dep, E.Cad 20 horas em algum projeto
ORDER BY E.Num_Dep, E.Cad;

E.NUM_DEP E.CAD TOTAL



1 1 2
1 3 3
2 2 1
CIn.ufpe.br CIn.ufpe.br

81 82

Junção de Tabelas
Empregado
Cad Nome Sexo Salario Num_Dep Cad_Spv Junção de Tabelas
1 José M 5000.00 1 2
SQL
2 Maria F 800.00 2 NULL SELECT E.Nome, D.Nome
3 João M 3000.00 1 2
FROM Empregado E, Departamento D,
Trabalha_em
Cad_Emp Num_Proj Horas
Trabalha_em T
1 1 20 WHERE T.Horas > 20
1 2 24
2 2 44
Departamento
Numero Nome Cad_Ger Data_Ini
AND T.Cad_Emp = E.Cad
3 3 15 1 RH 3 12/03/2010 AND E.Num_Dep = D.Numero;
3 2 15 2 Contabilidade 2 15/01/2009

3 1 14 E.NOME D.NOME

José RH
π E.Nome , D.Nome (σ T.Horas > 20 (Trabalha_Em Cad_Emp = Cad Empregado, Maria Contabilidade
Empregado Num_Dep = Numero Departamento))
CIn.ufpe.br CIn.ufpe.br
Álgebra Relacional 83 84

14
Junção de Tabelas Junção de Tabelas

Inner join (às vezes chamada de "junção simples") Outer join


 É uma junção de duas ou mais tabelas que Retorna todas as tuplas de uma tabela e
retorna somente as tuplas que satisfazem à somente as tuplas de uma tabela secundária
condição de junção onde os campos de junção são iguais
( condição de junção é encontrada)
 Equivalente à junção natural  Para todas as tuplas de uma das tabelas que
não tenham tuplas correspondentes na outra,
pela condição de junção, é retornado null para
todos os campos da lista do select que sejam
colunas da outra tabela

CIn.ufpe.br CIn.ufpe.br

85 86

Junção de Tabelas Junção de Tabelas


Outer join (Cont.)
Outer join (Cont.)
Exemplo 32: Listar os nomes de todos os
departamentos da companhia e os nomes e
 Para escrever uma consulta que executa um
locais dos projetos de que são responsáveis
outer join das tabelas A e B e retorna todas as
tuplas de A além das tuplas comuns, utilizar

SQL
SELECT <atributos>
FROM <tabela A> LEFT [OUTER] JOIN <tabela B>
ON <condição de junção>;
CIn.ufpe.br CIn.ufpe.br

87 88

Junção de Tabelas SQL Junção de Tabelas


Departamento SELECT D.Nome, P.Nome, P.Local
Numero Nome Cad_Ger Data_Ini
1 RH 3 12/03/2010
FROM Departamento D LEFT OUTER JOIN
2 Contabilidade 2 15/01/2009 Projeto P
ON D.Numero = P.Num_Dep;
Projeto
Numero Nome Num_Dep Local

1 Desenvolvimento 1 Recife D.NOME P.NOME P.LOCAL


2 Análise 1 Olinda
3 Testes 1 NULL RH Desenvolvimento Recife
RH Análise Olinda
RH Testes
Álgebra Relacional
Contabilidade

π D.nome, P.Nome, P.Local (


σ(Departamento Numero = Num_DepProjeto))
CIn.ufpe.br CIn.ufpe.br

89 90

15
Junção de Tabelas Junção de Tabelas
Outer join (Cont.)
Outer join (Cont.)
 Exemplo 33: Listar os nomes dos
 Para escrever uma consulta que executa uma departamentos da companhia com os nomes
outer join das tabelas A e B e retorna todas as e locais dos projetos de que são responsáveis
tuplas de B além das tuplas comuns, utilizar e os nomes dos demais projetos

SQL
SELECT <atributos>
FROM <tabela A> RIGHT [OUTER] JOIN <tabela B>
ON <condição de junção>;

CIn.ufpe.br CIn.ufpe.br

91 92

Junção de Tabelas SQL Junção de Tabelas


Departamento SELECT D.Nome, P.Nome, P.Local
Numero Nome Cad_Ger Data_Ini
1 RH 3 12/03/2010
FROM Departamento D RIGHT OUTER JOIN
2 Contabilidade 2 15/01/2009 Projeto P
ON D.Numero = P.Num_Dep;
Projeto
Numero Nome Num_Dep Local

1 Desenvolvimento 1 Recife D.NOME P.NOME P.LOCAL


2 Análise 1 Olinda
3 Testes 1 NULL RH Desenvolvimento Recife
RH Análise Olinda
RH Testes
Álgebra Relacional

π D.nome, P.Nome, P.Local (


σ(Departamento Numero = Num_DepProjeto))
CIn.ufpe.br CIn.ufpe.br
94
93

Junção de Tabelas Junção de Tabelas


Outer join (Cont.)
Outer join (Cont.)
 Exemplo 34: Listar os nomes de todos os
 Para escrever uma consulta que executa uma departamentos da companhia, os nomes e
outer join e retorna todas as tuplas de A e B, locais dos projetos de que sejam responsáveis
estendidas com nulls se elas não satisfizerem e os nomes dos demais projetos
à condição de junção, utilizar
SQL
SELECT <atributos>
FROM <tabela A> FULL [OUTER] JOIN <tabela B>
ON <condição de junção>;

CIn.ufpe.br CIn.ufpe.br
95
96

16
Junção de Tabelas Junção de Tabelas
Departamento SQL
Numero
1
Nome
RH
Cad_Ger
3
Data_Ini
12/03/2010
SELECT D.Nome, P.Nome, P.Local
2 Contabilidade 2 15/01/2009 FROM Departamento D FULL OUTER JOIN
Projeto P
Projeto
ON D.Numero = P.Num_Dep;
Numero Nome Num_Dep Local

1 Desenvolvimento 1 Recife

2 Análise 1 Olinda
D.NOME P.NOME P.LOCAL
3 Testes 1 NULL
RH Desenvolvimento Recife
RH Análise Olinda
Álgebra Relacional
RH Testes
π D.nome, P.Nome, P.Local (
σ(Departamento Numero = Num_DepProjeto)) Contabilidade
CIn.ufpe.br CIn.ufpe.br

97 98

Consultas Encadeadas (Aninhadas) Consultas Encadeadas (Aninhadas)


  O resultado de uma consulta é utilizado por outra Subconsultas devem ser escritas entre ( e )
consulta, de forma encadeada e no mesmo   Existem 3 tipos de subconsultas
comando SQL  ESCALAR → Retornam um único valor
  O resultado do comando SELECT mais interno  ÚNICA LINHA → Retornam várias colunas, mas
(subselect) é usado por outro SELECT mais externo apenas uma única linha é obtida
para obter o resultado final
 TABELA → Retornam uma ou mais colunas e
  O SELECT mais interno (subconsulta ou consulta múltiplas linhas
aninhada) pode ser usado apenas nas cláusulas
WHERE e HAVING do comando mais externo ou
em cálculos

CIn.ufpe.br CIn.ufpe.br

99 100

Consultas Encadeadas (Aninhadas) Consultas Encadeadas (Aninhadas)


Empregado
  Usando uma subconsulta com operador de Cad Nome Sexo Salario Num_Dep Cad_Spv

igualdade 1 José M 5000.00 1 2


2 Maria F 800.00 2 NULL
 Exemplo 35: Listar cadastro, nome e salario 3 João M 3000.00 1 2

dos empregados que trabalham no


departamento de Contabilidade Departamento
Numero Nome Cad_Ger Data_Ini
1 RH 3 12/03/2010
2 Contabilidade 2 15/01/2009

π E.Cad, E.Nome, E.Salario (σ D.Nome = 'Contabilidade’ (Empregado ))



CIn.ufpe.br Álgebra Relacional CIn.ufpe.br
101 102

17
Consultas Encadeadas (Aninhadas) Consultas Encadeadas (Aninhadas)
SQL
SELECT Cad, Nome, Salario   Usando uma subconsulta com função agregada
FROM Empregado Subconsulta escalar   Exemplo 36: Listar os empregados cujos
salários são maiores do que o salário médio,
WHERE Num_Dep = mostrando a diferença para o salário médio
(SELECT Numero
FROM Departamento
WHERE Nome = ‘Contabilidade' );

E.CAD E.NOME E.SALARIO



2 Maria 800.00
CIn.ufpe.br CIn.ufpe.br
103 104

Consultas Encadeadas (Aninhadas) Consultas Encadeadas (Aninhadas)


- Media(Salario) SQL
Empregado SELECT Cad, Nome, Salario –
Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2 - Media(Salario)
(SELECT AVG (Salario) FROM Empregado)
2 Maria F 800.00 2 NULL AS DifSal
3 João M 2000.00 1 2
FROM Empregado
WHERE Salario > ( SELECT AVG ( Salario)
FROM Empregado );
π E.Cad, E.Nome, E.Salario – Media(Salario) (σ Salario > Media(Salario) (Empregado ))
E.CAD E.NOME DifSal
Álgebra Relacional
1 José 2400.00
CIn.ufpe.br CIn.ufpe.br
105 106

Consultas Encadeadas (Aninhadas)


Consultas Encadeadas (Aninhadas) Dependente Cad_Emp Nome Data_Nasc Grau_P
1 Jonas 12/05/2000 Pai
Mais de um nível de aninhamento 2 Beatriz 05/06/2002 Pai

 Exemplo 37: Listar os dependentes dos 3 Clara 13/02/2001 Pai

funcionários que trabalham no departamento Empregado


RH Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2
2 Maria F 800.00 2 NULL
3 João M 3000.00 1 2

Departamento
Numero Nome Cad_Ger Data_Ini
1 RH 3 12/03/2010
2 Contabilidade 2 15/01/2009

π DEP.Nome, DEP.Data_Nasc, DEP.Grau_P (σ Cad_Emp = π Cad(σ Num_Dep = πNumero (σ Nome


= 'RH’( Departamento)) ((Empregado) )) (Dependente)
CIn.ufpe.br
Álgebra Relacional
CIn.ufpe.br
107 108

18
Consultas Encadeadas (Aninhadas) Cláusulas ANY/SOME
SQL
SELECT Nome, Data_nasc, Grau_P   São usadas com subconsultas que produzem
FROM Dependente WHERE Cad_Emp IN uma única coluna de números
( SELECT Cad FROM Empregado
Exemplo 38: Listar os empregados cujos
salários são maiores do que o salário de pelo
WHERE Num_Dep = menos um funcionário do departamento 1
( SELECT Numero
FROM Departamento
WHERE Nome = ' RH' ) );

Nome Data_Nasc Grau_P



Jonas 12/05/2000 Pai
Beatriz 05/06/2002 Pai CIn.ufpe.br CIn.ufpe.br
109 110

Cláusulas ANY/SOME Cláusulas ANY/SOME


Empregado SQL
Cad Nome Sexo Salario Num_Dep Cad_Spv
SELECT Cad, Nome, Sexo, Salario
1 José M 5000.00 1 2 FROM Empregado
2 Maria F 800.00 2 NULL
3 João M 3000.00 1 2 WHERE Salario >
SOME ( SELECT Salario FROM Empregado
WHERE Num_Dep = 1) ;

π E.Cad, E.Nome, E.Sexo, E.Salario (σ ∃salario > E.salario where E.Num_Dep = 1 (Empregado E)) CAD NOME SEXO SALARIO

Álgebra Relacional 1 José M 5000.00

CIn.ufpe.br CIn.ufpe.br
111 112

Cláusula ALL Cláusula ALL


Empregado
  É utilizado com subconsultas que produzem uma Cad Nome Sexo Salario Num_Dep Cad_Spv
única coluna de números 1 José M 5000.00 1 2
2 Maria F 800.00 2 NULL
Exemplo 39: Listar os empregados cujos
3 João M 3000.00 1 2
salários são menores do que o salário de cada
funcionário do departamento 1

π E.Cad, E.Nome, E.Sexo, E.Salario (σ E.Salario < ∀ E.salario where E.Num_Dep = 1 (Empregado E))

Álgebra Relacional

CIn.ufpe.br CIn.ufpe.br
113 114

19
Cláusula ALL Cláusulas EXISTS e NOT EXISTS
SQL   Foram projetadas para uso apenas com
SELECT Cad, Nome, Sexo, Salario subconsultas
FROM Empregado  EXISTS
WHERE Salario < ALL ( SELECT Salario  Retorna TRUE ⇔ existe pelo menos uma linha
FROM Empregado produzida pela subconsulta
WHERE Num_Dep = 1) ;  Retorna FALSE ⇔ a subconsulta produz uma
tabela resultante vazia
Deve ser uSlizado quando for necessário
cerSficar-se que haverá resposta a uma
CAD NOME SEXO SALARIO subconsulta

2 Maria F 800.00  Exemplo 40: Liste todos os empregados
que trabalham no departamento de RH
CIn.ufpe.br CIn.ufpe.br
115 116

Cláusulas EXISTS e NOT EXISTS Cláusulas EXISTS e NOT EXISTS


Empregado SQL
Cad Nome Sexo Salario Num_Dep Cad_Spv
SELECT Cad, Nome, Sexo, Salario
1 José M 5000.00 1 2
2 Maria F 800.00 2 NULL FROM Empregado E WHERE EXISTS
3 João M 3000.00 1 2
( SELECT D.Numero FROM Departamento D
Departamento
WHERE E.Num_Dep = D.Numero AND
Numero Nome Cad_Ger Data_Ini
1 RH 3 12/03/2010 D.Nome = 'RH') ;
2 Contabilidade 2 15/01/2009

π E.Cad, E.Nome, E.Sexo, E.Salario (∃σ D.Nome = 'RH' (Empregado )) CAD NOME SEXO SALARIO

Álgebra Relacional 1 José M 5000.00
3 João M 3000.00

CIn.ufpe.br CIn.ufpe.br
117 118

Regras Genéricas de Subconsultas Regras Genéricas de Subconsultas


  A cláusula ORDER BY não pode ser usada em   Quando a subconsulta é um dos operandos
uma subconsulta
  A lista de atributos especificados no SELECT de envolvidos em uma comparação, ela deve
uma subconsulta deve conter um único aparecer no lado direito da comparação
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

CIn.ufpe.br CIn.ufpe.br
119 120

20
Operações de Conjunto Operações de Conjunto
Projeto
  UNION
Numero Nome Num_Dep Local
 Linhas duplicadas são removidas da tabela 1 Desenvolvimento 1 Recife
resultante 2 Análise 1 Olinda
Exemplo 41: Construa uma lista de todos os 3 Testes 1 NULL
locais onde existe um departamento ou um
Locais
projeto Num_Dep Nome_Loc
1 Camaragibe

1 Jaboatão

2 Olinda

π Projeto.Local U π Locais.Nome_Loc
Álgebra Relacional

CIn.ufpe.br CIn.ufpe.br
121 122

Operações de Conjunto Operações de Conjunto


( SELECT Local FROM Projeto SQL
  INTERSECT
WHERE Local IS NOT NULL )
 Exemplo 42: Construa uma lista de todos os
UNION
locais onde existem ambos um departamento e
( SELECT Nome_Loc FROM Locais ) ; um projeto

Local

Recife
Olinda
Camaragibe
Jaboatão

CIn.ufpe.br CIn.ufpe.br
123 124

Operações de Conjunto Operações de Conjunto


Projeto SQL ( SELECT Local FROM Projeto )
Numero Nome Num_Dep Local

1 Desenvolvimento 1 Recife
INTERSECT
2 Análise 1 Olinda ( SELECT Nome_Loc FROM Locais ) ;
3 Testes 1 NULL

Locais
Num_Dep Nome_Loc Local
1 Camaragibe
1 Jaboatão Olinda
2 Olinda

π Projeto.Local ∩ π Locais.Nome_Loc
Álgebra Relacional

CIn.ufpe.br CIn.ufpe.br
125 126

21
Operações de Conjunto Operações de Conjunto
Locais
Num_Dep Nome_Loc
  MINUS 1 Camaragibe

Exemplo 43: Construa uma lista de todos os 1 Jaboatão

2 Olinda
locais onde existe um departamento mas
nenhum projeto Projeto
Numero Nome Num_Dep Local

1 Desenvolvimento 1 Recife

2 Análise 1 Olinda

3 Testes 1 NULL

Π Locais.Nome_Loc - π Projeto.Local
Álgebra Relacional

CIn.ufpe.br CIn.ufpe.br
127 128

Operações de Conjunto Inserção de Dados em Tabelas


SQL
  Adicionar uma ou várias tuplas à tabela →
( SELECT Nome_Loc FROM Locais ) INSERT
MINUS SQL
( SELECT Nome_Loc FROM Projeto ); INSERT INTO <tabela> (<lista de atributos>)
VALUES (<valores>);
Inserção de apenas uma Linha
Nome_Loc
  Caso sejam fornecidos valores para todos os
Camaragibe atributos, na ordem em que foram definidos,
Jaboatão não é necessário fornecer (<lista de
atributos>)
SQL
CIn.ufpe.br INSERT INTO <tabela> VALUES (<valores>);
CIn.ufpe.br
129 130

Inserção de Dados em Tabelas Inserção de Dados em Tabelas


  Exemplo 44: Inserir dados de um empregado
SQL INSERT INTO Empregado
VALUES (4, 'Clara', 'F', 7000.00, 1, 2);
Empregado
Cad Nome Sexo Salario Num_Dep Cad_Spv Não é necessário
1 José M 5000.00 1 2 informar nomes
2 Maria F 800.00 2 NULL Empregado dos atributos
3 João M 3000.00 1 2 Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2
2 Maria F 800.00 2 NULL
3 João M 3000.00 1 2

4 Clara F 7000.00 1 2

INSERIR 4, Clara, F, 7000.00, 1, 2 (Empregado )

CIn.ufpe.br CIn.ufpe.br
131 132

22
Inserção de Dados em Tabelas Inserção de Dados em Tabelas
  Inserir dados recuperados de uma tabela em Empregado
Cad Nome Sexo Salario Num_Dep Cad_Spv
outra tabela – uso do SELECT
1 José M 5000.00 1 2
2 Maria F 800.00 2 NULL
SQL INSERT INTO <tabela> (<lista de atributos>) 3 João M 3000.00 1 >1 2
SELECT <lista de atributos> FROM <tabela> 4 Clara F 7000.00 1 2

WHERE <condição>; + Departamento


Inserção de Várias Linhas Depto_Info
Nome_Depto ... Numero Nome Cad_Ger Data_Ini

As duas <lista de atributos> devem ser união compawveis ... ... 1 RH 3 12/03/2010
... .... 2 Contabilidade 2 15/01/2009
  Exemplo 45: Armazenar na tabela Depto_Info
(Nome_Depto, Num_Emp, Total_Sal) para cada
departamento com mais de 1 empregado, o nome
do departamento, o número de empregados e a INSERIR σ (D.Nome, Count(*) > 1, SUM(Salario), Departamento Numero = Num_Dep
soma dos salários pagos Empregado) (Depto_Info )
CIn.ufpe.br CIn.ufpe.br
133 134

Inserção de Dados em Tabelas Atualização de Dados em Tabelas


SQL
  Com base em critérios especificados, alterar
INSERT INTO Depto_info (nome_depto,
valores de campos de uma tabela → UPDATE
num_emp, total_sal)
SELECT D.nome, COUNT(*), SUM (E.salario) UPDATE <nome tabela> SQL
FROM Departamento D, Empregado E SET <nome atributo> = <valor>
WHERE D.numero = E.Num_Dep WHERE <condição>;
GROUP BY D.nome HAVING COUNT (*) > 1;
  Exemplo 46: Atualizar salário do empregado 2
para R$9500,00
Depto_Info
Nome_Depto Num_Emp Total_Sal
RH 3 15000.00
CIn.ufpe.br CIn.ufpe.br
135 136

Atualização de Dados em Tabelas Atualização de Dados em Tabelas


Empregado
SQL
Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2 UPDATE Empregado SET Salario = 9500.00
2 Maria F 800.00 2 NULL
3 João M 3000.00 1 2 WHERE Cad = 2;
4 Clara F 7000.00 1 2
Empregado
Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2
2 Maria F 9500.00 2 NULL
3 João M 3000.00 1 2

4 Clara F 7000.00 1 2

ATUALIZAR π E.Salario = 9500.00, σ (Cad = 2) (Empregado )

CIn.ufpe.br CIn.ufpe.br
137 138

23
Remoção de Tuplas de Tabela Remoção de Tuplas de Tabela
Empregado
  Exclusão de dados de uma tabela → DELETE Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2
SQL 2 Maria F 9500.00 2 NULL
3 João M 3000.00 1 2
DELETE FROM <tabela> WHERE <condição>;
4 Clara F 7000.00 1 2

  Exemplo 47: Remover todos os empregados


com salário inferior a R$ 5000,00

REMOVER σ (Salario < 5000.00) (Empregado )


CIn.ufpe.br CIn.ufpe.br
139 140

Remoção de Tuplas de Tabela Uklizando Visões (VIEWS)


  São tabelas virtuais que não ocupam espaço
físico no BD para os dados
SQL DELETE FROM Empregado
  Operações
 Criação e utilização
WHERE Salario < 5000.00;
 Inserção e modificação (semântica depende da
definição/natureza da visão)
Empregado SQL CREATE VIEW <nome da view>
Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2
(<lista de atributos>) AS SELECT...;
2 Maria F 9500.00 2 NULL

4 Clara F 7000.00 1 2
 Exemplo 48: Criar uma visão dos empregados
do departamento 1 que tenham mais de 20
horas de trabalho em algum projeto
O empregado João
foi removido
CIn.ufpe.br CIn.ufpe.br
141 142

Empregado
Uklizando Visões (VIEWS) Uklizando Visões (VIEWS)
Cad Nome Sexo Salario Num_Dep Cad_Spv
1 José M 5000.00 1 2
2 Maria F 9500.00 2 NULL
4 Clara F 7000.00 1 2
SQL CREATE VIEW Dep_1 AS
SELECT E.Nome, T.Num_Proj
Trabalha_em
Cad_Emp Num_Proj Horas FROM Empregado E, Trabalha_em T
1
1
1
2
20
24
WHERE T.Horas > 20
2 2 44 AND T.Cad_Emp = E.Cad
4 1 34
AND E.Num_Dep = 1;

CRIAR VISÃO π E.Nome, T.Num_Proj, σ (T.Horas > 20, Num_Dep = 1)


(Empregado Cad = Cad_Emp Trabalha_Em)
CIn.ufpe.br CIn.ufpe.br
143 144

24
Uklizando Visões (VIEWS) Garankndo Privilégios de Acesso
  Para testar, consultar a VIEW   Comando GRANT

SQL SELECT * FROM Dep_1 ; SQL GRANT <privilégios> ON <nome tabela/view>


TO <usuário>;

Dep_1   Onde
Nome Num_Proj
<privilégios>: SELECT, INSERT, DELETE,
José 2
Clara 1
UPDATE, ALL PRIVILEGES e
<usuário>: usuário cadastrado, PUBLIC

CIn.ufpe.br CIn.ufpe.br
145 146

Garankndo Privilégios de Acesso Removendo Privilégios de Acesso


  Exemplo 49: Conceder a permissão de   Comando REVOKE
consulta sobre a tabela EMPREGADO ao SQL
usuário user REVOKE <privilégios> ON <nome tabela/view>
FROM <usuário>;

  Exemplo 50: Remover a permissão de


SQL consulta dada aos usuários do sistema
GRANT SELECT ON Empregado TO user;
SQL
REVOKE SELECT ON Projeto FROM PUBLIC;
CIn.ufpe.br CIn.ufpe.br
147 148

25

Você também pode gostar