0% acharam este documento útil (0 voto)
4 visualizações

04 - SQL - Structured Query Language

O documento apresenta uma introdução à linguagem SQL, destacando sua importância como padrão para bancos de dados relacionais e suas versões ao longo do tempo. Ele detalha as principais partes da linguagem, incluindo DDL e DML, e explica como criar, alterar e manipular tabelas, além de descrever tipos de dados e operações de consulta. O texto também aborda a definição de chaves primárias e estrangeiras, bem como restrições de integridade e manipulação de dados.

Enviado por

João Francisco
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
4 visualizações

04 - SQL - Structured Query Language

O documento apresenta uma introdução à linguagem SQL, destacando sua importância como padrão para bancos de dados relacionais e suas versões ao longo do tempo. Ele detalha as principais partes da linguagem, incluindo DDL e DML, e explica como criar, alterar e manipular tabelas, além de descrever tipos de dados e operações de consulta. O texto também aborda a definição de chaves primárias e estrangeiras, bem como restrições de integridade e manipulação de dados.

Enviado por

João Francisco
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 140

SQL – Structured Query Language

Prof. Gervásio Teixeira

1
Introdução
• Linguagem padrão para os bancos de dados relacionais;
– Presente praticamente em todos os SGBD´s Relacionais;
– Fácil migração de dados de um SGBD para outro que usa este
mesmo modelo;
– Uma das grandes responsáveis pela grande aceitação dos
SGBDR´s.

2
Introdução
• A linguagem foi desenvolvida inicialmente pela IBM para
ser usada no SGBD System R;
– Chamada inicialmente de SEQUEL (Structured English Query
Language);
• Depois, a ANSI e a ISO começaram a revisar estas
linguagens e chegaram às novas versões;
– SQL-86;
– SQL-92 (SQL-2);
– SQL-99 (SQL-3);
– SQL-2003;
– SQL-2008 (atual)

3
Introdução
• A partir da versão SQL-99, a linguagem SQL foi dividida
em duas partes:
– Núcleo;
• Principais elementos da linguagem;
– Operadores para definição e manipulação de dados, visões, etc;
– Implementado em todo SGBDR;
– Pacotes adicionais;
• Utilizados para aplicações específicas de BD;
– Data warehouse, Data Minning, dados multimídia, dados espaciais,
etc;

4
Introdução
• O núcleo da linguagem SQL é dividido em várias partes;
– DDL;
• Criação, alteração e remoção de tabelas e índices;
– DML;
• Inserção, consulta, alteração e modificação de tuplas;
– Manipulação de dados embutida;
• Acesso ao BD através de linguagens de programação;
– Definição de visões;
• Definição de visões a partir das tabelas criadas;

5
Introdução
• DML - Linguagem de Manipulação de Dados
– Os elementos da DML (Data Manipulation Language):
• A DML é um subconjunto da linguagem SQL usada para inserir, atualizar
e apagar dados.

Operações com tuplas (dados)


– INSERT é usada para inserir um registro (formalmente uma
tupla) a uma tabela existente.
– UPDATE para mudar os valores de dados em uma ou mais
linhas da tabela existente.
– DELETE permite remover linhas existentes de uma tabela.

6
Introdução
• DDL - Linguagem de Definição de Dados
 DDL (Data Definition Language - Linguagem de Definição de Dados). Uma DDL permite ao
utilizador definir tabelas novas e elementos associados.

Operações de definição de dados

– CREATE cria um objeto dentro da base de dados.


• CREATE TABLE – cria uma nova tabela no banco de dados;
• CREATE INDEX – cria uma novo índice no banco de dados;
• CREATE VIEW – cria uma nova visão no banco de dados;

– DROP apaga um objeto do banco de dados.


• DROP TABLE – apaga uma tabela do banco de dados;
• DROP INDEX – apaga um índice do banco de dados;
• DROP VIEW – apaga uma visão do banco de dados;

– ALTER altera um objeto do banco de dados.


• ALTER TABLE – altera as definições de uma tabela do banco de dados;
• ALTER INDEX – altera as definições de um índice do banco de dados;
• ALTER VIEW – altera a uma visão do banco de dados;
7
Introdução
• O núcleo da linguagem SQL é dividido em várias partes;
– Definição de autorização;
• Especificação dos direitos de acessos às tabelas e visões do banco de
dados;
– Definição de restrições de integridade;
• Asserções e gatilhos;
– Controle transacional;

8
Tipos de dados SQL
• Tipos Numéricos:
– INT ou INTEGER;
• Números inteiros (de -2.147.483.648 a 2.147.483.647)

– SMALLINT;
• Números inteiros pequenos (de -32.768 a 32.767)

– BIGINT;
• Números inteiros grandes (de -9.223.372.036.854.775.808 a
9.223.372.036.854.775.807);

9
Tipos de dados SQL
• Tipos Numéricos:
– DOUBLE PRECISION;
• Número real com precisão dupla;

– FLOAT(n);
• Ponto flutuante com precisão definida pelo usuário;

– NUMERIC (p,d);
• Ponto flutuante onde p é a precisão (total de dígitos decimais) e d é a
escala (número de casas depois do ponto);

10
Tipos de dados SQL
• Cadeias de caracteres:
– CHAR(n) ou CHARACTER(N);
• Cadeia de caracteres de tamanho fixo;

– VARCHAR(n);
• Cadeia de caracteres com tamanho variável, onde n é o comprimento
máximo da cadeia;

– CHARACTER LARGE OBJECT (CLOB);


• Usado para armazenar strings grandes, como textos e documentos;

11
Tipos de dados SQL
• Cadeias de bits:
– BIT(n);
• Conjunto de bits de tamanho fixo;

– BIT VARYING(n);
• Conjunto de bits de tamanho variável, onde n é o tamanho máximo;

– BINARY LARGE OBJECT (BLOB);


• Grandes quantidades de bits, usado para armazenar vídeos, fotos,
mapas, etc;

12
Tipos de dados SQL
• Tipos Booleanos:
– BOOLEAN:
• Valores booleanos;
• EM SQL, ele pode assumir os valores true, false ou unknow;

• Data e Hora:
– DATE:
• Especifica uma data com o formato YYYY-MM-DD;

– TIME:
• Especifica uma hora com o formato HH:MM:SS;

13
Manipulação de Tabelas
• SQL define três comandos para a definição de dados:
– CREATE (criação);

– ALTER (alteração);

– DROP (exclusão);

14
Manipulação de Tabelas
• Criando uma nova tabela:
– Usamos o comando CREATE TABLE;
– Definimos um nome para a tabela;
– Definimos depois a lista de atributos, cada qual com seu
respectivo tipo;
– Por fim, definimos as restrições;
• Chave primária, chave estrangeira, etc;

15
Linguagem de definição de dados
• Criando uma nova tabela:
– A definição de um atributo tem a seguinte sintaxe:
• Nome tipo [NOT NULL] [UNIQUE] [DEFAULT valor]
– Onde:
• Nome: corresponde ao nome do atributo;
• Tipo: corresponde ao tipo de dado deste atributo (Tipo SQL);
• NOT NULL: restrição que indica que o valor do atributo não pode ser
nulo;
• UNIQUE: restrição que indica que o valor do atributo é único;
– Usada para chaves secundárias;
• DEFAULT: usado para definir um valor inicial para o atributo caso o
valor não seja informado;

