0% acharam este documento útil (0 voto)
13 visualizações140 páginas

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)
13 visualizações140 páginas

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

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy