View
71
Download
0
Category
Preview:
Citation preview
Sistema de Banco de Dados, 5/E
SQL Básico
Prof.: Eduardo Habib Bechelane Maia
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Capítulo 3: SQL
Definição de dados
Estrutura básica das consultas SQL
Operações de conjunto
Funções agregadas
Valores nulos
Subconsultas aninhadas
Consultas complexas
Views
Modificação do banco de dados
Relações juntadas **
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO SISTEMA DE
BANCO DE DADOS E MODIFICADO PELO PROFESSOR EDUARDO
HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
História
Linguagem IBM Sequel desenvolvida como parte do projeto System R no IBM San Jose Research Laboratory
Renomeada para Structured Query Language (SQL)
Padrão 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 não todos, os recursos da SQL-92, além de conjuntos de recursos variáveis dos últimos padrões e recursos proprietários especiais.
Nem todos os exemplos aqui podem funcionar em seu sistema específico.
BASEADO NOS SLIDES DO CAPÍTULO 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 definição de dados
Permite a especificação não só de um conjunto de relações, mas
também de informações sobre cada relação, incluindo:
O esquema para cada relação
O domínio dos valores associados a cada atributo
As restrições de integridade
O conjunto dos índices a serem mantidos para cada relação
As informações de segurança e autorização para cada relação
A estrutura de armazenamento físico de cada relação no disco
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO SISTEMA
DE BANCO DE DADOS E MODIFICADO PELO PROFESSOR
EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Construção de Create Table
Uma relação SQL é definida usando o comando create table:
◦ create table r (A1 D1, A2 D2, ..., An Dn,(restrição-de-integridade1),...,(restrição-de-integridadek))
r é o nome da relação
cada Ai é o nome de um atributo no esquema da relação r
Di é o tipo de domínio dos valores no domínio do atributo Ai
Exemplo:
◦ create table agência(nome_agência char(15) not null,cidade_agênciachar(30),ativo integer)
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Restrições de integridade em Create Table
not null
primary key (A1, ..., An )
Exemplo: Declare nome_agencia como a chave primária para agência e
certifique-se de que os valores de ativo não sejam negativos.
create table agencia
(nome_agencia char(15),
cidade_agencia char(30),
ativo integer,
Primary key (nome_agencia));
Declaração de chave primária em um atributo assegura not null
automaticamente na SQL-89 em diante.
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/EConstruções Drop Table e AlterTable
O comando drop table exclui do banco de dados todas as informações sobre a relação removida.
Sintaxe: drop table nome_tabela;
O comando alter table é usado para acrescentar atributos a uma relação existente:
alter table r add A D
onde A é o nome do atributo a ser acrescentado à relação r e D é o domínio de A.
A todas as tuplas na relação é atribuído nulo como o valor para o novo atributo.
Sintaxe:
ALTER TABLE "nome_tabela"[especificação da alteração];
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Construções Drop Table e Alter TableO comando alter table também pode ser usado para descartar atributos de uma relação:
alter table r drop A
onde A é o nome de um atributo da relação r
O descarte de atributos não é aceito por muitos bancos de dados.
Mysql aceita
BASEADO NOS SLIDES DO CAPÍTULO 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 TableVamos 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 CAPÍTULO 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 TableA 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 CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Estrutura básica das consultas
A SQL é baseada em operações de conjunto e relacionais com certas modificações e melhorias
Uma componente SQL típica tem a forma:
select A1, A2, ..., Anfrom r1, r2, ..., rmwhere P
Ai representa um atributo
Ri representa uma relação
P é um predicado.
O resultado de uma consulta SQL é uma relação.
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Estrutura básica de consultaPara o restante desse módulo, 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 CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
A cláusula select
A cláusula select lista os atributos desejados no resultado de uma consulta
corresponde à operação projeção da álgebra relacional
Exemplo: encontre o nome dos dependentes SELECT dependent_name FROM bda.dependente;
NOTA: Os nomes SQL não fazem distinção entre letras maiúsculas e minúsculas.
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
A cláusula select (cont.)
A SQL permite duplicatas nas relações bem como nos resultados de consulta.
Para forçar a eliminação de duplicatas, insira a palavra-chave distinctapós select.
Encontre os nomes de todas as agências na relação empréstimo e remova as duplicatas.
SELECT distinct dependent_name FROM bda.dependente;
A palavra-chave all especifica explicitamente que as duplicatas não são removidas.
SELECT all dependent_name FROM bda.dependente;
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
A cláusula select (cont.)Um asterisco na cláusula select indica “todos os atributos”
SELECT * FROM bda.dependente;
A cláusula select pode conter expressões aritméticas 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 relação em que o salário é mostrado com o valor atual armazenado e o valor multiplicado por 1.2.
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
A cláusula whereA cláusula where especificam condições que o resultado precisa
satisfazer
Para encontrar todos os salários 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 comparações podem ser aplicadas aos resultados das expressões aritméticas.
SELECT fname, lname,bdate, salary FROM bda.EMPREGADO where salary*1.2>90000;
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
A cláusula where (cont.)
A SQL inclui um operador de comparação between
Exemplo: SELECT fname, lname,bdate, salary FROM bda.EMPREGADO where salary between 80000 and 90000;
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
A cláusula fromA cláusula from lista as relações envolvidas na consulta
Corresponde à operação de produto cartesiano da álgebra relacional.
Geralmente utilizado em conjunto com a cláusula Where. Exemplos
SELECT * FROM bda.departamento, bda.empregado;
SELECT * FROM bda.departamento, bda.empregado where dnumber=dno;
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
A operação de renomeaçãoA SQL permite renomear relações e atributos usando a cláusula 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 CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Variáveis de tuplaAs variáveis de tupla são definidas na cláusula from por meio da cláusula as.
Exemplo:
SELECT * FROM bda.departamento as d, bda.empregado as e where d.dnumber=e.dno;
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Operações de string
A SQL incui um operador de correspondência de string para comparações em strings de caractere. O operação like usa padrões que são 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 endereços 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 CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Ordenação da exibição de tuplas
Liste em ordem alfabética 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 padrão.
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 CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Operações em conjuntoEncontre todas as pessoas cadastradas que são dependentes ou empregados:
(select fname from BDA.empregado) union (select dependent_name from bda.dependente);
Encontre todos as as pessoas cujo nome não exista na tabela dependente:
select * from (select fname from BDA.empregado) as emp where fname not in (select dependent_namefrom bda.dependente);
Sam e Chris não são listados, porque existem dependents com esse nome.
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Funções agregadasEssas funções operam no multiconjunto dos valores de uma coluna de
uma relação e retornam um valor
◦ avg: valor médiomin: valor mínimomax: valor máximosum: soma dos valorescount: número de valores
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Funções agregadas (cont.)Encontre o salário médio entre os trabalhadores que ganham mais de
90.000.
select avg(salary) from bda.empregado where salary>90000;
Encontre o menor salário da empresa:
select min(salary) from bda.empregado;
Encontre o maior salário da empresa:
select max(salary) from bda.empregado;
Encontre o número de tuplas na relação empregado:
select count(*) from bda.empregado;
Encontre o número de empregados que recebem mais de 80.000:
select count(*) from bda.empregado where salary >80000;
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Funções agregadas – group byEncontre o número 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 cláusula select fora das funções agregadas precisam
aparecer na lista group by.
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Funções agregadas – Cláusula having
A cláusula Where não pode ser utilizada com funções agregadas. Para isso, utiliza a cláusula Having.
Encontre o nome de todas as agências onde o saldo médio é 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 cláusula having são aplicados após a formação de
grupos, enquanto os predicados na cláusula where são aplicados antes da
formação de grupos.
BASEADO NOS SLIDES DO CAPÍTULO 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É possível 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 não existe.
O predicado is null/is not null pode ser usado para verificar a presença de valores nulos.
Exemplo: Encontre todos empregados que recebem salário.
select fname, salary from empregado where salary is not null;
Exemplo2: Encontre todos empregados que não recebem salário.
select fname, salary from empregado where salary is null;
O resultado de qualquer expressão aritmética envolvendo nulo é nulo
Exemplo: 5 + nulo retorna nulo
A expressão Select * from bda.empregado where superssn=null; não retornaránenhum valor
BASEADO NOS SLIDES DO CAPÍTULO 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 agregadosTotal das quantias de empréstimo
select sum(salary) from bda.empregado;
A instrução acima ignora quantias nulas
O resultado é nulo se não houver uma quantia não nula
Todas as operações agregadas exceto count(*) ignoram tuplas com valores nulos nos atributos agregados.
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Subconsultas aninhadasA SQL fornece um mecanismo para aninhar subconsultas.
Uma subconsulta é uma expressão select-from-where que é aninhada dentro de outra consulta.
Um uso comum das subconsultas é realizar testes para participação de conjuntos, fazer comparações de conjuntos e determinar cardinalidade de conjuntos.
BASEADO NOS SLIDES DO CAPÍTULO 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 exemploEncontre todos os clientes que possuem uma conta e um empréstimo no banco.
Exemplo fictício
select * from (select fname,lname,ssn,sex,salary from bda.empregado where
sex="M") as emp where emp.salary>60000;
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Comparação de conjuntosEncontre todos os empregados que possuem salário maior do que o salário de pelo menos um outro empregado cujo endereço é 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 cláusula > 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 CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Definição da cláusula some
F <comp> some r t r tal que (F <comp> t )Onde <comp> pode ser:
(5 < some ) = verdadeiro
(5 < some ) = falso
(5 = some ) = verdadeiro
(5 some ) = verdadeiro (já que 0 5)
(= some) in
Entretanto, ( some) not in
leia: 5 < alguma tupla na
relação)
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO SISTEMA
DE BANCO DE DADOS E MODIFICADO PELO PROFESSOR
EDUARDO HABIB BECHELANE MAIA
056
05
05
05
Sistema de Banco de Dados, 5/E
Consulta de exemploEncontre os nomes dos funcionários que possuem salário 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 CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Definição da cláusula all
F <comp> all r t r (F <comp> t)
(5 < all ) = falso
(5 < all ) = verdadeiro
(5 = all ) = falso
(5 all ) = verdadeiro (já que 5 4 e 5 6)
( all) not in
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
610
45
46
05
6
Sistema de Banco de Dados, 5/E
Views
Em alguns casos, não é desejável que todos os usuários vejam o modelo lógico inteiro (ou seja, todas as relações reais armazenadas no banco de dados.)
Considere uma pessoa que precisa saber todos os dados do empregado, mas não pode ter acesso ao salário.
Uma view fornece um mecanismo para ocultar certos dados da visão de certos usuários.
Qualquer relação que não seja do modelo conceitual mas é visível a um usuário como uma “relação virtual” é chamada uma view.
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Definição de viewUma view é definida usando o comando create view, que tem a forma
◦ create view v as <expressão de consulta>
◦ onde <expressão de consulta> é qualquer expressão de consulta válida. O nome da view é representado por v.
Uma vez uma view é definida, o nome da view pode ser usado para se referir à relação virtual gerada por ela.
Definição de view não é o mesmo que criar uma nova relação avaliando a expressão de consulta.
Em vez disso, uma definição de view causa o salvamento de uma expressão; a expressão é substituída nas consultas usando a view.
Uma view pode ser usada na expressão que define outra view
BASEADO NOS SLIDES DO CAPÍTULO 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 exemploExemplos:◦ 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 CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Modificação do banco de dados – exclusão
Exclua todos os empregados que recebem mais de 92000
delete from empregado where salary>92000;
O empregado Bob foi excluído.
Exclua todos os dependentes cuja relação com o empregado seja Spouse.
delete FROM bda.dependente where relationship = "Spouse";
Cláusula where pode ser utilizada da mesma que já utilizamos
anteriormente.
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Modificação do banco de dados – inserção
Insira um dependente de nome João e data de nascimento “1986-12-13” para todos os empregados
◦ insert into dependente (select ssn, "João", "1986-12-13", "Son" from empregado);
A instrução select from where é avaliada totalmente antes de quaisquer dos seus resultados serem inseridos na relação (caso contrário, consultas como
insert into tabela1 select * from tabela1 causariam problemas
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Modificação do banco de dados – atualizações
Aumente todos os salários acima de 80000 em 5 por cento e os demais em 6 por cento.
Escreva duas instruções 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 instrução case (próximo slide)
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Instrução case para atualizações condicionais
Mesma consulta de antes: Aumente todos os salários 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 CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Relações de junçãoAs operações de junção pegam como base duas relações e retornam como resultado outra relação.
Essas operações adicionais normalmente são usadas como expressões de subconsulta na cláusula from.
As junções (joins) são ferramentas presentes na maioria dos bancos de dados que suportam SQL
São usadas quando precisamos recuperar dados de uma ou mais tabelas com base em suas relações lógicas.
Desta forma, é possível combinar os registros de tais tabelas de forma a construir um “super registro”, que nos permitirá exibir relatórios mais elaborados.
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Sistema de Banco de Dados, 5/E
Inner JoinNas pesquisas com INNER JOIN o resultado trará somente as linhas que sejam comum nas 2 tabelas, ligadas pelos campos das tabelas em questão na pesquisa.
SELECT e.fname, d.dname FROM empregado e INNER JOIN departamento d ON d.dnumber=e.dno;
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO
PELO PROFESSOR EDUARDO HABIB BECHELANE
MAIA
Sistema de Banco de Dados, 5/E
Left Outer JoinNas 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 não 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 CAPÍTULO 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 JoinNas 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 não 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 CAPÍTULO 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 JoinVer diferença 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 CAPÍTULO 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 Relações de junção
BASEADO NOS SLIDES DO CAPÍTULO 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 JoinNas 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◦ Não 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 CAPÍTULO 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 Capítulo 3
BASEADO NOS SLIDES DO CAPÍTULO 3 DO LIVRO
SISTEMA DE BANCO DE DADOS E MODIFICADO PELO
PROFESSOR EDUARDO HABIB BECHELANE MAIA
Recommended