sql básico.pdf

50
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

Upload: eduardo-habib

Post on 15-Dec-2015

70 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SQL Básico.pdf

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

Page 2: SQL Básico.pdf

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

Page 3: SQL Básico.pdf

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

Page 4: SQL Básico.pdf

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

Page 5: SQL Básico.pdf

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

Page 6: SQL Básico.pdf

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

Page 7: SQL Básico.pdf

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

Page 8: SQL Básico.pdf

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

Page 9: SQL Básico.pdf

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

Page 10: SQL Básico.pdf

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

Page 11: SQL Básico.pdf

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

Page 12: SQL Básico.pdf

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

Page 13: SQL Básico.pdf

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

Page 14: SQL Básico.pdf

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

Page 15: SQL Básico.pdf

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

Page 16: SQL Básico.pdf

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

Page 17: SQL Básico.pdf

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

Page 18: SQL Básico.pdf

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

Page 19: SQL Básico.pdf

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

Page 20: SQL Básico.pdf

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

Page 21: SQL Básico.pdf

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

Page 22: SQL Básico.pdf

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

Page 23: SQL Básico.pdf

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

Page 24: SQL Básico.pdf

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

Page 25: SQL Básico.pdf

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

Page 26: SQL Básico.pdf

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

Page 27: SQL Básico.pdf

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

Page 28: SQL Básico.pdf

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

Page 29: SQL Básico.pdf

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

Page 30: SQL Básico.pdf

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

Page 31: SQL Básico.pdf

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

Page 32: SQL Básico.pdf

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

Page 33: SQL Básico.pdf

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

Page 34: SQL Básico.pdf

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

Page 35: SQL Básico.pdf

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

Page 36: SQL Básico.pdf

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

Page 37: SQL Básico.pdf

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

Page 38: SQL Básico.pdf

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

Page 39: SQL Básico.pdf

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

Page 40: SQL Básico.pdf

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

Page 41: SQL Básico.pdf

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

Page 42: SQL Básico.pdf

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

Page 43: SQL Básico.pdf

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

Page 44: SQL Básico.pdf

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

Page 45: SQL Básico.pdf

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

Page 46: SQL Básico.pdf

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

Page 47: SQL Básico.pdf

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

Page 48: SQL Básico.pdf

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

Page 49: SQL Básico.pdf

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

Page 50: SQL Básico.pdf

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