Você está na página 1de 50

Sistema de Banco de Dados, 5/E

SQL Bsico

Prof.: Eduardo Habib Bechelane Maia

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Captulo 3: SQL
Definio de dados
Estrutura bsica das consultas SQL
Operaes de conjunto
Funes agregadas
Valores nulos
Subconsultas aninhadas
Consultas complexas
Views

Modificao do banco de dados


Relaes juntadas **
BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO SISTEMA DE
BANCO DE DADOS E MODIFICADO PELO PROFESSOR EDUARDO
HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Histria
Linguagem IBM Sequel desenvolvida como parte do projeto System R no
IBM San Jose Research Laboratory
Renomeada para Structured Query Language (SQL)
Padro SQL ANSI e ISO:
SQL-86
SQL-89

SQL-92
SQL:1999 (nome da linguagem se tornou concordante com o Ano 2000!)
SQL:2003

Os sistemas comerciais oferecem a maioria, se no todos, os recursos da


SQL-92, alm de conjuntos de recursos variveis dos ltimos padres e
recursos proprietrios especiais.
Nem todos os exemplos aqui podem funcionar em seu sistema especfico.
BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Linguagem de definio de
dados
Permite a especificao no s de um conjunto de relaes, mas
tambm de informaes sobre cada relao, incluindo:

O esquema para cada relao


O domnio dos valores associados a cada atributo
As restries de integridade

O conjunto dos ndices a serem mantidos para cada relao


As informaes de segurana e autorizao para cada relao
A estrutura de armazenamento fsico de cada relao no disco

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO SISTEMA


DE BANCO DE DADOS E MODIFICADO PELO PROFESSOR
EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Construo de Create Table


Uma relao SQL definida usando o comando create table:

create table r (A1 D1, A2 D2, ..., An Dn,


(restrio-de-integridade1),
...,
(restrio-de-integridadek))
r o nome da relao
cada Ai o nome de um atributo no esquema da relao r

Di o tipo de domnio dos valores no domnio do atributo Ai

Exemplo:

create table agncia


(nome_agncia char(15) not null,
cidade_agncia char(30),
ativo
integer)

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Restries de integridade em Create Table


not null
primary key (A1, ..., An )

Exemplo: Declare nome_agencia como a chave primria para agncia e


certifique-se de que os valores de ativo no sejam negativos.
create table agencia
(nome_agencia char(15),
cidade_agencia char(30),
ativo

integer,

Primary key (nome_agencia));

Declarao de chave primria em um atributo assegura not null


automaticamente na SQL-89 em diante.

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Construes Drop Table e Alter


Table
Sistema de Banco de Dados, 5/E

O comando drop table exclui do banco de dados todas as informaes


sobre a relao removida.
Sintaxe: drop table nome_tabela;

O comando alter table usado para acrescentar atributos a uma relao


existente:
alter table r add A D

onde A o nome do atributo a ser acrescentado relao r e D o domnio de A.

A todas as tuplas na relao atribudo nulo como o valor para o novo


atributo.

Sintaxe:
ALTER TABLE "nome_tabela"
[especificao da alterao];

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Construes Drop Table e


Alter Table
O comando alter table tambm pode ser usado para
descartar atributos de uma relao:
alter table r drop A
onde A o nome de um atributo da relao r

O descarte de atributos no aceito por muitos bancos de dados.


Mysql aceita

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Exemplos de Drop Table e


Alter Table
Vamos exemplificar utilizando o seguinte exemplo:
create table cliente
(primeiro_nome char(50),
ultimo_nome char(50),
endereco char(50),
cidade char(50), pais char(50),
data_nascimento char(50));

Para adicionar a coluna sexo na tabela acima:


ALTER TABLE Cliente ADD sexo char(1);

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Exemplos de Drop Table e


Alter Table
A seguir, queremos renomear endereco" para end_residencia". Assim:
ALTER TABLE Cliente CHANGE endereco end_residencia char(50);

Em seguida, queremos alterar o tipo de dados de


end_residencia" para char(70). Para tal, introduzimos:
ALTER TABLE Cliente MODIFY end_residencia char(70);