16
Manipulação de Tabelas
• Criando uma nova tabela:
– Podemos especificar as seguintes restrições:
• Chave Primária:
– PRIMARY KEY (atributos_chaves);

• Chave Estrangeira:
– FOREIGN KEY (atributo) REFERENCES tabela_base(atributo);

• Restrição de integridade:
– CHECK (condição);

17
Manipulação de Tabelas
• Criando uma nova tabela:
– Exemplo: Criar uma tabela para cada esquema de
relação:
• Fornecedor (Codigo, Nome, Cidade);
• Peça(CodPeca, Nome, Descricao)
• Venda(CodFornecedor, CodPeca, Quantidade, Data);

18
Manipulação de Tabelas
• Criando uma nova tabela:
– Exemplo:
CREATE TABLE Fornecedor(
Codigo INT,
Nome VARCHAR(20) NOT NULL,
Cidade VARCHAR(20) NOT NULL,
PRIMARY KEY (Codigo)
)

19
Manipulação de Tabelas
• Criando uma nova tabela:
– Exemplo:

CREATE TABLE Peca (


CodPeca INT,
Nome VARCHAR(30) NOT NULL,
Descricao VARCHAR(50) NOT NULL,
PRIMARY KEY (CodPeca)
)

20
Manipulação de Tabelas
• Criando uma nova tabela:
– Exemplo:
CREATE TABLE Venda(
CodFornecedor INT,
CodPeca INT,
Quantidade INT DEFAULT 1,
Data DATE,
PRIMARY KEY (CodFornecedor,CodPeca),
FOREIGN KEY (CodFornecedor) REFERENCES Fornecedor(Codigo),
FOREIGN KEY (CodPeca) REFERENCES Peca(CodPeca)
)

21
Manipulação de Tabelas
• Definindo chaves estrangeiras:
– Como já vimos, usamos a restrição “FOREIGN KEY” é usada
para a definição de uma chave estrangeira;
• Uma restrição de integridade referencial é gerada;
– Podemos especificar o que o SGBD deve fazer para manter a
integridade referencial dos dados:
• Numa atualização (através da restrição ON UPDATE);
• Numa exclusão (através da restrição ON DELETE);

22
Manipulação de Tabelas
• Definindo chaves estrangeiras:
– Para cada uma destas restrições, temos quatro valores
possíveis;
• Restrict:
– Rejeita a atualização ou exclusão de um registro da tabela pai, se
houver registros na tabela filha.;
• Cascade:
– Atualiza ou exclui os registros da tabela filha automaticamente, ao
atualizar ou excluir um registro da tabela pai;
• Set Null:
– As tuplas relacionadas com a tupla a ser atualizada ou removida
tem o valor do atributo chave estrangeira correspondente alterado
para Null;
• Set Default:
– As tuplas relacionadas com a tupla a ser atualizada ou removida
tem o valor do atributo chave estrangeira correspondente alterado
para um valor default;
23
Manipulação de Tabelas
• Vamos supor uma tabela de cidade e uma de clientes

Cidade
Id | Nome
1 | Cajazeiras

Cliente
Id | Nome | Cidade_Id
1 | Gervasio| 1

Ao atualizar/excluir o registro da cidade “Cajazeiras”: 24


Manipulação de Tabelas
• Vamos supor uma tabela de cidade e uma de clientes

Restrict
– o banco irá rejeitar o comando, retornando uma exceção de violação
de chave estrangeira.
Cascade
– Se alterar o valor da coluna id da Cidade, também será alterado o
valor da coluna Cidade_id na tabela de Cliente. Se excluir a cidade
Cajazeiras, também será excluido o Cliente 1, Gervásio.
Set Null
– O valor da coluna Cidade_Id dos registros que estiverem utilizando o
valor 1, Cajazeiras, serão definidos como null

25
Manipulação de Tabelas
• Definindo chaves estrangeiras:
– Vamos recriar uma das tabelas de nosso exemplo;

CREATE TABLE Venda(

CodFornecedor INT,
CodPeca INT,
Quantidade INT DEFAULT 1,
Data DATE,
PRIMARY KEY (CodFornecedor,CodPeca),

FOREIGN KEY (CodFornecedor) REFERENCES Fornecedor(Codigo) ON


DELETE RESTRICT ON UPDATE CASCADE ,

FOREIGN KEY (CodPeca) REFERENCES Peca(CodPeca) ON DELETE


RESTRICT ON UPDATE CASCADE
)
26
Manipulação de Tabelas
• Nomeando as restrições:
– Podemos nomear cada restrição definida em uma tabela;
– Isto permite remover uma determinada restrição depois que a
tabela é criada;
– Fazemos isso usando a palavra “CONSTRAINT” antes da
restrição, seguido do nome dado para a mesma;

27
Manipulação de Tabelas
• Nomeando as restrições:
– Exemplo:
CREATE TABLE Venda(

CodFornecedor INT,
CodPeca INT,
Quantidade INT DEFAULT 1,
Data DATE,
PRIMARY KEY (CodFornecedor,CodPeca),

CONSTRAINT Referencia_CodFornecedor
FOREIGN KEY (CodFornecedor) REFERENCES Fornecedor(Codigo) ON
DELETE RESTRICT ON UPDATE CASCADE ,

CONSTRAINT Referencia_CodPeca
FOREIGN KEY (CodPeca) REFERENCES Peca(CodPeca) ON DELETE
RESTRICT ON UPDATE CASCADE
)
28
Manipulação de Tabelas
• Alterando uma Tabela:
– Podemos alterar uma tabela usando o comando ALTER TABLE;
– Ao alterar uma tabela, podemos:
• Adicionar ou eliminar uma coluna;
• Alterar a definição de uma coluna;
• Adicionar ou eliminar restrições;

29
Manipulação de Tabelas
• Alterando uma Tabela:
– Adicionando ou removendo colunas:
• Podemos adicionar uma coluna através da cláusula ADD:
• Se a tabela já foi povoada, todas as tuplas recebem um valor nulo para
o novo atributo;
– A restrição NOT NULL não pode ser aplicada neste tipo de atributo;

– Exemplo: Adicione na tabela Empregado um novo atributo


chamado CPF.

ALTER TABLE Empregado ADD Cpf VARCHAR(14);

30
Manipulação de Tabelas
• Alterando uma Tabela:
– Adicionando ou removendo colunas:
• Podemos remover uma coluna através da cláusula DROP;
• Podemos usar as opções CASCADE ou RESTRICT para tratar as restrições
e visões que referenciam o atributo a ser excluído;

– Exemplo: Remover o atributo Salario de todos os Empregados

ALTER TABLE Empregado DROP Salario CASCADE;

31
Manipulação de Tabelas
• Alterando uma Tabela:
– Alterando a definição de uma coluna:
• Podemos alterar a definição de uma tabela usando as
cláusulas ALTER e SET;

– Exemplo: Alterar o valor padrão do atributo Quantidade para 2.

ALTER TABLE Venda ALTER Quantidade SET DEFAULT 2;

32
Manipulação de Tabelas
• Alterando uma Tabela:
– Adicionando e removendo restrições:
• Podemos adicionar uma restrição através da cláusula ADD
CONSTRAINT;

– Exemplo: Crie uma restrição para o atributo Quantidade, onde


os seus valores não sejam menores do que 0.

ALTER TABLE Venda ADD CONSTRAINT QuantPositiva CHECK


(Quantidade>=0)

33
Manipulação de Tabelas
• Alterando uma Tabela:
– Adicionando e removendo restrições:
• Podemos remover uma restrição através da cláusula DROP
CONSTRAINT;
• Para ser removida, uma restrição deve ter sido nomeada;

– Exemplo: Remova a restrição criada para o atributo


Quantidade da tabela Venda.

ALTER TABLE Venda DROP CONSTRAINT QuantPositiva;

34
Manipulação de Tabelas
• Removendo uma Tabela:
– Podemos remover uma tabela através do operador DROP;
– Podemos usar as opções CASCADE ou RESTRICT para tratar as
tabelas e visões que referenciam a tabela a ser excluída;

– Exemplo: Remover a tabela Venda da base de dados


juntamente com as suas referências.

DROP TABLE Venda CASCADE;

35
Manipulação de Tabelas
• Todos.....

Já sabem como criar e manipular uma tabela?

36
Consultas
• As consultas são descritas na linguagem SQL através da
operação SELECT;
• Geralmente, uma consulta tem a forma:

SELECT <lista_de_atributos>
FROM <lista_de_tabelas>
WHERE <condição>

37
Consultas
• Onde:
– <lista_de_atributos> corresponde às colunas que devem ser
selecionadas das tabelas;
• Corresponde à operação de projeção da álgebra relacional;
– <lista_de_tabelas> corresponde às tabelas que serão usadas
para realizar a consulta;
– <condição> é uma expressão booleano que indica o critério de
seleção das tuplas;
• Pode ser omitida, quando quisermos recuperar todas as tuplas de uma
tabela;
• Os operadores relacionais =, <, <=, >,>= e <> podem ser usados para
expressar as condições;
• Os conectores lógicos AND, OR e NOT podem ser usados para
especificar condições compostas;
38
Um estudo de caso
Um estudo de caso
• Para ilustrar as operações relacionais, vamos considerar o
seguinte esquema lógico;

– Empregado (Matrícula, Nome, Salário, Supervisor,


CodDepartamento);

– Departamento (CodDepartamento, Nome, Gerente);

– Projeto (CodProjeto, Nome, CodDepartamento);

– Dependente (Empregado, NomeDependente, Parentesco);

– TrabalhaProjeto (Empregado, CodProjeto, NumHoras);


Um estudo de caso

 Vamos considerar a seguinte relação Empregado:

MATRÍCULA NOME SALÁRIO SUPERVISOR COD_DEPARTAMENTO

1 Giôvanni 2500,00 4 1
2 Emilton 2500,00 3 2
3 Lucas 4500,00 NULL 2
4 Laires 4500,00 NULL 1

40
Um estudo de caso

 Vamos considerar a seguinte relação Departamento:

COD_DEPARTAMENTO NOME GERENTE

1 Financeiro 4

2 Vendas 3

41
Um estudo de caso

 Vamos considerar a seguinte relação Projeto:

COD_PROJETO NOME COD_DEPARTAMENTO

1 Bet Fácil 2

2 Rico Novinho 1

3 CEO Foda 1

42
Um estudo de caso

 Vamos considerar a seguinte relação Dependente:

EMPREGADO NOME_DEP PARENTESCO

2 Dalina Filho

2 Emilton Jr Filho

3 Joana Cônjuge

43
Um estudo de caso

 Vamos considerar a seguinte relação Trabalha_Projeto:

EMPREGADO COD_PROJETO NUM_HORAS

1 2 12

1 3 12

2 1 12

2 2 12

4 2 12

4 3 12
44
MATRÍCULA NOME SALÁRIO SUPERVISOR COD_DEPARTAMENTO
1 Giôvanni 2500,00 4 1
EMPREGADO
2 Emilton 2500,00 3 2
3 Lucas 4500,00 NULL 2
4 Laires 4500,00 NULL 1

DEPENDENTE DEPARTAMENTO
EMPREGADO NOME_DEP PARENTESCO COD_DEPARTAMENTO NOME GERENTE
2 Dalina Filho 1 Financeiro 4
2 Emilton Jr Filho 2 Vendas 3

3 Joana Cônjuge TRABALHA_PROJETO


EMPREGADO COD_PROJETO NUM_HORAS
PROJETO
1 2 12
COD_PROJETO NOME COD_DEPARTAMENTO
1 3 12
1 Bet Fácil 2 2 1 12
Rico 2 2 12
2 1
Novinho 4 2 12
3 CEO Foda 1 4 3 12 45
Consultas
• Exemplo 1: Selecionar a matrícula e o nome de todos os
empregados que trabalham no departamento 2;

SELECT Matricula, Nome FROM Empregado


WHERE Cod_Departamento =2;

Resultado:

MATRÍCULA NOME

2 Emilton

3 Lucas

46
Consultas
• Exemplo 2: Selecionar a matrícula e o nome dos
empregados do departamento 2 que ganham mais de
três mil reais;

SELECT Matricula, Nome FROM Empregado


WHERE Cod_Departamento=2 AND Salario>3000;

Resultado:

MATRÍCULA NOME

3 Lucas
47
Consultas
• Podemos omitir a condição para selecionar todas as tuplas de
uma tabela;
– Exemplo 3: Selecionar a matrícula e o nome de todos os
empregados;

SELECT Matricula, Nome FROM Empregado;


MATRÍCULA NOME
Resultado:
1 Giôvanni
2 Emilton
3 Lucas
4 Laires

48
Consultas
• Podemos também selecionar todas as colunas de uma tabela
usando o valor *;
– Exemplo 4: Selecionar as informações sobre os empregados do
departamento dois;

SELECT * FROM Empregado WHERE Cod_Departamento=2;


Resultado:

MATRÍCULA NOME SALÁRIO SUPERVISOR COD_DEPARTAMENTO

2 Emilton 2500,00 3 2
3 Lucas 4500,00 NULL 2

49
Consultas
• Podemos alterar o nome de uma ou mais colunas através da cláusula
AS:
– Exemplo 5: Selecionar a matricula e o nome de todos os
empregados, renomeando somente atributo nome para
Nome_Empregado;

SELECT Matricula, Nome AS Nome_Empregado FROM Empregado;

Resultado:
MATRÍCULA NOME_EMPREGADO

1 Giôvanni
2 Emilton
3 Lucas
4 Laires 50
Consultas
• Podemos aplicar cálculos aos valores de uma coluna:
– Exemplo 6: Calcule como ficaria o novo salário de cada empregado caso
eles recebessem um aumento de 15%, recuperando a sua matricula,
nome e o novo salário reajustado.

SELECT Matricula, Nome, 1.15 * Salario AS Salario_Reajustado


