Buscar

Aula 04 - SQL básica

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 80 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 80 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 80 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

SQL básica
Disciplina: Banco de Dados
Professor: Wandré Nunes de 
Pinho Veloso
2
Linguagem SQL
• Pode ser considerada um dos principais 
motivos para o sucesso dos Bancos de 
Dados Relacionais comerciais
• Os usuários podem escrever comandos 
em um programa de aplicação de BD que 
pode acessar dados armazenados em 
dois ou mais SGBDs relacionais sem ter 
que mudar a sublinguagem do BD (SQL) 
se os sistemas admitirem o padrão SQL
Linguagem SQL
• SQL hoje é conhecido como Structed 
Query Language (Linguagem de Consulta 
Estruturada)
• Originalmente era chamada de SEQUEL 
(Structed English QUEry Language)
• Criada e implementada na IBM Research 
como a interface para um sistema de BD 
relacional experimental, chamado System 
R
3
Linguagem SQL
• Evolução
– SQL-86 ou SQL1 – ANSI 1986
– SQL-92 ou SQL2 – revisado
– SQL:1999 ou SQL3
– SQL:2003 – acréscimo de recursos de XML
– SQL:2006 – acréscimo de recursos de XML
– SQL 2008 – incorporou mais recursos de BD 
de objeto
4
Linguagem SQL
• É uma linguagem DDL, DML e VDL
– Linguagem de Definição de Dados (DDL – Data 
Definition Language)
• Especificação dos esquemas conceitual e interno em SGBD 
que não possuem uma separação estrita entre níveis
– Linguagem de Manipulação de Dados (DML – Data 
Manipulation Language)
• Execução de operações de recuperação, inclusão, alteração 
e exclusão de dados
– Linguagem de Especificação de Visões (VDL – View 
Definition Language)
• Especificação de visões do usuário e seu mapeamento para 
o esquema conceitual
5
Definições e tipos de dados em 
SQL
• Comando CREATE cria
– Esquemas
– Tabelas (relações)
– Domínios
– Outras construções como Views, Assertions e 
Triggers
6
Esquema e catálogo em SQL
• Um esquema SQL é identificado por
– Nome de esquema
– Identificador de autorização
• Para indicar o usuário ou conta proprietário do 
esquema
– Descritores de cada elemento
• Esses elementos incluem tabelas, restrições, 
Views, domínios e outras construções
• Comando: CREATE SCHEMA
7
Esquema e catálogo em SQL
• Exemplo: CREATE SCHEMA EMPRESA 
AUTHORIZATION ‘Jsilva’;
• Em geral todos os usuários estão 
autorizados a criar esquemas e seus 
elementos
8
O comando CREATE TABLE em 
SQL
• Usado para especificar uma nova relação, 
dando-lhe um nome e especificando seus 
atributos e restrições iniciais
– Atributos recebem um nome, um tipo de dado e 
quaisquer restrições de atributo
• Exemplo: NOT NULL
– Restrições de chave, integridade de entidade e 
integridade referencial podem ser especificadas no 
CREATE TABLE
• Depois da relação ser criada, para ser modificada, 
o comando ALTER TABLE deve ser utilizado
9
10
11
Esquema de Banco de Dados relacional das consultas SQL anteriores
O comando CREATE TABLE em 
SQL
• As relações declaradas por meio das instruções 
CREATE TABLE são chamadas de tabelas da base 
ou relações base
– Significa que a relação e suas tuplas são realmente 
criadas e armazenadas como um arquivo pelo SGBD
• As relações base são distintas das relações virtuais, 
criadas por meio da instrução CREATE VIEW
– Podem ou não corresponder a um arquivo físico real
• Os atributos em uma tabela base são considerados 
ordenados na sequência em que são especificados no 
comando CREATE TABLE
12
O comando CREATE TABLE em 
SQL
• Algumas chaves estrangeiras podem causar 
erros porque dizem respeito a uma tabela 
que ainda não foi criada ou por ser uma 
referência circular
– Exemplo do próximo slide:
• A chave estrangeira Cpf_supervisor na tabela 
FUNCIONARIO é uma referência circular (referencia 
ela própria)
• A chave estrangeira Dnr na tabela FUNCIONARIO se 
refere à tabela DEPARTAMENTO, que ainda não foi 
criada
13
14
O comando CREATE TABLE em 
SQL
• Para lidar com esse tipo de problema, 
essas restrições podem ser omitidas 
inicialmente do comando CREATE TABLE, 
e depois acrescentadas usando a 
instrução ALTER TABLE
15
Tipos de dados de atributo e 
domínios em SQL
• Numérico
– INTEGER ou INT e SMALLINT
– FLOAT ou REAL e DOUBLE PRECISION
– DECIMAL(i,j) ou DEC(i,j) ou 
NUMERIC(i,j), onde i é a precisão 
(número total de dígitos decimais) e j é a 
escala (número de dígitos após o ponto 
decimal)
16
Tipos de dados de atributo e 
domínios em SQL
• Cadeia de caracteres
– CHAR(n) ou CHARACTER(n), de tamanho fixo
• Cadeias mais curtas são preenchidas com caracteres em 
branco à direita
– VARCHAR(n) ou CHAR VARYING(n) ou 
CHARACTER VARYING(n), onde n é o tamanho 
máximo
– CHARACTER LARGE OBJECT ou CLOB
• O tamanho máximo pode ser especificado em kilobytes (K), 
megabytes (M) ou gigabytes (G).
• Exemplo: CLOB(20M);
17
Tipos de dados de atributo e 
domínios em SQL
• Cadeia de bits
– BIT(n) de tamanho fixo
• Cadeias mais curtas são preenchidas com 
caracteres em branco à direita
– BIT VARYING(n), onde n é o tamanho 
máximo de bits
– BINARY LARGE OBJECT ou BLOB
• Assim como o CLOB, especifica o tamanho 
máximo em kilobits (K), megabits (M) ou gigabits 
(G)
– Exemplo: BLOB(30G);
18
Tipos de dados de atributo e 
domínios em SQL
• Data
– DATE: DD-MM-YYYY
– TIME: 8 posições com os componentes HOUR, 
MINUTE e SECOND
– Exemplos
• DATE ‘13-02-2015’; TIME ‘11:25:32’;
• Timestamp
– Inclui os campos DATE e TIME, mais um mínimo de 
seis posições para frações decimais de segundos e 
um qualificador opcional WITH TIME ZONE
• Exemplo: TIMESTAMP ‘13-02-2015 
11:25:32.648302’;
19
Tipos de dados de atributo e 
domínios em SQL
• Criação de um domínio
– CREATE DOMAIN TIPO_CPF AS 
CHAR(11);
• Podemos usar TIPO_CPF no lugar de CHAR(11)
20
Especificando restrições de atributo 
e defaults de atributo
• Usar restrição NOT NULL quando o valor NULL 
não for permitido para determinado atributo
– Sempre é especificado para atributos que fazem 
parte da chave primária de cada relação, mas pode 
ser especificado para quaisquer outros atributos
• É possível definir um valor padrão para um 
atributo anexando a cláusula DEFAULT <valor> 
a uma definição de atributo
– Se nenhuma cláusula default for especificada o valor 
padrão será NULL para atributos que não possuem a 
restrição NOT NULL
21
22
Especificando restrições de atributo 
e defaults de atributo
• Limitar valores de atributo ou domínio
– CHECK
• Usado após uma definição de atributo ou domínio
• Exemplo: Suponha que números de departamento 
sejam restritos a números inteiros entre 1 e 20:
– Dnumero INT NOT NULL CHECK (Dnumero > 0 
AND Dnumero < 21);
• Pode ser usado em conjunto com a instrução 
CREATE DOMAIN
– Exemplo: CREATE DOMAIN D_NUM AS INTEGER 
CHECK (D_NUM > 0 AND D_NUM < 21);
23
Especificando restrições de chave 
e integridade referencial
• Cláusula PRIMARY KEY
– Especifica um ou mais atributos que 
compõem a chave primária de uma relação
• Se a chave primária tiver um único atributo, a 
cláusula pode acompanhar o atributo diretamente
– Exemplo: Dnumero INT PRIMARY KEY;
• Cláusula UNIQUE
– Especifica as chaves secundárias ou 
alternativas
– Exemplo: Dnome VARCHAR(15) UNIQUE;
24
Especificando restrições de chave 
e integridade referencial
• Cláusula FOREIGN KEY
– Chave estrangeira
– Especifica a integridade referencial
– Pode ser violada quando tuplas são inseridas 
ou excluídas, ou quando um valor de atributo 
de chave estrangeira ou chave primária é 
modificado
– O default da SQL é rejeitar a operação de 
atualização que causará violação
• Conhecido como RESTRICT
25
Especificando restrições de chave 
e integridade referencial
• Cláusula FOREIGN KEY
– O projetista do esquema pode especificar 
uma ação alternativa para ser tomada 
conectandouma cláusula de ação de 
disparo referencial
• SET NULL
• CASCADE
• SET DEFAULT
– Uma opção deve ser qualificada com ON 
DELETE ou ON UPDATE
26
27
Definições e tipos de dados em 
SQL
• Significa que, se a tupla para um funcionário 
supervisor é excluída, o valor de 
Cpf_supervisor será automaticamente definido 
como NULL para todas as tuplas de funcionários 
que estavam referenciando a tupla do funcionário 
excluído
• Se o valor de Cpf for atualizado, o novo valor será 
propagado em cascata de Cpf_supervisor 
para todas as tuplas de funcionário que 
referenciam a tupla de funcionário atualizada
28
Definições e tipos de dados em 
SQL
• A ação para CASCADE ON DELETE é 
excluir todas as tuplas de referência
• A ação para CASCADE ON UPDATE é 
mudar o valor dos atributos de chave 
estrangeira de referência para o novo 
valor de chave primária atualizado para 
todas as tuplas de referência
29
Dando nomes a restrições
• A palavra-chave CONSTRAINT
– Os nomes de todas as restrições dentro de 
um esquema em particular precisam ser 
exclusivos
– É usado para identificar uma restrição em 
particular caso sela deva ser removida mais 
tarde e substituída por outra
– É opcional
30
Especificando restrições sobre 
tuplas usando CHECK
• Restrições baseadas em tupla
– Se aplicam individualmente e são verificadas sempre 
que uma tupla é inserida ou modificada
– Exemplo: Suponha que a tabela DEPARTAMENTO 
tivesse um atributo adicional Dep_data_criacao, 
que armazena a data em que o departamento foi 
criado. Então, poderíamos acrescentar um CHECK, ao 
final da instrução CREATE TABLE, para garantir que 
a data de início de um gerente seja posterior à data 
de criação do departamento
• CHECK (Dep_data_criacao <= 
Data_inicio_gerente);
31
Consultas de recuperação básicas 
em SQL
• Instrução básica para recuperar informações: 
SELECT
– Não é o mesmo que a operação SELECT da 
álgebra relacional
• Importante salientar
– SQL permite que uma tabela (relação) tenha 
duas ou mais tuplas que são idênticas em todos 
os seus valores de atributos
– Uma tabela SQL não é um conjunto de tuplas, 
mas um multiconjunto (também chamado de bag) 
de tuplas
32
A estrutura SELECT-FROM-WHERE
• A forma básica do comando SELECT, às vezes chamada de 
mapeamento ou bloco select-from-where, é composta 
pelas três cláusulas, da seguinte forma:
SELECT <lista atributos>
FROM <lista tabelas>
WHERE <condição>;
–<lista atributos> são os valores a serem recuperados 
pela consulta
–<lista tabelas> nomes de relação exigidos para 
processar a consulta
–<condição> expressão condicional (booleana) que 
identifica as tuplas a serem recuperadas
33
A estrutura SELECT-FROM-WHERE
• Operadores básicos de comparação lógicos
– =, <, <=, >, >= e <>
• Exemplo:
SELECT Datanasc, Endereco
FROM FUNCIONARIO
WHERE Pnome=‘João’ AND Minicial=‘B’ 
AND Unome=‘Silva’;
– Esta consulta seleciona as tuplas individuais que 
satisfazem a condição da cláusula WHERE, depois 
projeta o resultado nos atributos Datanasc e 
Endereco
34
A estrutura SELECT-FROM-WHERE
• A cláusula SELECT da SQL especifica os 
atributos cujos valores devem ser 
recuperados, chamados de atributos de 
projeção
• A cláusula WHERE especifica a condição 
booleana que deve ser verdadeira para 
qualquer tupla recuperada, chamada de 
condição de seleção
35
36
SELECT Datanasc, Endereco
FROM FUNCIONARIO
WHERE Pnome=‘João’ AND Minicial=‘B’ AND Unome=‘Silva’;
A estrutura SELECT-FROM-WHERE
• Podemos pensar em uma variável de tupla implícita na 
consulta SQL variando ou repetindo sobre cada tupla 
individual na tabela FUNCIONARIO e avaliando a condição 
na cláusula WHERE
• Somente tuplas que satisfazem a condição são selecionadas
SELECT Pnome, Unome, Endereco
FROM FUNCIONARIO, DEPARTAMENTO
WHERE Dnome=‘Pesquisa’ AND Dnumero = Dnr;
• Dnome=‘Pesquisa’ é uma condição de seleção
• Dnumero = Dnr é uma condição de junção
–Combina duas tuplas (uma de DEPARTAMENTO e uma de 
FUNCIONARIO, sempre que os valores forem iguais)
37
38
SELECT Pnome, Unome, Endereco
FROM FUNCIONARIO, DEPARTAMENTO
WHERE Dnome=‘Pesquisa’ AND Dnumero = Dnr;
A estrutura SELECT-FROM-WHERE
• Uma consulta que envolve apenas condições de seleção e 
junção mais atributos de projeção é conhecida como uma 
consulta seleção-projeção-junção
• Exemplo:
SELECT Projnumero, Dnum, Unome, Endereco, Datanasc
FROM PROJETO, DEPARTAMENTO, FUNCIONARIO
WHERE Dnum=Dnumero AND Cpf_gerente=Cpf AND 
Projlocal=‘Mauá’;
–Dnum=Dnumero relaciona uma tupla de projeto a sua tupla de 
departamento que o controla
–Cpf_gerente=Cpf relaciona o departamento a seu gerente
• Cada tupla no resultado será uma combinação de um 
projeto, um departamento e um funcionário, que satisfaz as 
condições de junção
39
40
SELECT Projnumero, Dnum, Unome, Endereco, Datanasc
FROM PROJETO, DEPARTAMENTO, FUNCIONARIO
WHERE Dnum=Dnumero AND Cpf_gerente=Cpf AND 
Projlocal=‘Mauá’;
Nomes de atributos ambíguos, 
renomeação e variáveis de tupla
• O mesmo nome pode ser usado para dois ou mais 
atributos, desde que estejam em relações diferentes
• É preciso qualificar o nome do atributo com o nome 
da relação para evitar ambiguidade através de um 
prefixo, separando o nome da relação (ou um 
apelido) do nome do atributo por um ponto
– Exemplo: Atributos de mesmo nome e relações diferentes
SELECT Pnome, FUNCIONARIO.Nome, Endereco
FROM FUNCIONARIO, DEPARTAMENTO
WHERE DEPARTAMENTO.Nome=‘Pesquisa’ AND 
DEPARTAMENTO.Dnumero=FUNCIONARIO.Dnumero;
41
Nomes de atributos ambíguos, 
renomeação e variáveis de tupla
• Exemplo: Para cada funcionário, recupere 
o primeiro e o último nome do funcionário 
e o primeiro e o último nome de seu 
supervisor imediato
SELECT F.Pnome, F.Unome, S.Pnome, S.Unome
FROM FUNCIONARIO AS F, FUNCIONARIO AS S
WHERE F.Cpf_supervisor=S.CPF;
42
43
Nomes de atributos ambíguos, 
renomeação e variáveis de tupla
• A ambiguidade também surge no caso de consultas 
que se referem à mesma relação duas vezes
SELECT F.Pnome, F.Unome, S.Pnome, S.Unome
FROM FUNCIONARIO AS F, FUNCIONARIO AS S
WHERE F.Cpf_supervisor=S.Cpf;
• F e S são variáveis de tupla ou apelidos para 
FUNCIONARIO
– Podemos pensar F e S como duas cópias diferentes de 
FUNCIONARIO, sendo F os funcionários e S os 
supervisores
• Um apelido pode vir após a palavra-chave AS ou vir 
diretamente após o nome da relação, na cláusula 
FROM
– Exemplo: FUNCIONARIO F, FUNCIONARIO S
44
Nomes de atributos ambíguos, 
renomeação e variáveis de tupla
• Também é possível renomear os atributos 
da relação
– Exemplo: FROM FUNCIONARIO AS F(Pn, 
Mi, Un, Cpf, Dn, End, Sexo, Sal, 
Scpf, Dnr)
– Pn torna-se apelido para Pnome
– Mi torna-se apelido para Minicial
– Un torna-se apelido para Unome
• Essa prática é recomendada, pois resulta 
em consultas mais fáceis de compreender
45
Cláusula WHERE não especificada e 
uso do asterisco
• A falta de uma cláusula WHERE indica que não 
há condições sobre a seleção de tuplas
• Logo, todas as tuplas da relação especificada na 
cláusula FROM se qualificam e são selecionadas 
para o resultado da consulta
• Se mais de uma relação for especificada na 
cláusula FROM e não houver uma cláusula 
WHERE, então o produto cartesiano (todas as 
combinações de tuplas possíveis) dessas 
relações será selecionado
46
Cláusula WHERE não especificada e 
uso do asterisco
• A consulta a seguir seleciona todos os 
Cpfs de FUNCIONARIO
SELECT Cpf
FROM FUNCIONARIO;
47
Cláusula WHERE não especificada e 
uso do asterisco
• A consulta a seguir seleciona todas as 
combinações de um Cpf de FUNCIONARIO e 
um Dnome de DEPARTAMENTO, 
independentemente de o funcionário trabalhar 
ou não parao departamento
SELECT Cpf, Dnome
FROM FUNCIONARIO, DEPARTAMENTO;
• Essa operação é um produto cartesiano
• Se especificarmos todos os atributos de 
FUNCIONARIO e DEPARTAMENTO, obteremos o 
produto cartesiano real (exceto pela 
eliminação de duplicatas, se houver)
Cláusula WHERE não especificada e 
uso do asterisco
• É extremamente importante especificar cada condição 
de seleção e junção na cláusula WHERE
• Para recuperar todos os valores de um atributo das tuplas 
selecionadas basta especificar um asterisco (*), que significa todos 
os atributos
• Exemplo:
SELECT *
FROM FUNCIONARIO
WHERE Dnr = 5;
48
49
Cláusula WHERE não especificada e 
uso do asterisco
• A seguinte consulta recupera todos os 
atributos de um FUNCIONARIO e os 
atributos do DEPARTAMENTO em que ele 
ou ela trabalha para todo funcionário no 
departamento ‘Pesquisa’
SELECT *
FROM FUNCIONARIO, DEPARTAMENTO
WHERE Dnome=‘Pesquisa’ AND 
Dnr=Dnumero;
50
Cláusula WHERE não especificada e 
uso do asterisco
• Já a seguinte consulta especifica um 
produto cartesiano das relações 
FUNCIONARIO e DEPARTAMENTO
SELECT *
FROM FUNCIONARIO, DEPARTAMENTO;
51
Tabelas como conjuntos em SQL
• SQL não elimina automaticamente tuplas 
duplicadas nos resultados das consultas porque
– A eliminação de duplicatas é dispendiosa (primeiro é 
necessário classificar para depois eliminar)
– O usuário pode querer ver as tuplas duplicadas no 
resultado de uma consulta
– Quando uma função agregada (ver Seção 5.1.7 do 
livro de Elmasri e Navathe, 6ª. ed.) é aplicada às 
tuplas, na maioria dos casos não queremos eliminar 
duplicatas
• Embora é recomendado que toda tabela SQL 
tenha uma chave, pode ser que ela não tenha
52
Tabelas como conjuntos em SQL
• Se quisermos eliminar tuplas duplicadas do 
resultado de uma consulta SQL, usamos a 
palavra-chave DISTINCT na cláusula 
SELECT
– Somente tuplas distintas
• O SELECT DISTINCT elimina duplicatas 
enquanto usar o SELECT ALL não elimina 
(quando não especificamos nenhum dos 
dois, é o mesmo que usar o SELECT ALL)
53
Tabelas como conjuntos em SQL
• Se quisermos 
recuperar o salário 
de cada funcionário 
e, caso vários 
funcionários tiverem 
o mesmo salário, 
esse valor aparecerá 
muitas vezes
SELECT ALL Salario
FROM FUNCIONARIO;
54
Tabelas como conjuntos em SQL
• Se estivermos 
interessados apenas 
em valores de salário 
distintos, 
independentemente de 
quantos funcionários 
ganham esse salário 
SELECT DISTINCT 
Salario
FROM FUNCIONARIO;
55
Tabelas como conjuntos em SQL
• A SQL incorporou algumas operações de conjunto 
da teoria de conjuntos da matemática
– União de conjuntos: UNION
– Diferença de conjunto: EXCEPT
– Interseção de conjunto: INTERSECT
• Tuplas duplicadas são eliminadas do resultado
• É preciso garantir que as duas relações da 
operação tenham os mesmos atributos e que 
esses apareçam na mesma ordem nas duas 
relações
56
Tabelas como conjuntos em SQL
• Listar todos os números de projeto para aqueles que 
envolvam um funcionário cujo último nome é ‘Silva’, seja 
como trabalhador ou como gerente do departamento que 
controla o projeto
(SELECT DISTINCT Projnumero
FROM PROJETO, DEPARTAMENTO, FUNCIONARIO
WHERE Dnum=Dnumero AND Cpf_gerente=Cpf AND 
Unome=‘Silva’)
UNION
(SELECT DISTINCT Projnumero
FROM PROJETO, TRABALHA_EM, FUNCIONARIO
WHERE Projnumero=Prn AND Fcpf=Cpf AND 
Unome=‘Silva’);
57
Tabelas como conjuntos em SQL
a) Duas tabelas R(A) e S(A)
b) R(A) UNION ALL S(A)
c) R(A) EXCEPT ALL S(A)
d) R(A) INTERSECT ALL S(A)
58
Combinação de padrão de subcadeias 
e operadores aritméticos
• Comparação apenas sobre partes de uma 
cadeia de caracteres: LIKE
• Cadeias parciais são especificadas 
usando dois caracteres reservados:
– % substitui o número qualquer de zero ou 
mais caracteres
– _ (sublinhado/underline) substitui um único 
caractere
59
Combinação de padrão de subcadeias 
e operadores aritméticos
• Recuperar todos os funcionários cujo 
endereço esteja em Minas Gerais, MG
SELECT Pnome, Unome
FROM FUNCIONARIO
WHERE Endereco LIKE ‘%Minas Gerais, 
MG%’;
60
Combinação de padrão de subcadeias 
e operadores aritméticos
• Recuperar todos os funcionários que 
nasceram durante a década de 1980
SELECT Pnome, Unome
FROM FUNCIONARIO
WHERE Datanasc LIKE ‘________5_’;
• Aqui, ‘5’ precisa ser o nono caractere, de 
acordo com o nosso formato para data
61
Combinação de padrão de subcadeias 
e operadores aritméticos
• Se for necessário usar o caractere literal 
sublinhado ou %, deve ser precedido por um 
caractere de escape, que é especificado 
após a cadeia usando a palavra-chave 
ESCAPE
– ‘AB\_CD\%EF’ ESCAPE ‘\’
– Representa a cadeia literal ‘AB_CD%’ pois \ é 
especificado como o caractere de escape
• Qualquer caractere não usado na cadeia 
pode ser escolhido como caractere de 
escape
62
Combinação de padrão de subcadeias 
e operadores aritméticos
• Se for necessário usar o caractere literal 
apóstrofo (‘ ’), ele será representado 
como dois apóstrofos consecutivos: (‘‘), 
de modo que não será interpretado como 
o término da cadeia
63
Combinação de padrão de subcadeias 
e operadores aritméticos
• SQL permite o uso de aritmética nas consultas
– Adição: +; Subtração: -; Multiplicação: *; Divisão: /
• Mostrar os salários com aumento de 10 por cento de 
cada funcionário que trabalha no projeto ‘ProdutoX’
SELECT F.Pnome, F.Unome, 1.1*F.Salario AS 
Aumento_salario
FROM FUNCIONARIO AS F, TRABALHA_EM AS T, 
PROJETO AS P
WHERE F.Cpf=T.Fcpf AND T.Pnr=P.Projnumero AND 
P.Projnome=‘ProdutoX’;
64
Combinação de padrão de subcadeias 
e operadores aritméticos
• Para cadeia de caracteres, há o operador de concatenação 
||
• Para tipos data, hora, timestamp e intervalo, os operadores 
incluem incremento (+) e decremento (-)
• Outro operador de comparação é BETWEEN
– Recuperar todos os funcionários no departamento 5 cujo 
salário esteja entre R$ 30.000 e R$ 40.000
SELECT *
FROM FUNCIONARIO
WHERE (Sal BETWEEN 30000 AND 40000) AND Dnr = 
5;
– É equivalente a (Sal >= 30000) AND (Sal <= 
40000)
65
Ordem dos resultados da consulta
• SQL permite que o usuário ordene as tuplas no 
resultado de uma consulta pelos valores de um ou 
mais atributos que aparecem, usando a cláusula 
ORDER BY
– Ordenar alfabeticamente pelo sobrenome, depois pelo 
nome
SELECT D.Dnome, F.Unome, F.Pnome, P.Projnome
FROM DEPARTAMENTO D, FUNCIONARIO F, 
TRABALHA_EM T, PROJETO P
WHERE D.Dnumero=F.Dnr AND F.Cpf=T.Fcpf AND 
T.Pnr=P.Projnumero
ORDER BY D.Dnome, F.Unome, F.Pnome;
66
Ordem dos resultados da consulta
• A ordem padrão está em ordem crescente de 
valores
• Podemos especificar a palavra-chave DESC 
se quisermos ver o resultado em uma ordem 
decrescente de valores
• A palavra-chave ASC pode ser usada para 
especificar a ordem crescente explicitamente
ORDER BY D.Dnome DESC, F.Unome ASC, 
F.Pnome ASC
67
Resumo das consultas de recuperação 
da SQL básica
• Uma consulta simples pode consistir em 
até quatro cláusulas, mas apenas as duas 
primeiras são obrigatórias
– As cláusulas entre colchetes são opcionais
SELECT <lista atributos>
FROM <lista tabelas>
[WHERE <condição>]
[ORDER BY <lista atributos>];
68
Instruções INSERT, DELETE e UPDATE
• Comandos utilizados para modificar o 
Banco de Dados
69
Comando INSERT
• Usado para acrescentar uma única tupla a uma 
relação
• Temos de especificar o nome da relação e uma 
lista de valores para a tupla
– Os valores devem ser listados na mesma ordem em 
que os atributos correspondentes foram 
especificados no comando CREATE TABLE
INSERT INTO FUNCIONARIO
VALUES ( ‘Ricardo’, ‘K’, ‘Marini’,‘65329865388’, ‘30-12-1962’, ‘Rua 
Itapira, 44, Santos, SP’, ‘M’, 37000, 
‘65329865388’, 4 );
70
Comando INSERT
CREATE TABLE FUNCIONARIO
(Pnome VARCHAR(15) NOT NULL, Minicial CHAR, 
Unome VARCHAR(15) NOT NULL, Cpf CHAR(11), 
Datanasc DATE, Endereco VARCHAR(30), Sexo 
CHAR, Salario DECIMAL(10,2), Cpf_supervisor 
CHAR(11) NOT NULL, Dnr INT PRIMARY KEY (Cpf));
INSERT INTO FUNCIONARIO
VALUES(‘Ricardo’, ‘K’, ‘Marini’, ‘65329865388’, 
‘30-12-1962’, ‘Rua Itapira, 44, Santos, SP’, 
‘M’, 37000, ‘65329865388’, 4 );
71
Comando INSERT
• Uma segunda forma da instrução INSERT permite 
que o usuário especifique nomes de atributo 
explícitos que correspondem aos valores 
fornecidos no comando INSERT
– Os valores precisam incluir todos os atributos com a 
especificação NOT NULL e nenhum valor padrão
– Os valores não especificados são definidos com o 
seu valor DEFAULT ou NULL
INSERT INTO FUNCIONARIO (Pnome, Unome, 
Dnr, Cpf)
VALUES (‘Ricardo’, ‘Marini’, 4, 
‘65329865388’);
72
Comando INSERT
• Um SGBD que implementa totalmente a SQL 
deve aceitar e impor todas as restrições de 
integridade que podem ser especificadas na 
DDL
– Por exemplo: Se tentarmos inserir um funcionário 
com código de departamento número 2 e não 
houver nenhum departamento com esse código, 
essa consulta será rejeitada
• De modo semelhante, se nenhum valor é 
fornecido a uma chave primária ou outro 
atributo que seja NOT NULL, essa consulta 
também será rejeitada
73
Comando DELETE
• Remove tuplas em uma relação
• Inclui a cláusula WHERE, semelhante a que é 
usada em uma consulta SQL, para selecionar as 
tuplas a serem excluídas
• A exclusão pode se propagar para as tuplas em 
outras relações se ações de disparo referencial 
forem especificadas nas restrições de integridade 
referencial da DDL
• Uma cláusula WHERE inexistente especifica que 
todas as tuplas na relação deverão ser excluídas, 
porém a tabela permanece no BD, vazia
– DROP TABLE: Comando para remover a tabela
74
Comando DELETE
DELETE FROM FUNCIONARIO
WHERE Unome=‘Braga’;
DELETE FROM FUNCIONARIO
WHERE Cpf=‘12345678966’;
DELETE FROM FUNCIONARIO
WHERE Dnr=5;
DELETE FROM FUNCIONARIO;
75
Comando DELETE
76
Comando UPDATE
• Usado para modificar valores de atributo de 
uma ou mais tuplas selecionadas
• Assim como no DELETE, uma cláusula 
WHERE no comando UPDATE seleciona as 
tuplas a serem modificadas em uma única 
relação
– No entanto, a atualização de uma chave primária 
pode ser propagada para os valores de chave 
estrangeira das tuplas em outras relações se tal 
ação de disparo referencial for especificada nas 
restrições de integridade referencial da DDL
77
Comando UPDATE
• Uma cláusula SET adicional no comando 
UPDATE especifica os atributos a serem 
modificados e seus novos valores
UPDATE PROJETO
SET Projlocal = ‘Santo André’, Dnum = 5
WHERE Projnumero=10;
78
Comando UPDATE
• Várias tuplas podem ser modificadas com 
um único comando UPDATE
UPDATE FUNCIONARIO
SET Salario = Salario * 1.1
WHERE Dnr = 5;
• Para modificar várias relações precisamos 
emitir vários comandos UPDATE
79
Linguagem SQL
• Cada SGBD relacional comercial terá, 
além dos comandos SQL, um conjunto de 
comandos para especificar
– Parâmetros de projeto do BD físico
– Estruturas de arquivo para relações
– Caminhos de acesso para os arquivos
– Índices
• São comandos de linguagem de definição 
de armazenamento (SDL)
80
Bibliografia
• Capítulo 4: Elsmari Ramez; Navathe 
Shamkant B. Sistemas de Banco de 
Dados – Fundamentos e Aplicações. 6 ed. 
Pearson, São Paulo, 2011.

Outros materiais