Finalmente, para excluir a coluna sexo:


ALTER TABLE Cliente DROP sexo;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Estrutura bsica das consultas


A SQL baseada em operaes de conjunto e relacionais com certas
modificaes e melhorias
Uma componente SQL tpica tem a forma:
select A1, A2, ..., An
from r1, r2, ..., rm
where P

Ai representa um atributo
Ri representa uma relao

P um predicado.
O resultado de uma consulta SQL uma relao.
BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Estrutura bsica de consulta


Para o restante desse mdulo, ser utilizada a base de dados que foi
colocada no Qualidata.
Baixem o arquivo database.sql e executem os comandos SQL contidos nele.

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

A clusula select
A clusula select lista os atributos desejados no resultado de uma
consulta
corresponde operao projeo da lgebra relacional
Exemplo: encontre o nome dos dependentes
SELECT dependent_name FROM bda.dependente;
NOTA: Os nomes SQL no fazem distino entre letras maisculas e
minsculas.

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

A clusula select (cont.)


A SQL permite duplicatas nas relaes bem como nos resultados de
consulta.
Para forar a eliminao de duplicatas, insira a palavra-chave distinct
aps select.
Encontre os nomes de todas as agncias na relao emprstimo e
remova as duplicatas.
SELECT distinct dependent_name FROM bda.dependente;

A palavra-chave all especifica explicitamente que as duplicatas no so


removidas.
SELECT all dependent_name FROM bda.dependente;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

A clusula select (cont.)


Um asterisco na clusula select indica todos os atributos
SELECT * FROM bda.dependente;

A clusula select pode conter expresses aritmticas envolvendo os


operadores +, - , * e / operando em constantes ou atributos de tuplas.
A consulta:
SELECT fname, lname,bdate, salary, salary*1.2 FROM bda.EMPREGADO;
retornar uma relao em que o salrio mostrado com o valor atual armazenado
e o valor multiplicado por 1.2.

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

A clusula where
A clusula where especificam condies que o resultado precisa
satisfazer
Para encontrar todos os salrios superiores a 80.000:
SELECT fname, lname,bdate, salary FROM bda.EMPREGADO where salary>80000;
SELECT fname, lname,bdate, salary FROM bda.EMPREGADO where salary>80000
and salary<90000;
SELECT fname, lname,bdate, salary FROM bda.EMPREGADO where salary>80000 or
salary<50000;

As comparaes podem ser aplicadas aos resultados das expresses


aritmticas.
SELECT fname, lname,bdate, salary FROM bda.EMPREGADO where
salary*1.2>90000;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

A clusula where (cont.)


A SQL inclui um operador de comparao between
Exemplo: SELECT fname, lname,bdate, salary FROM
bda.EMPREGADO where salary between 80000 and 90000;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

A clusula from
A clusula from lista as relaes envolvidas na consulta
Corresponde operao de produto cartesiano da lgebra relacional.
Geralmente utilizado em conjunto com a clusula Where. Exemplos
SELECT * FROM bda.departamento, bda.empregado;
SELECT * FROM bda.departamento, bda.empregado where dnumber=dno;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

A operao de renomeao
A SQL permite renomear relaes e atributos usando a clusula as:
nome-antigo as nome-novo

Exemplo:
Compare o resultado de:
SELECT fname as primeiroNome, lname as ultimoNome, bdate dataNascimento, salary as
salario FROM bda.EMPREGADO where salary between 80000 and 90000;
SELECT fname, lname,bdate, salary FROM bda.EMPREGADO where salary between 80000 and 90000;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Variveis de tupla
As variveis de tupla so definidas na clusula from por meio da
clusula as.
Exemplo:
SELECT * FROM bda.departamento as d, bda.empregado as e where d.dnumber=e.dno;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Operaes de string
A SQL incui um operador de correspondncia de string para comparaes em strings de
caractere. O operao like usa padres que so descritos usando dois caracteres especiais:
Porcentagem (%): O caractere % corresponde a qualquer substring.
Sublinhado (_): O caractere _ corresponde a qualquer caractere.
Encontre os nomes de todos os clientes cujos endereos de rua incluem a substring Atlanta.
SELECT * FROM bda.empregado where address like "%Atlanta%";
Localize o nome Atlanta%
like Atlanta\% escape \

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Ordenao da exibio de
tuplas
Liste em ordem alfabtica todos os dependentes dos empregados da empresa:
SELECT * from BDA.dependente as d, BDA.empregado as e where
d.essn=e.ssn order by dependent_name;
Podemos especificar desc para ordem decrescente ou asc para ordem crescente,
para cada atributo; a ordem crescente o padro.
Exemplo: SELECT * from BDA.dependente as d, BDA.empregado as e where
d.essn=e.ssn order by dependent_name desc;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Operaes em conjunto
Encontre todas as pessoas cadastradas que so dependentes ou empregados:
(select fname from BDA.empregado) union (select dependent_name from bda.dependente);

Encontre todos as as pessoas cujo nome no exista na tabela dependente:


select * from (select fname from BDA.empregado) as emp where fname not in (select dependent_name
from bda.dependente);
Sam e Chris no so listados, porque existem dependents com esse nome.

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Funes agregadas
Essas funes operam no multiconjunto dos valores de uma coluna de
uma relao e retornam um valor

avg: valor mdio


min: valor mnimo
max: valor mximo
sum: soma dos valores
count: nmero de valores

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Funes agregadas (cont.)


Encontre o salrio mdio entre os trabalhadores que ganham mais de
90.000.
select avg(salary) from bda.empregado where salary>90000;

Encontre o menor salrio da empresa:


select min(salary) from bda.empregado;

Encontre o maior salrio da empresa:


select max(salary) from bda.empregado;

Encontre o nmero de tuplas na relao empregado:


select count(*) from bda.empregado;

Encontre o nmero de empregados que recebem mais de 80.000:


select count(*) from bda.empregado where salary >80000;
BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Funes agregadas group by


Encontre o nmero de empregados por departamento.
select dname, count(*) from departamento as d, empregado as e where
d.dnumber=e.dno group by d.dname;

Nota: Os atributos na clusula select fora das funes agregadas precisam


aparecer na lista group by.

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Funes agregadas Clusula having


A clusula Where no pode ser utilizada com funes agregadas.
Para isso, utiliza a clusula Having.
Encontre o nome de todas as agncias onde o saldo mdio maior
que US$ 1200:
select dname, avg(salary) from empregado,departamento where
empregado.dno=departamento.dnumber group by empregado.dno having
avg(salary)>40000;
Nota: Os predicados na clusula having so aplicados aps a formao de
grupos, enquanto os predicados na clusula where so aplicados antes da
formao de grupos.

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Valores nulos
possvel que as tuplas tenham um valor nulo, indicado por nulo, para
algum(ns) de seus atributos
nulo significa um valor desconhecido ou que um valor no existe.
O predicado is null/is not null pode ser usado para verificar a presena de
valores nulos.
Exemplo: Encontre todos empregados que recebem salrio.
select fname, salary from empregado where salary is not null;

Exemplo2: Encontre todos empregados que no recebem salrio.


select fname, salary from empregado where salary is null;

O resultado de qualquer expresso aritmtica envolvendo nulo nulo


Exemplo: 5 + nulo retorna nulo
A expresso Select * from bda.empregado where superssn=null; no retornar
nenhum valor
BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Valores nulos e agregados


Total das quantias de emprstimo
select sum(salary) from bda.empregado;

A instruo acima ignora quantias nulas