FROM Empregado;
Resultado:
MATRÍCULA NOME SALÁRIO_REAJUSTADO

1 Giôvanni 2875,00
2 Emilton 2875,00
3 Lucas 5175,00
4 Laires 5175,00
51
Consultas
• Podemos realizar junções:
– Exemplo 7: Selecione o nome dos empregados que trabalham no
departamento de Vendas;

SELECT Empregado.Nome FROM Empregado, Departamento


WHERE Empregado.Cod_Departamento =
Departamento.Cod_Departamento AND Departamento.Nome ='Vendas'

Resultado:

NOME

Emilton

Lucas
52
Consultas
• Podemos usar aliases para tabelas para facilitar a consulta e eliminar
ambigüidades;
– Exemplo 8: Selecione o nome dos empregados que trabalham no
departamento de Vendas;

SELECT E.Nome FROM Empregado AS E, Departamento AS D


WHERE E.Cod_Departamento = D.Cod_Departamento AND D.Nome
='Vendas'

Resultado:

NOME

Emilton

Lucas
53
Consultas
• Podemos também omitir a cláusula AS ao renomear tabelas;
– Exemplo 9: Selecione o nome dos empregados que trabalham no
departamento de Vendas;

SELECT E.Nome FROM Empregado E, Departamento D


WHERE E.Cod_Departamento = D.Cod_Departamento AND D.Nome
='Vendas'

Resultado:

NOME

Emilton

Lucas
54
Consultas
• Todos.....

Já sabem como realizar consultas?

55
Consultas
• Podemos também renomear tabelas para fazer junção
de uma tabela com ela mesma;
– Exemplo 10: Recupere a matrícula, o nome e o nome do supervisor de cada
empregado;

SELECT E.Matricula, E.Nome, S.Nome AS Supervisor


FROM Empregado E, Empregado S
WHERE E.Supervisor=S.Matricula

- Resultado:

MATRÍCULA NOME SUPERVISOR

1 Giôvanni Laires
2 Emilton Lucas
56
Consultas
• Comparando com valores nulos:
– Uma tabela pode conter valores nulos para vários atributos;
– Para selecionar tuplas que possuem um valor de atributo nulo ou não nulo
usamos os operadores IS e IS NOT, respectivamente;
– Exemplo 11: Recupere o nome de todos os empregados que não tem
supervisor;

SELECT Nome FROM Empregado


WHERE Supervisor IS NULL

Resultado:
NOME

Lucas
Laires
57
Consultas
• Comparando com valores nulos:
– Uma tabela pode conter valores nulos para vários atributos;
– Para selecionar tuplas que possuem um valor de atributo nulo ou não nulo
usamos os operadores IS e IS NOT, respectivamente;
– Exemplo 11: Recupere o nome de todos os empregados que possuem
algum supervisor;

SELECT Nome FROM Empregado


WHERE Supervisor IS NOT NULL

Resultado:
NOME

Giôvanni

Emilton
58
Consultas

• Representando tabelas como conjuntos:


– A linguagem SQL trata uma tabela como um
multiconjunto;
• Tuplas repetidas não são descartadas do resultado
final;
– Podemos usar a palavra-chave DISTINCT para eliminar
tuplas repetidas do resultado;
– Podemos usar a palavra-chave ALL para especificar
explicitamente que todas as tuplas devem ser
recuperadas no resultado de uma consulta;

59
Consultas
• Representando tabelas como conjuntos:
– Exemplo 12: Recupere o salário de cada funcionário da
empresa;

SELECT Salario FROM Empregado;

• Resultado:
SALARIO

2500,00

2500,00

4500,00

4500,00
60
Consultas
• Representando tabelas como conjuntos:
– Exemplo 13: Selecione todos os salários distintos pago pela
empresa;

SELECT DISTINCT Salario FROM Empregado;

• Resultado:

SALARIO

2500,00

4500,00
61
Consultas
• Representando tabelas como conjuntos:
– SQL define três operadores para trabalhar com
conjuntos:
• UNION (operação de união);
• INTERSECT (operação de interseção);
• EXCEPT (operação de diferença);
– As tabelas devem ser compatíveis de união para
realizar qualquer uma destas operações.

62
Consultas
• Representando tabelas como conjuntos:
– Significando que ambas devem retornar o mesmo
número de colunas, e que as colunas
correspondentes devem possuir tipos de dado
compatíveis.
• O número e a ordem das colunas devem ser os mesmos em
todas as consultas;
• Os tipos de dado devem ser compatíveis.
– Estas operações descartam as tuplas repetidas do
resultado;

63
Consultas
• Representando tabelas como conjuntos:
– Exemplo 14 (UNION): Selecione a matrícula de todos os empregados que
trabalham no departamento 1 ou que trabalham em um projeto:

(SELECT Matricula FROM Empregado WHERE Cod_Departamento=1)


UNION
(SELECT DISTINCT Empregado AS Matricula FROM Trabalha_Projeto)

– Resultado:
MATRICULA

4
64
Consultas
• Representando tabelas como conjuntos:
– Exemplo 14 (INTERSECT): Selecione a matrícula de todos os empregados
do departamento 2 que trabalham em algum projeto

( SELECT Matricula FROM Empregado WHERE Cod_Departamento=2 )


INTERSECT
( SELECT Empregado FROM Trabalha_Projeto )

– Resultado:

MATRICULA

65
Consultas
• Representando tabelas como conjuntos:
– Exemplo 14 (EXCEPT): Selecione a matrícula de todos os empregados que
não trabalham em nenhum projeto

(SELECT Matricula FROM Empregado)


EXCEPT
(SELECT Empregado FROM Trabalha_Projeto)

– Resultado:

MATRICULA

66
Consultas
• Procurando por substrings:
– Podemos procurar por um substring em uma cadeia
de caracteres usando o operador LIKE;
– Podemos usar o caractere % para substituir zero ou
mais caracteres;
• Exemplo: Para localizar strings que contenham o substring
'Cajazeiras' usamos a expressão '%Cajazeiras%'

SELECT * FROM Cidade WHERE Nome LIKE '%Cajazeiras%'

67
Consultas
• Procurando por substrings:
– Podemos usar o caractere _ (anderline) para substituir um único caractere;
– Exemplo: Para localizar todos os strings cujo segundo caractere seja a letra
'a', usamos a expressão '_a%';
– Exemplo 15: Recupere a matrícula e o nome de todos os empregados que
possuem o nome Emilton;

SELECT Matricula, Nome FROM Empregado


WHERE Nome LIKE '%Emilton%';

– Resultado:

MATRÍCULA NOME

2 Emilton
68
Consultas
• Ordenando o resultado de uma consulta:
– Podemos ordenar o resultado de uma consulta usando o
operador ORDER BY;
– Podemos especificar uma lista de atributos para a ordenação,
onde o primeiro é usado como primeiro critério e os demais
sucessivamente, para ordenar tuplas que apresentam o
mesmo valor para o critério anterior;
– Para cada critério podemos usar os valores ASC ou DESC,
para especificar se ordenação deve ser ascendente ou
descendente;
– A ordenação default é ascendente;