O resultado nulo se no houver uma quantia no nula
Todas as operaes agregadas exceto count(*) ignoram tuplas com
valores nulos nos atributos agregados.

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Subconsultas aninhadas
A SQL fornece um mecanismo para aninhar subconsultas.
Uma subconsulta uma expresso select-from-where que aninhada
dentro de outra consulta.
Um uso comum das subconsultas realizar testes para participao de
conjuntos, fazer comparaes de conjuntos e determinar cardinalidade
de conjuntos.

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Consulta de exemplo
Encontre todos os clientes que possuem uma conta e um emprstimo
no banco.
Exemplo fictcio
select * from (select fname,lname,ssn,sex,salary from bda.empregado where
sex="M") as emp where emp.salary>60000;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Comparao de conjuntos
Encontre todos os empregados que possuem salrio maior do que o
salrio de pelo menos um outro empregado cujo endereo em Houston.
select distinct emp1.fname,emp1.lname from bda.empregado as emp1,
bda.empregado as emp2 where emp1.salary>emp2.salary and emp1.address
like "%Houston%";

Mesma consulta usando a clusula > some


select distinct fname, lname,salary,address from bda.empregado where
salary> some (select salary from bda.empregado as emp) and
bda.empregado.address like "%Houston%";

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Definio da clusula some


F <comp> some r t r tal que (F
<comp> t )
Onde <comp> pode ser:

(5 < some

(5 < some

(5 = some
(5 some
(= some) in

0
5
) = verdadeiro
6
)0= falso
5
0
) = verdadeiro
5
0
) = verdadeiro (j que 0 5)
5

leia: 5 < alguma tupla na


relao)

Entretanto, ( some) not in


BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO SISTEMA
DE BANCO DE DADOS E MODIFICADO PELO PROFESSOR
EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Consulta de exemplo
Encontre os nomes dos funcionrios que possuem salrio maior do
que todos os empregados que residem em Houston.
select distinct fname, lname,salary,address from bda.empregado where
salary> all (select salary from bda.empregado as emp where address like
"%Houston%") order by fname;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Definio da clusula all


F <comp> all r t r (F <comp> t)
(5 < all )

(5 < all )

0
5
6
6
10

(5 = all )

(5 all )

4
5
4
6

= falso

= verdadeiro

= falso

= verdadeiro (j que 5 4 e 5 6)

( all) not in
BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Views
Em alguns casos, no desejvel que todos os usurios vejam o modelo
lgico inteiro (ou seja, todas as relaes reais armazenadas no banco de
dados.)

Considere uma pessoa que precisa saber todos os dados do empregado,


mas no pode ter acesso ao salrio.
Uma view fornece um mecanismo para ocultar certos dados da viso de certos usurios.
Qualquer relao que no seja do modelo conceitual mas visvel a um usurio como
uma relao virtual chamada uma view.

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Definio de view
Uma view definida usando o comando create view, que tem a forma
create view v as <expresso de consulta>

onde <expresso de consulta> qualquer expresso de consulta


vlida. O nome da view representado por v.
Uma vez uma view definida, o nome da view pode ser usado para se
referir relao virtual gerada por ela.

Definio de view no o mesmo que criar uma nova relao avaliando


a expresso de consulta.
Em vez disso, uma definio de view causa o salvamento de uma
expresso; a expresso substituda nas consultas usando a view.

Uma view pode ser usada na expresso que define


outra view
BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Consultas de exemplo
Exemplos:
CREATE VIEW v1 AS SELECT fname,lname, ssn, bdate, address AS value FROM empregado;
select * from v1;
CREATE VIEW v2 AS SELECT fname,salary*1.2 AS value FROM empregado;
select * from v2;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Modificao do banco de dados excluso


Exclua todos os empregados que recebem mais de 92000
delete from empregado where salary>92000;
O empregado Bob foi excludo.
Exclua todos os dependentes cuja relao com o empregado seja
Spouse.

delete FROM bda.dependente where relationship = "Spouse";


Clusula where pode ser utilizada da mesma que j utilizamos
anteriormente.

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Modificao do banco de dados insero


Insira um dependente de nome Joo e data de nascimento 1986-12-13 para todos
os empregados
insert into dependente (select ssn, "Joo", "1986-12-13", "Son" from empregado);

A instruo select from where avaliada totalmente antes de quaisquer