69
Consultas
• Ordenando o resultado de uma consulta:
– Exemplo 16: Recupere o nome de cada empregado,
juntamente com o nome do seu departamento e o nome
de cada projeto em que ele trabalha;

SELECT E.Nome AS Empregado, D.Nome AS Depto, P.Nome AS


Projeto
FROM Empregado E, Departamento D, Projeto P, Trabalha_Projeto TP
WHERE E.Cod_Departamento=D.Cod_Departamento AND
E.Matricula=TP.Empregado AND P.Cod_Projeto=TP.Cod_Projeto
ORDER BY E.Nome ASC, P.Nome ASC

70
Consultas
• Ordenando o resultado de uma consulta:
– Exemplo 16: Recupere o nome de cada empregado,
juntamente com o nome do seu departamento e de cada
projeto em que ele trabalha;
– Resultado: EMPREGADO DEPTO PROJETO
Giôvanni Financeiro CEO Foda
Giôvanni Financeiro Rico Novinho
Laires Financeiro CEO Foda
Laires Financeiro Rico Novinho
Emilton Vendas Rico Novinho
Emilton Vendas Venda Facil

71
Consultas
• Consultas aninhadas:
– São consultas feitas sobre os dados recuperados por uma outra
consulta;
– Usamos o operador IN para verificar se uma tupla está
presente em um conjunto ou multiconjunto;

– Exemplo 17: Selecione a matrícula e o nome dos empregados


que trabalham no departamento gerenciado por Lucas;

72
Consultas
• Consultas aninhadas:
– Exemplo 17 (continuação):

SELECT Matricula, Nome FROM Empregado


WHERE Cod_Departamento IN
(SELECT E.Cod_Departamento FROM Empregado E, Departamento
D
WHERE E.Matricula=D.Gerente AND E.Nome='Lucas'
)

MATRÍCULA NOME
– Resultado:
2 Emilton
3 Lucas
73
Consultas
• Consultas aninhadas:
– Podemos usar o quantificador ALL para comparar uma tupla
com um conjunto de tuplas recuperado em uma consulta
aninhada;
– O resultado da operação é verdadeiro se a comparação for
verdadeira para todas as tuplas presentes no resultado da
consulta aninhada;
– Exemplo 18: Recupere o nome dos funcionários que ganham
mais que Giôvanni e Emilton;

74
Consultas
• Consultas aninhadas:
– Exemplo 18 (Continuação):

SELECT Nome FROM Empregado


WHERE Salario > ALL
(SELECT Salario FROM Empregado WHERE Nome='Giôvanni'
OR Nome='Emilton')

– Resultado:

NOME

Lucas
Laires
75
Consultas
• Consultas aninhadas:
– O quantificador SOME (ou ANY) também pode ser utilizado
para comparar uma tupla com as tuplas do resultado de uma
consulta aninhada;
– O resultado da operação é verdadeiro se a comparação for
verdadeira para alguma das tuplas presentes no resultado da
consulta aninhada;
– Exemplo 19: Recupere o nome e o salário de todos os
funcionários que não trabalham no departamento 2 mas
ganham mais do que algum funcionário que trabalha no
departamento 2;

76
Consultas
• Consultas aninhadas:
– Exemplo 19 (continuação):

SELECT Nome FROM Empregado


WHERE Cod_Departamento <> 2 AND Salario > SOME
(SELECT Salario FROM Empregado WHERE Cod_Departamento=2)

– Resultado:

NOME

Laires

77
Consultas
• A cláusula EXISTS;
– A cláusula EXISTS é usada para verificar se o resultado de uma
consulta aninhada é ou não vazio;
– Ela retorna true caso o resultado da consulta não seja vazio, e
false, caso contrário;
– Podemos definir também a cláusula NOT EXISTS, que funciona
da forma inversa;

– Exemplo 20: Recupere o nome de todos os empregados que


possuem algum dependente;

78
Consultas
• A cláusula EXISTS;
– Exemplo 20 (continuação, EXITS):

SELECT Nome FROM Empregado E


WHERE EXISTS
(SELECT * FROM Dependente D WHERE E.Matricula =
D.Empregado)

- Resultado:

NOME

Emilton
Lucas
79
Consultas
• A cláusula NOT EXISTS;
– Exemplo 20 (continuação, NOT EXISTS): Recupere o nome de
todos os empregados que não possuem nenhum dependente;

SELECT Nome FROM Empregado E


WHERE NOT EXISTS
(SELECT * FROM Dependente D WHERE E.Matricula =
D.Empregado)

- Resultado:

NOME

Giôvanni
Laires
80
Consultas
• Todos.....

Já sabem como construir consultas com valores?

81
Consultas
• Junção de Tabelas:
– Até agora, vimos como fazer junção em SQL da forma clássica;
– Porém a SQL define o operador JOIN e vários tipos de junção
de tabelas:
• Equijunção;
• Junção Natural;
• Junção à esquerda;
• Junção à Direita
• Etc;

82
Consultas
• Junção de Tabelas – Equijunção:

– Representa a equijunção da álgebra relacional;


• Os dois atributos de junção são considerados no resultado final;

– Realizada através da cláusula JOIN;

– A operação de junção é definida na cláusula FROM;

– Sintaxe:

Tabela1 JOIN Tabela2 ON CondiçãoDeJunção


83
Consultas
• Junção de Tabelas – Equijunção:
– Exemplo 22: Recupere o nome de todos os empregados que
trabalham no departamento Financeiro;

SELECT E.Nome
FROM (Empregado E JOIN Departamento D ON
E.Cod_Departamento=D.Cod_Departamento)
WHERE D.Nome='Financeiro'

– Resultado:

NOME

Giôvanni
Laires
84
Consultas
• Junção de Tabelas – Equijunção:
– Exemplo 22 (outro): Recupere o nome de todos os
dependentes do empregado Emilton.

SELECT D.nome_Dep
FROM (Empregado E JOIN Dependente D ON E. matricula = D.empregado)
WHERE E.Nome = 'Emilton'

– Resultado:
NOME

Dalina
Emilton
85
Consultas
• Junção de Tabelas – Junção Natural:

– Corresponde à operação de junção natural da álgebra


relacional;
• A junção é feita pelo valor dos atributos que têm o mesmo
nome;
• Os atributos de junção só aparecem uma vez no resultado
final;
– Uma junção natural é feita através da cláusula NATURAL JOIN;

86
Consultas
• Junção de Tabelas – Junção Natural:
– Exemplo 23: Recupere o nome de todos os empregados que
trabalham no departamento Financeiro;

SELECT E.Nome
FROM (Empregado E NATURAL JOIN Departamento D
(Cod_Departamento, NomeDep, Gerente))
WHERE D.NomeDep = 'Financeiro'

– Resultado:
NOME

Giôvanni
Laires
87
Consultas
• Junção de Tabelas – Junção Externa:
– A equijunção e a junção natural são operações de junção
interna;
• Tuplas que não estão relacionadas, ou que possuem um valor nulo para
o atributo da condição de junção são descartadas do resultado final;
– Podemos incluir todas as tuplas de uma tabela no resultado de
uma junção através de uma junção externa;
– A junção externa é realizada através da cláusula OUTER JOIN;

88
Consultas
• Junção de Tabelas – Junção Externa:
– Existem três tipos de junção externa:
• Junção externa à esquerda (LEFT OUTER JOIN ou LEFT JOIN);
• Junção externa à direita (RIGHT OUTER JOIN ou RIGHT JOIN);
• Junção externa completa (FULL OUTER JOIN ou FULL JOIN);
– Caso os atributos de junção tenham o mesmo nome, podemos
incluir a palavra-chave NATURAL antes da cláusula de junção;

89
Consultas
• Junção de Tabelas – Junção Externa à Esquerda:
– Indica que todas as tuplas da tabela do lado esquerdo da
junção devem ser recuperadas;
• Mesmo que não estejam associadas à nenhuma tupla da tabela
do lado direito;
• Mesmo que tenham um valor nulo para o atributo da condição
de junção;
– As tuplas da direita sem nenhuma tupla correspondente à
esquerda ou com valores nulos para o atributos de junção
recebem valores nulos para todos os atributos da tabela do
lado direito da junção;

90
Consultas
• Junção de Tabelas – Junção Externa à Esquerda:
Exemplo 24: Recupere todos os empregados e os
departamentos que cada um gerencia:
SELECT *
FROM (Empregado LEFT OUTER JOIN Departamento ON
Matricula=Gerente)
- Resultado
MATRICULA NOME SALARIO SUPERVISOR CODDEPTO CODDEPTO NOME GERENTE
Giôvan
1 2500 4 1 Null Null Null
ni
2 Emilton 2500 3 2 Null Null Null

3 Lucas 4500 Null 2 2 Vendas 3

4 Laires 4500 Null 1 1 Financeiro 4


91
Consultas
• Junção de Tabelas – Junção Externa à Direita:
– Indica que todas as tuplas da tabela do lado direito da junção
devem ser recuperadas;
• Mesmo que não estejam associadas à nenhuma tupla da tabela do lado
esquerdo;
• Mesmo que tenham um valor nulo para o atributo da condição de
junção;
– As Tuplas da esquerda sem nenhuma Tupla correspondente à
direita ou com valores nulos para o atributos de junção
recebem valores nulos para todos os atributos da tabela do
lado esquerdo da junção;

92
Consultas
• Junção de Tabelas – Junção Externa à Direita:
– Exemplo 25: Recupere os dependentes seguido de todos os
seus respectivos empregados

SELECT * FROM (Dependente RIGHT OUTER JOIN Empregado


ON Empregado=Matricula)
EMPREGADO NOMEDEP PARENTESCO MATRICULA NOME SALARIO SUPERVISOR DEPTO
Giôvan
Null Null Null 1 2500 4 1
ni
2 Dalina Filho 2 Emilton 2500 3 2

2 Emilton Filho 2 Emilton 2500 3 2

3 Joana Cônjugue 3 Lucas 4500 Null 2

Null Null Null 4 Laires 4500 Null 1


93
Consulta
• Junção de Tabelas – Junção Externa Completa
– Recupera todas as tuplas das duas tabelas;
– Tuplas do lado esquerdo que não estão associadas a nenhuma
tupla da tabela à direita ou que possuem valor nulo para o
atributo de junção são tratadas como na junção externa à
esquerda;
– Tuplas do lado direito que não estão associadas a nenhuma
tupla da tabela à esquerda ou que possuem valor nulo para o
atributo de junção são tratadas como na junção externa à
dirteita;

94
Consulta
• Junção de Tabelas – Junção Externa Completa
– Exemplo 26: Recupere os dependentes seguido de todos os
seus respectivos empregados

SELECT * FROM (Dependente FULL OUTER JOIN Empregado ON


Empregado=Matricula)
EMPREGADO NOMEDEP PARENTESCO MATRICULA NOME SALARIO SUPERVISOR DEPTO
Giôvan
Null Null Null 1 2500 4 1
ni
2 Dalina Filho 2 Emilton 2500 3 2

2 Emilton Filho 2 Emilton 2500 3 2

3 Joana Cônjugue 3 Lucas 4500 Null 2

Null Null Null 4 Laires 4500 Null 1


95
Consulta
• Junção de Tabelas – Produto Cruzado
– Representa a operação produto cartesiano da álgebra
relacional;
– Todas as tuplas da primeira tabela são combinadas com todas
as tuplas da segunda tabela, independente de qualquer
condição;
– Representada pela cláusula CROSS JOIN;

96
Consulta
• Junção de Tabelas – Produto Cruzado
– Exemplo 26: Combine todos os departamentos com todos os
projetos:
SELECT * FROM (Departamento CROSS JOIN Projeto)

COD_ COD_
NOME GERENTE COD_PROJETO NOME
DEPARTAMENTO DEPARTAMENTO

1 Financeiro 4 1 Bet Fácil 2

1 Financeiro 4 2 Rico Novinho 2

1 Financeiro 4 3 CEO Foda 1

2 Vendas 3 1 Bet Fácil 2

2 Vendas 3 2 Rico Novinho 2

2 Vendas 3 3 CEO Foda 1 97


Consultas
• Funções Agregadas:
– A linguagem SQL possui algumas funções agregradas
que podem ser aplicadas aos dados no momento de
uma consulta:
– As principais funções são:
• COUNT
– Conta quantas tuplas foram recuperadas em uma
determinada consulta;
– Pode ser aplicada a qualquer consulta SQL;
– O seu resultado é sempre um número inteiro;

98
Consultas
• Funções agregadas:
– As principais funções são:
• COUNT:
–Exemplo 27: Verifique quantos empregados
trabalham no departamento 2;
SELECT COUNT(*) AS TotalDeEmpregados
FROM Empregado WHERE Cod_Departamento =2;

O resultado é uma tabela que


contém um atributo TotalDeEmpregados
TotalDeEmpregados 2
e uma única tupla com o valor 2;
99
Consultas
• Funções agregadas:
– As principais funções são:
• COUNT:
– Podemos usar a palavra DISTINCT para eliminar
duplicidades do resultado final;

– Exemplo 28: Recupere quantos valores de salários diferentes são


pagos pela empresa;

– SELECT COUNT (DISTINCT Salario) AS Tipos_De_Salario


FROM Empregado
TIPOS_DE_SALARIO
O resultado é uma tabela com um único
2
atributo 'Tipos_De_Salario' e com uma única
tupla com o valor 2; 100
Consultas
• Funções agregadas:
– As principais funções são:
• COUNT:
– Podemos usar a cláusula COUNT em consultas
aninhadas;
– Exemplo 29: Recupere o nome de todos os empregados
que possuem mais de um dependente;

SELECT Nome FROM Empregado E


WHERE (SELECT COUNT(*) FROM Dependente D
WHERE E.Matricula=D.Empregado) >1

101
Consultas
• Funções agregadas:
– As principais funções são:
• COUNT:
– Exemplo 29:
» Obtemos a seguinte resposta;

NOME

Emilton