dos seus resultados serem inseridos na relao (caso contrrio,
consultas como
insert into tabela1 select * from tabela1 causariam problemas

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Modificao do banco de dados atualizaes


Aumente todos os salrios acima de 80000 em 5 por cento e os demais em 6 por
cento.
Escreva duas instrues update:

update empregado
set salary = salary * 1.05
where salary >= 80000

update empregado
set salary = salary * 1.06
where salary < 80000

A ordem importante
Pode ser feito melhor usando a instruo case (prximo slide)
BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Instruo case para atualizaes condicionais

Mesma consulta de antes: Aumente todos os salrios acima de 80000 em


5 por cento e os demais em 6 por cento.
update empregado set salary= case
when salary>80000 then
salary*1.05
else salary*1.06
end;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Relaes de juno
As operaes de juno pegam como base duas relaes e retornam como resultado outra
relao.
Essas operaes adicionais normalmente so usadas como expresses de subconsulta na
clusula from.
As junes (joins) so ferramentas presentes na maioria dos bancos de dados que suportam
SQL
So usadas quando precisamos recuperar dados de uma ou mais tabelas com base em suas relaes
lgicas.
Desta forma, possvel combinar os registros de tais tabelas de forma a construir um super registro,
que nos permitir exibir relatrios mais elaborados.

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Inner Join
Nas pesquisas com INNER JOIN o resultado trar somente as linhas que
sejam comum nas 2 tabelas, ligadas pelos campos das tabelas em
questo na pesquisa.
SELECT e.fname, d.dname FROM empregado e INNER JOIN
departamento d ON d.dnumber=e.dno;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO
PELO PROFESSOR EDUARDO HABIB BECHELANE

Sistema de Banco de Dados, 5/E

Left Outer Join


Nas pesquisas com LEFT OUTER JOIN o resultado trar todos os
registros que estejam na tabela da esquerda do JOIN (neste caso a
empregado) ao menos 1 vez, mesmo que no tenham registros na
tabela da direita do JOIN (neste caso a dependente) ligadas tabela
da esquerda.
SELECT e.fname, d.dependent_name FROM empregado e LEFT OUTER
JOIN dependente d ON d.essn=e.ssn order by fname;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO SISTEMA


DE BANCO DE DADOS E MODIFICADO PELO PROFESSOR
EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Right Outer Join


Nas pesquisas com Right OUTER JOIN o resultado trar todos os
registros que estejam na tabela da direita do JOIN (neste caso a
dependente) ao menos 1 vez, mesmo que no tenham registros na
tabela da esquerda do JOIN (neste caso a dependente) ligadas
tabela da direita.
SELECT e.fname, d.dependent_name FROM empregado e RIGHT OUTER
JOIN dependente d ON d.essn=e.ssn order by fname;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO
PELO PROFESSOR EDUARDO HABIB BECHELANE

Sistema de Banco de Dados, 5/E

Right Outer Join


Ver diferena para:
SELECT e.fname, d.dependent_name FROM dependente d RIGHT OUTER
JOIN empregado e ON d.essn=e.ssn order by fname;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO SISTEMA


DE BANCO DE DADOS E MODIFICADO PELO PROFESSOR
EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Resumo das Relaes de


juno

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO SISTEMA


DE BANCO DE DADOS E MODIFICADO PELO PROFESSOR
EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Full Outer Join


Nas pesquisas com FULL OUTER JOIN o resultado trar todas os
registros, ao menos 1 vez, que estejam nas 2 tabelas, tanto a da
esquerda do JOIN quanto a da direita do JOIN
No existe FULL Outer Join em Mysql, mas ele pode ser emulado.

SELECT e.fname, e.lname, d.dependent_name FROM empregado e LEFT JOIN


dependente d ON e.ssn = d.essnUNIONSELECT e.fname, e.lname,
d.dependent_name FROM empregado e RIGHT JOIN dependente d ON e.ssn =
d.essn;

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO SISTEMA


DE BANCO DE DADOS E MODIFICADO PELO PROFESSOR
EDUARDO HABIB BECHELANE MAIA

Sistema de Banco de Dados, 5/E

Fim do Captulo 3

BASEADO NOS SLIDES DO CAPTULO 3 DO LIVRO


SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA

Você também pode gostar