102
Consultas
• Funções agregadas:
– As principais funções são:
• MIN e MAX:
– Recuperam, respectivamente, o menor e o maior valor
de uma coluna;
– Podem ser aplicados a qualquer tipo de dado que tenha
a noção de ordenação;
» Números, cadeia de caracteres, datas, etc;
• AVG:
– Recupera a média dos valores de uma determinada
coluna;
– Aplicado apenas a tipos numéricos;

103
Consultas
• Funções Agregadas:
– Exemplo 30:
• Recupere o menor salário pago pela empresa, o maior
salário pela empresa e média salarial dos funcionários;

SELECT MIN(Salario) AS Menor_Salario, MAX(Salario) AS


Maior_Salario, AVG(Salario) AS Media_Salarial
FROM Empregado;

Resultado:
MENOR_SALARIO MAIOR_SALARIO MEDIA_SALARIAL

2500 4500 3500


104
Consultas
• Agrupamento:
– Muitas vezes, precisamos aplicar as funções agregadas para
subgrupos de tuplas da relação;
• Qual a média salarial de um departamento?
• Quantos funcionários trabalham em cada projeto da empresa?
– Podemos agrupar os elementos de uma relação através da
cláusula GROUP BY;
– A cláusula é seguida pelo nome do atributo usado para fazer o
agrupamento;
– Podemos selecionar apenas o atributo que é critério de
agrupamento e as funções agregadas;

105
Consultas
• Agrupamento:
– Exemplo 31: Para cada departamento da empresa, recupere o
seu código, o seu total de funcionários e a sua média salarial;

SELECT Cod_Departamento, COUNT(*) AS


Total_Empregados,AVG(Salario) AS Media_Salarial
FROM Empregado
GROUP BY Cod_Departamento

COD_DEPARTAMENTO TOTAL _EMPREGADOS MEDIA_SALARIAL

1 2 3500
2 2 3500
106
Consultas
• Agrupamento:
– Para recuperarmos atributos adicionais, podemos incluir os atributos
adicionais desejados na cláusula GROUP BY após o atributo de
agrupamento;
– Exemplo 32: Recupere o código de cada projeto, o nome de cada
projeto, o total de pessoas que trabalha em cada projeto, e o total
de horas trabalhadas por todas as pessoas neste projeto;

SELECT P.Cod_Projeto, P.Nome, COUNT(*) AS Numero_De_Pessoas,


SUM(Num_Horas) AS Horas_Trabalhadas
FROM Trabalha_Projeto TP, Projeto P
WHERE TP.Cod_Projeto = P.Cod_Projeto
GROUP BY P.Cod_Projeto, P.Nome

– Neste caso, o agrupamento só é feito após a junção das tabelas;

107
Consultas
• Agrupamento:
– Exemplo 32 (Resposta):
• Obtemos a seguinte resposta:

COD_PROJETO NOME NUMERO_DE_PESSOAS HORAS_TRABALHADAS

1 Bet Fácil 1 12

Rico
2 3 36
Novinho
3 CEO Foda 2 24
108
Consultas
• Agrupamento:
– As vezes não queremos recuperar todos os grupos gerados em
um agrupamento;
– Podemos selecionar apenas os grupos que satisfazem algum
critério de seleção;
– Podemos fazer esta seleção usando a cláusula HAVING,
seguida do critério de seleção desejado;
– Apenas os grupos que satisfazem o critério de seleção são
mostrados no resultado da consulta;

109
Consultas
• Agrupamento:
– Exemplo 33: Recupere o código e o nome dos projetos em que
trabalham mais de um empregado;

SELECT P.Cod_Projeto, P.Nome


FROM Projeto P, Trabalha_Projeto TP
WHERE P.Cod_Projeto=TP.Cod_Projeto
GROUP BY P.Cod_Projeto,P.Nome
HAVING COUNT(*)>1
COD_PROJETO NOME
Rico
2
Novinho
3 CEO Foda
110
Consultas
• Criando novas colunas em uma consulta:
– Podemos criar novas colunas em nossa consulta através do
comando CASE;
– O valor para este atributo em cada tupla é calculado no
momento da execução da consulta, através de uma ou mais
condições;
– Tuplas que não satisfazem à nenhuma das condições recebem
valores nulos;
– Uma cláusula ELSE, que é opcional, pode ser usada para
calcular o valor destas tuplas;

111
Consultas
• Criando novas colunas em uma consulta:
– Sintaxe do comando CASE;
• CASE
WHEN <cond1> THEN <valor1>
WHEN <cond2> THEN <valor2>
...
WHEN <condN> THEN <valorN>
ELSE <valorDefault>
END

112
Consultas
• Criando novas colunas em uma consulta:
– Exemplo: Selecione a matricula, nome e salário dos
empregados. Crie no resultado uma nova coluna que informe
se o empregado ganha muito ou pouco segundo a seguinte
regra: se o salário for menor ou igual a 3000 reais o empregado
ganha pouco, mas se o salário for maior que 4000, então ele
ganha muito.

SELECT Matricula, Nome, Salario,


CASE
WHEN Salario<=3000 THEN 'Ganha pouco'
WHEN Salario>4000 THEN 'Ganha muito'
END AS Situacao
FROM Empregado 113
Consultas
• Criando novas colunas em uma consulta:
– Exemplo(Resultado):

MATRÍCULA NOME SALARIO SITUACAO

1 Giôvanni 2500 Ganha Pouco


2 Emilton 2500 Ganha Pouco
3 Lucas 4500 Ganha Muito
4 Laires 4500 Ganha Muito

114
Inserções
• Usamos o comando INSERT para fazer inserções de tuplas através da
linguagem SQL;
• Sintaxe:
INSERT INTO Tabela VALUES (valor1, valor2, ...,valorN)
• A ordem dos valores deve ser a mesma ordem em que os atributos
foram definidos na tabela;
• O SGBD se encarrega de verificar se a tupla a ser inserida satisfaz todas
as restrições definidas para a tabela;
– Caso ela não satisfaça alguma restrição, a inserção é rejeitada;

115
Inserções
• Exemplo: Inserir todos os dados do empregado Carlos,
com matrícula 5, salário R$ 4000,00, supervisionado por
Laires e que trabalha no departamento 1;

INSERT INTO Empregado VALUES (5, “Carlos”, 4000,


4, 1 )

116
Inserções
• Podemos alterar a ordem dos atributos, desde que
façamos a descrição da ordem considerada na hora da
consulta;
• Atributos não especificados recebem valores default
(caso tenham sido especificados na criação da tabela) ou
nulos;
• Exemplo:

INSERT INTO Empregado (Nome, Salario, Matricula,


Cod_Departamento, Supervisor)
VALUES (“Paulo”, 4000, 6, 2, 4 )
117
Inserções
• Podemos inserir em uma tabela as tuplas recuperadas no resultado de
uma consulta, desde que elas sejam compatíveis com os atributos da
tabela onde a inserção será feita;
• Exemplo:
– Seja a seguinte tabela:

CREATE TABLE FuncionarioExemplar(


Matricula VARCHAR(10),
Nome VARCHAR(50),
PRIMARY KEY (Matricula)
)

118
Inserções
• Exemplo (Continuação): Inserir na tabela Funcionário
Exemplar os dados dos empregado que trabalham em mais
de 2 projetos
– Podemos inserir dados da seguinte forma:

INSERT INTO FuncionarioExemplar


SELECT Matricula,Nome
FROM Empregado E, Trabalha_Projeto TP
WHERE E.Matricula=TP.Empregado
GROUP BY Matricula,Nome
HAVING COUNT(*)>=2
119
Exclusões
• Usamos o comando DELETE para excluir tuplas de uma
tabela;
• As tuplas são excluídas através de um critério de
remoção;
• Sintaxe:
DELETE FROM Tabela WHERE condição
• A exclusão em uma tabela pode ser propagada para
outras tabelas ou pode ser rejeitada;
– Integridade referencial;

120
Exclusões
• Exemplo: Excluir na tabela TrabalhaProjeto todas as
tuplas que referenciam o projeto 2;
– Remoção não viola a integridade referencial, pode ser feita
normalmente;

DELETE FROM Trabalha_Projeto WHERE CodProjeto=2

121
Exclusões
• Exemplo: Excluir o departamento 2:
– Remoção viola a integridade referencial;
– Pode ser realizada ou não, dependendo do SGBD e da
definição da tabela;

DELETE FROM Departamento WHERE


Cod_Departamento=2

122
Exclusões
• Podemos omitir a cláusula WHERE para removermos
todas as tuplas de uma tabela;
– Neste caso, as tuplas são removidas, mas a tabela continua
existindo;
– Exemplo: Excluir todas as tuplas da tabela TrabalhaProjeto:

DELETE FROM Trabalha_Projeto

123
Atualizações
• O comando UPDATE é utilizado para fazer atualizações;
• Permite a atualização de uma ou mais tuplas de uma
tabela;
– Ou de outras tabelas, devido à integridade referencial;
• Podemos selecionar as tuplas a serem alteradas através
de um critério de seleção;
• Sintaxe:
UPDATE Tabela SET atr1=vl1, atr2=vl2, ..., atrN=vlN
WHERE condição

124
Atualizações
• A cláusula WHERE pode ser omitida para atualizarmos
todas as tuplas de uma tabela;

• Exemplo: Reajuste em 10 % o salário de todos os


funcionários que ganham menos de R$ 3000,00;

UPDATE Empregado SET Salario=Salario * 1.1


WHERE Salario<3000

125
Visões
• São tabelas derivadas de outras tabelas;
• Permitem controlar a visão que cada usuário ou grupo
de usuário tem sobre os dados armazenados;
– Nem sempre é bom os usuários terem acesso a todos os dados
do banco de dados;
• São tabelas virtuais, não são armazenadas fisicamente;
• Boas para representar consultas que devem ser feitas
com muita freqüência;

126
Visões
• Cada visão tem um nome, um conjunto de atributos e
uma consulta que a representa;
• As visões contém sempre os dados atualizados;
– A consulta é executada sempre que a visão é invocada;
• A definição da visão é armazenada no catálogo do SGBD;
• Usamos a seguinte sintaxe para descrever uma visão:
CREATE VIEW NomeDaVisão
AS Consulta

127
Visões
• Exemplo: Crie uma visão que ao ser invocada possa
retornar os nomes dos empregados, o nome dos
projetos e o número de horas trabalhadas em cada
projeto.

128
Visões
• Exemplo: Crie uma visão que ao ser invocada possa
retornar os nomes dos empregados, o nome dos
projetos e o número de horas trabalhadas em cada
projeto.

CREATE VIEW EmpregadoComProjetos


AS SELECT E.Nome AS Empregado, P.Nome AS
Projeto, Num_Horas
FROM Empregado E, Projeto P, Trabalha_Projeto TP
WHERE E.Matricula=TP.Empregado AND
P.Cod_Projeto=TP.Cod_Projeto
129
Visões

• O resultado será a seguinte tabela virtual:

EMPREGADO PROJETO NUM_HORAS


Giôvanni Rico Novinho 12

Giôvanni CEO Foda 12

Emilton Bet Fácil 12

Emilton Rico Novinho 12


Laires Rico Novinho 12

Laires CEO Foda 12


130
Visões
• Podemos fazer consultas em cima dos dados de uma
visão;
• Exemplo: Recupere o nome de todos os empregados que
trabalham no projeto Rico Novinho;

SELECT Empregado FROM EmpregadoComProjetos


WHERE Projeto = 'Rico Novinho'

– A consulta vai recuperar os empregados Giôvanni, Emilton e


Laires;

131
Visões
• Atualização:
– Muitas vezes, os usuários podem querer inserir e atualizar
dados em visões:
– Isto pode trazer problemas:
• O que aconteceria se o usuário tentasse executar o comando:

INSERT INTO EmpregadoComProjetos VALUES


('Carlos','CEO Foda', '24')

132
Visões
• Atualização:
– Em geral, a atualização de visões é tratada da seguinte forma:
• Uma visão definida numa única tabela é atualizável se os
atributos da visão contêm a chave primária e todos os atributos
que possuem a restrição NOT NULL sem nenhum valor default;
• Visões definidas sobre múltiplas tabelas usando junção
geralmente não são atualizáveis;
• Visões usando funções de agrupamento e funções agregadas não
são atualizáveis;

133
Visões
• Redefinindo uma visão:
– Podemos redefinir o nome de uma visão através do operador
ALTER VIEW;
– Sintaxe:
• ALTER VIEW NomeDaVisão RENAME TO NovoNomeDaVisão;
– Exemplo:
ALTER VIEW EmpregadoComProjetos
RENAME TO EmpregadosESeusProjetos

134
Visões
• Exluindo uma visão:
– Podemos excluir uma visão usando o operador DROP VIEW;
– Sintaxe:
• DROP VIEW NomeDaVisão
– Exemplo:
• DROP VIEW EmpregadoComProjetos

135
Índices
• Um índice é uma estrutura de acesso físico aos dados,
usado para acelerar o tempo das consultas;
– Semelhante ao índice de um livro que usamos para encontrar
um determinado assunto;
– Definido sobre o valor de um atributo;
• Geralmente, a chave primária e os atributos com a restrição UNIQUE;
– Uma tabela pode ter mais de um atributo indexado

136
Índices
• Criando um novo índice:
– Podemos criar um novo índice através do operador CREATE
INDEX;
– Sintaxe:
• CREATE INDEX NomeDoÍndice
ON NomeDaTabela(Atributo)
– Exemplo:
• CREATE INDEX ind1
ON Empregado(Matricula)

137
Índices
• Alterando um índice:
– Podemos alterar um índice existente através do operador
ALTER INDEX;
– Sintaxe:
• ALTER INDEX NomeDoÍndice
RENAME TO NomeDoNovoÍndice
– Exemplo:
• ALTER INDEX indiceSalario
RENAME TO indiceSalarioRenomeado

138
Índices
• Removendo um índice:
– Podemos remover um índice usando o operador DROP INDEX;
– Sintaxe:
• DROP INDEX NomeDoIndice ON table;
– Exemplo:
• DROP INDEX indiceSalarioRenomeado ON Empregado;

139
Próxima aula...

Integridade de banco de dados


140

Você também pode gostar