You are on page 1of 148

Tecnologias e Linguagens

para Banco De Dados

1 - Viso Geral do Gerenciamento de


Banco de Dados

Um sistema de banco de dados basicamente um sistema


computadorizado de manuteno de registros

um sistema computadorizado cuja finalidade geral armazenar


informaes e permitir que os usurios busquem e atualizem essas
informaes quando as solicitar.

As informaes em questo podem ser qualquer coisa que tenha algum


significado ao indivduo ou a organizao a que o sistema deve servir, ou
seja, qualquer coisa que seja necessria para auxiliar as atividades desse
indivduo ou dessa organizao.

Observe que existe uma diferena entre os termos dados e informaes.


Dado se refere ao que realmente armazenado no banco de dados e
informao se refere ao significado desses dados para determinado
usurio.

1.1 Sistemas de Banco de Dados


Um sistema de banco de dados envolve quatro componentes
principais: dados, hardware, software e usurios.

1.1 Sistemas de Banco de Dados


Dados

Os dados de um banco de dados esto normalmente integrados e tambm


compartilhados, esses dois aspectos representam uma vantagem
importante dos sistemas de banco de dados.

Monousurio - um sistema em que no mximo um usurio pode acessar


o banco de dados em determinado momento

Multiusurio - aquele em que muitos usurios podem acessar o banco


de dados ao mesmo tempo.

Um dos objetivos dos sistemas multiusurios que cada usurio se


comporte como se estivesse trabalhando com um sistema monousurio.

Os problemas especiais dos sistemas multiusurios so, principalmente,


problemas internos ao sistema, e no aqueles visveis ao usurio.

1.1 Sistemas de Banco de Dados


Dados

Integrado - quer dizer que o banco de dados pode ser considerado como
a unificao de vrios arquivos, com a eliminao de qualquer redundncia
parcial ou total entre esses arquivos.

Por exemplo, determinado banco de dados poderia conter um arquivo


FUNCIONARIO, oferecendo nomes, endereos, departamentos, salrios e
outros itens sobre os funcionrios, e um arquivo MATRICULA,
representando o recrutamento dos funcionrios em cursos de treinamento.

Agora suponha que para executar o processo de administrao do curso de


treinamento, seja necessrio saber o departamento de cada aluno
matriculado. Ento, devido a integrao dos dados, no necessrio incluir
essa informao de forma redundante no arquivo MATRICULA, pois ela
sempre poder ser obtida do arquivo FUNCIONARIO.

1.1 Sistemas de Banco de Dados


Dados

Compartilhado - diferentes usurios podem ter acesso aos


mesmos dados, possivelmente ao mesmo tempo (acesso
concorrente).

Tal compartilhamento concorrente ou no, em parte uma


conseqncia do fato de que o banco de dados integrado. No
exemplo anterior, a informao do departamento no arquivo
FUNCIONARIO geralmente seria compartilhada pelos usurios no
departamento pessoal e pelos usurios no departamento de
treinamento.

Outra conseqncia do banco de dados ser integrado e


compartilhado, que, determinado banco de dados ser percebido
por diferentes usurios de diferentes maneiras.

1.1 Sistemas de Banco de Dados


Hardware

Os componentes de hardware do sistema consistem em:


Volumes de armazenamento secundrio, normalmente discos
magnticos, que so usados para manter os dados
armazenados, juntamente com os dispositivos de E/S
associados, controladores de dispositivos e assim por diante.
Processadores de hardware e memria principal associada, que
so usados para dar suporte execuo do software do
sistema de banco de dados.

1.1 Sistemas de Banco de Dados


Software

Entre o banco de dados fsico, ou seja os dados fisicamente armazenados,


e os usurios do sistema existe uma camada de software conhecida como:
Gerenciador de Banco de Dados ou;
Servidor de Banco de Dados;
ou mais freqentemente como Sistema de Gerenciamento de Banco de
Dados (SGBD).

Todas as requisies de acesso ao banco de dados so tratadas pelo


SGBD.

Uma funo geral fornecida pelo SGBD , portanto, a de isolar os usurios


do banco de dados dos detalhes no nvel de hardware.

Em outras palavras, o SGBD oferece aos usurios uma viso de banco de


dados elevada acima do nvel de hardware, e ele admite operaes do
usurio que so expressas em termos dessa viso de nvel mais elevado.

1.1 Sistemas de Banco de Dados


Usurios

Quatro classes gerais de usurios so:

Programadores de aplicaes responsveis pela escrita de programas de


aplicaes de banco de dados em alguma linguagem de programao.
Esses programas acessam o banco de dados emitindo a requisio
apropriada (normalmente, uma instruo SQL) ao SGBD.

Usurios finais acessam o banco de dados interativamente, por exemplo


por meio de uma aplicao.

O grupo de administrao de dados (AD) responsvel pelo


gerenciamento e controle das informaes essenciais da empresa.

Administrador de Banco de Dados (DBA) - O DBA responsvel por


autorizar acesso base de dados e coordenar e monitorar seu uso. O DBA
responsvel por problemas, tais como, quebra de segurana ou baixo
desempenho. Assim eles formam a equipe responsvel pela
implementao das decises do AD.

Base de Dados x Processamento


Tradicional de Arquivos
Processamento Tradicional de
Arquivos

Base de Dados

Vantagens da
base de Dados

Definio dos dados parte do


cdigo de programas de
aplicao

Meta Dados

eliminao de
redundncias

Dependncia entre aplicao


especfica e dados

Capaz de permitir diversas


aplicaes

eliminao de
redundncias

Independncia entre dados


e programas

facilidade de
manuteno

Representao de dados ao
nvel fsico

Representao conceitual
atravs de dados e
programas

facilidade de
manuteno

Cada viso implementada por


mdulos especficos

Permite mltiplas vises

facilidade de
consultas

1.2 Banco de Dados

comum referir-se aos dados de um banco de dados como


persistente, com isso queremos sugerir que os dados desse banco
de dados diferem em espcie de outros dados mais efmeros,
como dados de entrada, dados de sada, filas de trabalho,
instrues SQL, resultados intermedirios e, de modo geral,
qualquer dado que tenha natureza transitria.

Dizemos que os dados do banco de dados persistem porque, uma


vez aceitos pelo SGBD para entrada no banco de dados, eles s
podem ser removidos do banco de dados mais tarde por alguma
requisio explicita ao SGBD.

Assim, um banco de dados uma coleo de dados persistentes,


usadas pelos sistemas de aplicao de uma determinada empresa.

1.2 Banco de Dados


Entidades e Relacionamentos

Vamos considerar agora o exemplo de uma fbrica


FazTudo.LTDA, onde a empresa desejar registrar informaes
sobre os projetos em andamento;

As peas usadas nesses projetos; os fornecedores que esto


contratados para fornecer essas peas, os empregados que
trabalham nesses projetos, e assim por diante.

Assim, projetos, peas, fornecedores constituem as entidades


bsicas sobre as quais a FazTudo precisa registrar informaes.

Alm das entidades bsicas propriamente ditas, haver tambm


relacionamentos interligando essas entidades bsicas.

1.2 Banco de Dados


Entidades e Relacionamentos

1.2 Banco de Dados


Entidades e Relacionamentos
Observe que esses relacionamentos so todos bidirecionais, ou seja,
eles podem ser percorridos em qualquer sentido. Por exemplo, dado
um fornecedor, obter as peas fornecidas por esse fornecedor, ou,
dado uma pea obter os fornecedores que fornecem essa pea.
O ponto significativo a respeito desse relacionamento que eles
fazem parte dos dados tanto quanto as entidades bsicas. Portanto
eles devem ser representados no banco de dados assim como as
entidades bsicas.
Podemos observar que um relacionamento pode ser considerado
uma entidade em si, se tornarmos como nossa definio de entidade
qualquer objeto sobre o qual queremos registrar informaes, ento
um relacionamento certamente se encaixar na definio.

1.2 Banco de Dados


Vantagens da abordagem de Banco de Dados

Os dados podem ser compartilhados;

A redundncia pode ser reduzida;

A inconsistncia pode ser evitada;

O suporte a transaes pode ser fornecido;

A integridade pode ser mantida;

A segurana pode ser reforada;

Os padres podem ser impostos.

1.3 Modelos de Dados


Modelo Hierrquico

O modelo hierrquico foi o primeiro a ser reconhecido como um


modelo de dados. Seu desenvolvimento somente foi possvel
devido consolidao dos discos de armazenamento
endereveis, pois esses discos possibilitaram a explorao de sua
estrutura de endereamento fsico para viabilizar a representao
hierrquica das informaes.

Nesse modelo de dados, os dados so estruturados em hierarquias


ou rvores. Os ns das hierarquias contm ocorrncias de
registros, onde cada registro uma coleo de campos (atributos),
cada um contendo apenas uma informao. O registro da
hierarquia que precede a outros o registro-pai, os outros so
chamados de registros-filhos.

Uma ligao uma associao entre dois registros.

1.3 Modelos de Dados


Modelo Hierrquico
Os dados organizados segundo este modelo podem ser acessados
segundo uma seqncia hierrquica com uma navegao do topo
para as folhas e da esquerda para a direita.
Um registro pode estar associado a vrios registros diferentes,
desde que seja replicado. A replicao possui duas grandes
desvantagens: pode causar inconsistncia de dados quando houver
atualizao e o desperdcio de espao inevitvel.
O sistema comercial mais divulgado no modelo hierrquico foi o
Information Management System da IBM Corp(IMS).
Grande parte das restries e consistncias de dados estava
contida dentro dos programas escritos para as aplicaes.
Era necessrio escrever programas na ordem para acessar o banco
de dados.

1.3 Modelos de Dados


Modelo Hierrquico

1.3 Modelos de Dados


Modelo em Rede

O modelo em redes surgiu como uma extenso ao modelo


hierrquico, eliminando o conceito de hierarquia e permitindo que
um mesmo registro estivesse envolvido em vrias associaes.

O gerenciador Data Base Task Group (DBTG) da CODASYL


(Committee on Data Systems and Languages) estabeleceu uma
norma para este modelo de banco de dados, com linguagem
prpria para definio e manipulao de dados.

Ao contrrio do Modelo Hierrquico, em que qualquer acesso aos


dados passa pela raiz, o modelo em rede possibilita acesso a
qualquer n da rede sem passar pela raiz. No Modelo em Rede o
sistema comercial mais divulgado o CAIDMS da Computer
Associates.

1.3 Modelos de Dados


Modelo em Rede

1.3 Modelos de Dados


Modelo Relacional

O modelo relacional apareceu devido s seguintes necessidades:


aumentar a independncia de dados nos sistemas gerenciadores de
banco de dados;
prover um conjunto de funes apoiadas em lgebra relacional para
armazenamento e recuperao de dados;

O Modelo relacional revelou-se ser o mais flexvel e adequado ao


solucionar os vrios problemas que se colocam no nvel da
concepo e implementao da base de dados.

A estrutura fundamental do modelo relacional a relao (tabela).

Uma relao constituda por um ou mais atributos (campos) que


traduzem o tipo de dados a armazenar. Cada instncia do esquema
(linha) chamada de tupla (registro).

1.3 Modelos de Dados


Modelo Relacional
O modelo relacional no tem caminhos pr-definidos para se fazer
acesso aos dados como nos modelos que o precederam.
O modelo relacional implementa estruturas de dados organizadas
em relaes.
Porm, para trabalhar com essas tabelas, algumas restries
precisaram ser impostas para evitar aspectos indesejveis, como:
Repetio de informao;
Incapacidade de representar parte da informao;
e perda de informao.

Essas restries so: integridade referencial, chaves e integridade


de junes de relaes.

1.3 Modelos de Dados


Modelo Relacional

1.3 Modelos de Dados


Modelo Orientado a Objetos
Os bancos de dados orientados a objeto comearam a se tornar
comercialmente viveis em meados de 1980.
A motivao para seu surgimento est em funo dos limites de
armazenamento e representao semntica impostas no modelo
relacional. Alguns exemplos so os sistemas de informaes
geogrficas (SIG), os sistemas CAD e CAM, que so mais facilmente
construdos usando tipos complexos de dados.
A habilidade para criar os tipos de dados necessrios uma
caracterstica das linguagens de programao orientadas a objetos.
Contudo, estes sistemas necessitam guardar representaes das
estruturas de dados que utilizam no armazenamento permanente.
A estrutura padro para os bancos de dados orientados a objetos foi
feita pelo Object Database Management Group (ODMG).

1.3 Modelos de Dados


Modelo Orientado a Objetos
Quando os bancos de dados orientados a objetos foram
introduzidos, algumas das falhas perceptveis do modelo relacional
pareceram ter sido solucionadas com esta tecnologia e acreditavase que tais bancos de dados ganhariam grande parcela do mercado.
Hoje, porm, acredita-se que os Bancos de Dados Orientados a
Objetos sero usados em aplicaes especializadas, enquanto os
sistemas relacionais continuaro a sustentar os negcios
tradicionais, onde as estruturas de dados baseadas em relaes so
suficientes.
O diagrama de classes UML serve geralmente como o esquema
para o modelo de dados orientado a objetos.

1.3 Modelos de Dados


Modelo Orientado a Objetos

2. Arquitetura de Sistemas de Banco de


Dados

A arquitetura mais difundida na literatura a Arquitetura Three-Schema


(tambm conhecida como arquitetura ANSI/SPARC), proposta por Tsichritzis
& Klug em 1978.

A meta desta arquitetura separar as aplicaes de usurios da base de


dados fsica. Nesta arquitetura, esquemas podem ser definidos em trs
nveis:
O nvel interno tem um esquema interno que descreve a estrutura de
armazenamento fsico da base de dados. O esquema interno usa um
modelo de dados fsico e descreve todos os detalhes de armazenamento
de dados e caminhos de acesso base de dados;
O nvel conceitual tem um esquema conceitual que descreve a estrutura
de toda a base de dados. O esquema conceitual uma descrio global
da base de dados, que omite detalhes da estrutura de armazenamento
fsico e se concentra na descrio de entidades, tipos de dados,
relacionamentos e restries.

2. Arquitetura de Sistemas de Banco de


Dados
A arquitetura mais difundida na literatura a Arquitetura ThreeSchema (tambm conhecida como arquitetura ANSI/SPARC),
proposta por Tsichritzis & Klug em 1978.
A meta desta arquitetura separar as aplicaes de usurios da
base de dados fsica. Nesta arquitetura, esquemas podem ser
definidos em trs nveis:
O nvel externo ou viso possui esquemas externos ou vises de
usurios. Cada esquema externo descreve a viso da base de
dados de um grupo de usurios da base de dados. Cada viso
descreve, tipicamente, a parte da base de dados que um
particular grupo de usurios est interessado e esconde deste o
restante da base de dados.

2. Arquitetura de Sistemas de Banco de


Dados

2.1 Linguagens de Base de Dados


DML - Linguagem de Manipulao de Dados - (Data Manipulation
Language - Linguagem de Manipulao de Dados). A DML um
subconjunto da linguagem usada para selecionar, inserir, atualizar e
apagar dados.
SELECT o mais usado do DML, comanda e permite ao usurio
especificar uma query como uma descrio do resultado desejado. A
questo no especifica como os resultados deveriam ser localizados.
INSERT usada para somar uma fila (formalmente uma tupla) a uma
tabela existente.
UPDATE para mudar os valores de dados em uma fila de tabela
existente.
DELETE permite remover filas existentes de uma tabela.

2.1 Linguagens de Base de Dados


DDL - Linguagem de Definio de Dados - (Data Definition Language
- Linguagem de Definio de Dados). Uma DDL permite ao usurio
definir tabelas novas e elementos associados. A maioria dos bancos
de dados de SQL comerciais tem extenses proprietrias no DDL.
Os comandos bsicos da DDL so:
CREATE cria um objeto (uma Tabela, por exemplo) dentro da base de
dados.
DROP apaga um objeto do banco de dados.
Alguns sistemas de banco de dados usam o comando ALTER, que
permite ao usurio alterar um objeto, por exemplo, adicionando uma
coluna a uma tabela existente.

2.1 Linguagens de Base de Dados


DDL - Linguagem de Definio de Dados - (Data Definition Language
- Linguagem de Definio de Dados).
Outros comandos DDL:
ALTER TABLE
CREATE INDEX
ALTER INDEX
DROP INDEX
CREATE VIEW
DROP VIEW

2.1 Linguagens de Base de Dados


DDL - Linguagem de Definio de Dados - (Data Definition Language
- Linguagem de Definio de Dados).
Outros comandos DDL:
ALTER TABLE
CREATE INDEX
ALTER INDEX
DROP INDEX
CREATE VIEW
DROP VIEW

2.2 Mapeamentos
Alm dos trs nveis a arquitetura envolve ainda certos
mapeamentos, um mapeamento conceitual/interno e vrios
mapeamentos externos /conceituais.
O mapeamento conceitual/interno define a correspondncia entre
viso conceitual e o banco de dados armazenado; ele especifica o
modo como os registros e campos conceituais so representados no
nvel interno. Se a estrutura do banco de dados armazenado for
alterada o mapeamento conceitual interno ter de ser alterado.
O mapeamento externo/conceitual define a correspondncia entre
uma viso externa especfica e a viso conceitual. Por exemplo, os
campos podem ter diferentes tipos de dados, os nomes de campos e
registros podem ser alterados, vrios campos conceituais podem ser
combinados em um nico campo externo, e assim por diante.

2.3 O sistema de Gerenciamento de Banco


de Dados (SGBD)
O SGBD o software que trata de todo o acesso ao banco de
dados.
Conceitualmente o que ocorre :
Um usurio faz um pedido de acesso usando uma determinada sublinguagem de dados (geralmente SQL).
O SGBD intercepta o pedido e o analisa.
O SGBD inspeciona o esquema externo para esse usurio, o
mapeamento externo conceitual correspondente, o esquema conceitual,
o mapeamento conceitual/interno e a definio do banco de dados
armazenado.
O SGBD executa as operaes necessrias sobre o banco de dados
armazenado.

2.3 O sistema de Gerenciamento de Banco


de Dados (SGBD)

2.3 O sistema de Gerenciamento de Banco


de Dados (SGBD)

Definio de dados o SGBD deve ser capaz de aceitar definies de dados em


formato fonte e converte-los para o formato objeto apropriado. Em outras palavras o
SGBD deve incluir componentes de processador de DDL ou compilador de DDL para
cada uma das diversas linguagens de definio de dados (DDL).

O SGBD tambm dever entender as definies de DDL, no sentido de que, ele


entende que os registros externos EMPREGADO incluem um campo SALRIO, ele
deve ento ser capaz de usar esse conhecimento para analisar e responder a pedidos
de manipulao de dados (por exemplo, obtenha todos os empregados com salrio
<R$50.000,00);

Manipulao de dados O SGBD deve ser capaz de lidar com requisies do usurio
para buscar, atualizar ou excluir dados existentes no banco de dados, ou para
acrescentar novos dados ao banco de dados. Em outras palavras, o SGBD deve
incluir um componente processador de DML ou compilador de DML para lidar com a
linguagem de manipulao de dados (DML).

Otimizao e execuo as requisies de DML, devem ser processadas pelo


componente otimizador, cuja finalidade determinar um modo eficiente de
implementar a requisio.

2.3 O sistema de Gerenciamento de Banco


de Dados (SGBD)

Segurana e integridade de dados o SGBD, ou algum subsistema


chamado pelo SGBD, deve monitorar requisies de usurios e rejeitar toda
tentativa de violar as restries de segurana e integridade definidas pelo
DBA.

Recuperao de dados e concorrncia o SGBD ou, mais provavelmente,


algum outro componente de software relacionado, em geral chamado
gerenciador de transaes ou monitor de TP (transaction processing), deve
impor certos controles de recuperao e concorrncia.

Dicionrio de dados o SGBD deve fornecer uma funo de dicionrio de


dados, que pode ser considerado um banco de dados isolado, que contem
dados sobre os dados (tambm chamados de metadados ou descritores), ou
seja, definies de outros objetos do sistema. Um dicionrio completo
tambm incluir muitas informaes adicionais mostrando, por exemplo, os
programas que utilizam determinadas partes do banco de dados, os usurios
que exigem certos relatrios, e assim por diante.

Desempenho o SGBD deve realizar todas as funes identificadas


anteriormente de forma to eficiente quanto possvel.

2.4. Arquitetura Cliente Servidor

Falamos dos sistemas de banco de dados sob o ponto de vista da chamada


arquitetura ANSI/SPARC. O objetivo geral desses sistemas fornecer
suporte ao desenvolvimento e execuo de aplicaes de banco de dados.

Sob um ponto de vista de mais alto nvel, um sistema desse tipo pode ser
considerado como tendo uma estrutura muito simples em duas partes,
consistindo em um servidor (back end) e um conjunto de clientes (front
ends):

O servidor o prprio SGBD. Ele admite todas as funes bsicas de


SGBDs definio de dados, manipulao de dados, segurana e
integridade de dados. Assim, o termo servidor nesse contexto to somente
outro nome para SGBD.

Os clientes so as diversas aplicaes executadas em cima do SGBD


tanto aplicaes escritas por usurios quanto aplicaes internas (aplicaes
fornecidas pelo fabricante do SGBD ou por terceiros). No que se refere ao
servidor, claro que no existe diferena alguma entre aplicaes escritas
pelo usurio e aplicaes internas.

2.4. Arquitetura Cliente Servidor

3. Modelagem de Dados Usando o Modelo


Entidade - Relacionamento (MER)
O MER um modelo de dados conceitual de alto-nvel,
ou seja, seus conceitos foram projetados para serem
compreensveis a usurios, descartando detalhes de
como os dados so armazenados.
Atualmente, o MER usado principalmente durante o
processo de projeto da base de dados.
Existem expectativas para que uma classe de SGBDs
baseados diretamente no MER esteja disponvel no
futuro.

3.1 Modelo de Dados Conceitual de AltoNvel e Projeto de Base Dados

3.2 Um Exemplo

Neste exemplo, descrita uma base de dados COMPANHIA que ser utilizada para ilustrar o
processo de projeto de base de dados. So listados os requisitos da base de dados e criado o seu
esquema conceitual passo-a-passo ao mesmo tempo em que so introduzidos os conceitos de
modelagem usando o MER.

A base de dados COMPANHIA armazena os dados dos empregados, departamentos e projetos.


Supe-se que aps a Obteno e Anlise dos Requisitos, os projetistas da base de dados
produziram a seguinte descrio do mini-mundo-parte da companhia a ser representada na base
de dados:

A companhia organizada em departamentos. Cada departamento tem um nome, um nmero e


um empregado que gerencia o departamento. Armazena-se a data de incio que o empregado
comeou a gerenciar o departamento. Um departamento pode ter diversas localizaes;

Um departamento controla inmeros projetos, sendo que cada um tem um nome, um nmero e
uma localizao;

Do empregado armazena-se o nome, o nmero do seguro social, endereo, salrio, sexo e data
de nascimento. Todo empregado associado a um departamento, mas pode trabalhar em
diversos projetos, que no so necessariamente controlados pelo mesmo departamento.
Armazena-se, tambm, o nmero de horas que o empregado trabalha em cada projeto. Mantmse, ainda, a indicao do supervisor direto de cada projeto;

Os dependentes de cada empregado so armazenados para propsito de garantir os benefcios


do seguro. Para cada dependente ser armazenado o nome, sexo, data de nascimento e o
relacionamento com o empregado.

3.2 Um Exemplo

Neste exemplo, descrita uma base de dados COMPANHIA que ser utilizada para ilustrar o
processo de projeto de base de dados. So listados os requisitos da base de dados e criado o seu
esquema conceitual passo-a-passo ao mesmo tempo em que so introduzidos os conceitos de
modelagem usando o MER.

A base de dados COMPANHIA armazena os dados dos empregados, departamentos e projetos.


Supe-se que aps a Obteno e Anlise dos Requisitos, os projetistas da base de dados
produziram a seguinte descrio do mini-mundo-parte da companhia a ser representada na base
de dados:

A companhia organizada em departamentos. Cada departamento tem um nome, um nmero e


um empregado que gerencia o departamento. Armazena-se a data de incio que o empregado
comeou a gerenciar o departamento. Um departamento pode ter diversas localizaes;

Um departamento controla inmeros projetos, sendo que cada um tem um nome, um nmero e
uma localizao;

Do empregado armazena-se o nome, o nmero do seguro social, endereo, salrio, sexo e data
de nascimento. Todo empregado associado a um departamento, mas pode trabalhar em
diversos projetos, que no so necessariamente controlados pelo mesmo departamento.
Armazena-se, tambm, o nmero de horas que o empregado trabalha em cada projeto. Mantmse, ainda, a indicao do supervisor direto de cada projeto;

Os dependentes de cada empregado so armazenados para propsito de garantir os benefcios


do seguro. Para cada dependente ser armazenado o nome, sexo, data de nascimento e o
relacionamento com o empregado.

3.3 Conceitos do Modelo EntidadeRelacionamento


Entidades e Atributos
O objeto bsico que o MER representa a entidade.
Uma entidade algo do mundo real que possui uma existncia
independente. Uma entidade pode ser um objeto com uma
existncia fsica - uma pessoa, carro ou empregado - ou pode ser
um objeto com existncia conceitual - uma companhia, um trabalho
ou um curso universitrio.
Cada entidade tem propriedades particulares, chamadas atributos,
que a descrevem. Por exemplo, uma entidade EMPREGADO pode
ser descrita pelo seu nome, o trabalho que realiza, idade, endereo
e salrio. Uma entidade em particular ter um valor para cada um de
seus atributos. Os valores de atributos que descrevem cada
entidade ocupam a maior parte dos dados armazenados na base de
dados.

3.3 Conceitos do Modelo EntidadeRelacionamento


Entidades e Atributos
A Figura a seguir ilustra duas entidades.
A entidade e1, EMPREGADO, tem quatro atributos: Nome, Endereo,
Data de nascimento e Telefone residencial. Os seus valores so:
Joo da Silva, Rua Gois 711, So Paulo, SP, 1301100,
31/07/1973 e 713-749, respectivamente.
A entidade c1, COMPANHIA, tem trs atributos: Nome, Sede e
Presidente. Seus valores so: Cooper Sugar, Ribeiro Preto e
Joo da Silva.

3.3 Conceitos do Modelo EntidadeRelacionamento


Entidades e Atributos
Alguns atributos podem ser divididos em subpartes com significados
independentes. Por exemplo, Endereo da entidade e1 pode ser
dividido em Endereo da Rua, Cidade, Estado e CEP.
Um atributo que composto de outros atributos mais bsicos
chamado composto. J, atributos que no so divisveis so
chamados simples ou atmicos.
Atributos compostos podem formar uma hierarquia.

3.3 Conceitos do Modelo EntidadeRelacionamento


Entidades e Atributos

Atributos compostos so teis quando os usurios referenciam o atributo


composto como uma unidade e, em outros momentos, referenciam
especificamente a seus componentes. Se o atributo composto for sempre
referenciado como um todo, no existe razo para subdividi-lo em
componentes elementares.

Muitos atributos tm apenas um nico valor. Tais atributos so chamados


atributos univalorados (exemplo, Data de nascimento da entidade e1).

Em outros casos, um atributo pode ter um conjunto de valores. Tais atributos


so chamados de atributos multivalorados (exemplo, Telefone residencial da
entidade e1). Atributos multivalorados podem possuir uma multiplicidade,
indicando as quantidades mnima e mxima de valores.

3.3 Conceitos do Modelo EntidadeRelacionamento


Entidades e Atributos

Em alguns casos, dois ou mais atributos so relacionados. Por exemplo,


Idade e Data de Nascimento de uma pessoa. Para uma entidade pessoa em
particular, a Idade pode ser determinada a partir da data atual e da Data de
Nascimento. Atributos como Idade so chamados atributos derivados. Alguns
valores de atributos podem ser derivados de entidades relacionadas. Por
exemplo, um atributo Nmero de Empregados de uma entidade departamento
que pode ser calculado contando-se o nmero de empregados relacionados
com o departamento.

Outras situaes: uma entidade pode no ter quaisquer valores para um


atributo. Por exemplo, o atributo Apartamento aplica-se somente queles
empregados que residam em algum prdio. Para tais situaes, um valor
especial chamado null criado. O valor null pode tambm ser utilizado para
denotar que o valor desconhecido, como por exemplo, quando o cliente em
um cadastro no responde o nmero do CEP da rua onde reside. O
significado para o primeiro uso do null no aplicvel e, para o segundo,
desconhecido.

3.3 Conceitos do Modelo EntidadeRelacionamento


Tipos de Entidades, Conjunto de Valores e Atributos-Chaves

A Figura abaixo mostra dois tipos de entidades denominadas EMPREGADO


e COMPANHIA, e uma lista de atributos. Algumas instncias so tambm
ilustradas, juntamente com os seus valores de atributos:

3.3 Conceitos do Modelo EntidadeRelacionamento


Tipos de Entidades, Conjunto de Valores e Atributos-Chaves

Atributo-Chave: Um tipo de entidade tem, normalmente, atributos cujos


valores so distintos para cada entidade. Tal atributo chamado atributochave, e o seu valor pode ser usado para identificar cada entidade
unicamente. Algumas vezes, um conjunto de atributos pode formar uma
chave. Nestes casos, os atributos podem ser agrupados em um atributo
composto, que vir a ser um atributo-chave.

A especificao de um atributo-chave para um tipo de entidade significa que


a propriedade de unicidade deve valer para quaisquer extenses deste tipo
de entidade. Assim, esta restrio probe que duas entidades tenham,
simultaneamente, o mesmo valor para o atributo-chave.

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos, Papis e Restries Estruturais

Tipo e Instncia de Relacionamento: Um tipo de relacionamento R entre n


tipos de entidades E1, E2, ..., En um conjunto de associaes entre
entidades desses tipos.

Diz-se que cada entidade E1, E2, ..., En participa no tipo de relacionamento R
e que as entidades individuais e1, e2, ..., en participam na instncia do
relacionamento ri=(e1, e2, ..., en). O ndice i indica que podem existir vrias
instncias de relacionamento.

Por exemplo, considere-se que um tipo de relacionamento TRABALHAPARA exista entre tipos de entidades EMPREGADO e DEPARTAMENTO.
Este relacionamento associa cada empregado com o departamento em que
este trabalha. Cada instncia de relacionamento em TRABALHA-PARA
associa uma entidade empregado e uma entidade departamento.

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos,
Papis
Restries Estruturais

A Figura abaixo ilustra este


exemplo, onde cada instncia
de
relacionamento
ri

conectada a uma entidade


empregado e a uma entidade
departamento.

No mini-mundo representado
nesta Figura, os empregados
e1, e3 e e6 trabalham para o
departamento d1; e2 e e4
trabalham para d2; e e5 e e7
trabalham para d3.

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos, Papis e Restries Estruturais

O Grau de um Tipo de Relacionamento indica o nmero de tipos de entidades


participantes.

Assim, o tipo de relacionamento TRABALHAPARA de grau dois.

Um tipo de relacionamento de grau dois chamado binrio e de grau trs de


ternrio.

Um exemplo de um tipo de relacionamento ternrio FORNECE.

Cada instncia de relacionamento ri associa trs entidades um fornecedor s,


uma pea p e um projeto j - onde o fornecedor s fornece a pea p para o projeto j.

Podem existir tipos de relacionamento de qualquer grau, porm mais freqente


encontrar o tipo de relacionamento de grau dois.

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos, Papis e Restries Estruturais

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos, Papis e Restries Estruturais

Em geral, um tipo de relacionamento ternrio representa mais informao do que


trs tipos de relacionamentos binrios. Por exemplo, considere os trs tipos de
relacionamentos binrios: PODE-FORNECER, USA e FORNECE-ALGO.

Supe-se que:
a. PODE-FORNECER, entre os tipos de entidades FORNECEDOR e PEA, possui uma
instncia (s, p) com o significado: "o fornecedor s pode fornecer a pea p" (para
qualquer projeto);
b. USA, entre os tipos de entidades PROJETO e PEA, possui uma instncia (j, p) com o
significado: "o projeto j usa a pea p"; e
c. FORNECE-ALGO, entre os tipos de entidades FORNECEDOR e PROJETO, possui
uma instncia (s, j) com o significado: "o fornecedor s fornece alguma pea para o
projeto j".

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos, Papis e Restries Estruturais

A existncia dessas trs instncias de relacionamentos (s, p), (j, p) e (s, j) em


PODEFORNECER,
USA e
FORNECE-ALGO,
respectivamente,
no
necessariamente implica que uma instncia (s, j, p) exista no tipo de
relacionamento ternrio FORNECE.

Isto tem sido chamado armadilha de conexo.

Relacionamento como Atributo: Considere-se o tipo de relacionamento


TRABALHA-PARA. Pode-se pensar em colocar um atributo chamado
Departamento no tipo de entidade EMPREGADO onde o valor deste atributo em
cada entidade empregado a entidade departamento em que ele trabalha.

Quando se pensa em um tipo de relacionamento binrio como atributo, existem


duas alternativas: Departamento como atributo do tipo de entidade EMPREGADO
ou Empregado como atributo do tipo de entidade DEPARTAMENTO.

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos, Papis e Restries Estruturais

Nomes de Papis e Relacionamentos Recursivos: Cada tipo de entidade que


participa de um tipo de relacionamento possui um papel especfico no
relacionamento. O nome do papel indica o papel que uma entidade de um tipo de
entidade tem para cada instncia de relacionamento. Por exemplo, no tipo de
relacionamento TRABALHA-PARA, EMPREGADO tem o papel empregado ou
trabalhador e DEPARTAMENTO tem o papel de departamento ou empregador. A
escolha do nome nem sempre simples.

Para o tipo de relacionamento ternrio FORNECE, difcil encontrar-se um nome.


O nome de papel no exclusividade do tipo de relacionamento onde os tipos de
entidades participantes so distintos. Em alguns casos, um mesmo tipo de
entidade participa mais que uma vez em um tipo de relacionamento com
diferentes papis. Nesses casos, essencial identificar os nomes dos papis a
fim de distinguir o significado de cada participao.

Tais tipos de relacionamentos so chamados recursivos. Para ilustrar, considere a


Figura 17:

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos, Papis e Restries Estruturais

Considere o exemplo: relacionamento SUPERVISIONA relaciona um empregado


com o seu supervisor, onde ambas entidades so membros do mesmo tipo de
entidade EMPREGADO. Assim, o tipo de entidade EMPREGADO participa duas
vezes: uma vez no papel de supervisor e outra no papel de supervisionado.

Na figura a seguir, as linhas marcadas com "1" representam o papel de supervisor


e os marcados com "2" representam o papel de supervisionado. Assim, e1
supervisiona e2, e2 supervisiona e3 e e3 supervisiona e4.

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos, Papis e Restries Estruturais

Restries sobre Tipos de Relacionamentos: Os tipos de relacionamento


possuem certas restries que limitam as combinaes possveis de entidades
participando nas instncias de relacionamento.

Por exemplo, se existir uma regra que um empregado trabalha para apenas um
departamento, ento esta restrio deve ser descrita no esquema. Pode-se
distinguir dois principais tipos de restries de relacionamento que ocorrem com
relativa freqncia: razo de cardinalidade e participao.

A restrio razo de cardinalidade especifica a quantidade de instncias de


relacionamento que uma entidade pode participar.

No
tipo
de
relacionamento
binrio
TRABALHA-PARA,
DEPARTAMENTO:EMPREGADO tem razo de cardinalidade 1:N. Isto significa
que cada entidade departamento pode estar relacionada a inmeras entidades
empregado (muitos empregados podem trabalhar para um departamento) mas
uma entidade empregado pode estar relacionada a apenas um departamento (um
empregado pode trabalhar apenas para um departamento).

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos, Papis e Restries Estruturais

As razes de cardinalidade mais comuns para tipos de relacionamento binrio so


1:1, 1:N e M:N.

Um exemplo de um tipo de relacionamento binrio 1:1 pode ser observado entre


DEPARTAMENTO e EMPREGADO GERENCIA, que relaciona uma entidade
departamento com o empregado que gerencia esse departamento. Este
relacionamento 1:1 pois sabe-se que um empregado pode gerenciar apenas um
departamento e que um departamento pode ter apenas um gerente.

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos, Papis e Restries Estruturais

A restrio de participao especifica se a existncia de uma entidade depende


dela estar relacionada com outra entidade atravs de um relacionamento. Existem
dois tipos de restries de participao: total e parcial.

Se uma companhia estabelece a regra de que todo empregado deve trabalhar


para um departamento, ento uma entidade empregado somente pode existir se
ele participar em uma instncia de relacionamento TRABALHAPARA.

A participao de EMPREGADO em TRABALHA-PARA chamada total, o que


significa que toda entidade empregado deve estar relacionada a uma entidade
departamento via TRABALHA-PARA. A restrio de participao total algumas
vezes chamada dependncia existencial.

No esperado que todo empregado gerencie um departamento, assim a


participao de EMPREGADO no tipo de relacionamento GERENCIA parcial.
Isso significa que algumas entidades, do conjunto de entidades EMPREGADO,
podero estar relacionadas a uma entidade departamento via GERENCIA, mas
no necessariamente todas.

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos, Papis e Restries Estruturais

As restries de participao e razo de cardinalidade podem ser derivadas da


restrio estrutural de um tipo de relacionamento. simples especificar as
restries estruturais, embora no seja to intuitiva quanto s restries de
participao e razo de cardinalidade.

Pode-se associar um par de nmeros inteiros (min, max) para cada participao
de um tipo de entidade E em um tipo de relacionamento R, onde 0 min max e
max 1. Os nmeros indicam que para cada entidade e em E, e deve participar
ao menos min e no mximo Max vezes em instncias de relacionamento de R.

Note-se, que se min=0 ento a restrio de participao parcial e se min>0


ento a participao total. A vantagem de usar este mtodo que ele mais
preciso e pode ser usado facilmente para especificar restries estruturais para
tipos de relacionamentos de qualquer grau.

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos, Papis e Restries Estruturais

Atributos em Tipos de Relacionamento: Os tipos de relacionamento tambm podem


ter atributos. Por exemplo, pode haver a necessidade de se representar a quantidade
de horas semanais trabalhadas por um empregado em um dado projeto. Isto pode ser
representado em cada instncia de relacionamento TRABALHA-EM na forma de
atributo denominado Horas.

Um outro exemplo o caso de representar a data em que um gerente comeou a


gerenciar um departamento atravs de um atributo DataIncio para o tipo de
relacionamento GERENCIA.

Atributos de tipos de relacionamento 1:1 ou 1:N podem ser includos como atributos de
um dos tipos de entidades participantes.

Por exemplo, o atributo DataIncio para o tipo de relacionamento GERENCIA pode ser
um atributo tanto de EMPREGADO quanto de DEPARTAMENTO; embora,
conceitualmente, ele pertena ao relacionamento GERENCIA. Isso ocorre porque
GERENCIA um relacionamento 1:1. Assim, toda entidade departamento ou
empregado participam em apenas uma instncia de relacionamento e, dessa forma, o
valor do atributo DataIncio pode ser representado em uma das entidades participantes.

3.3 Conceitos do Modelo EntidadeRelacionamento


Relacionamentos, Papis e Restries Estruturais

Para um tipo de relacionamento 1:N, um atributo de relacionamento pode somente ser


colocado no tipo de entidade que est do lado N do relacionamento.

Se o relacionamento TRABALHA-PARA tiver um atributo DataIncio indicando quando um


empregado comeou a trabalhar para um departamento, este atributo pode ser colocado
como atributo de EMPREGADO. Isto acontece porque o relacionamento 1:N, tal que cada
entidade empregado participa apenas uma nica vez em uma instncia de TRABALHAPARA. Em ambos os tipos de relacionamento 1:1 e 1:N, a deciso de onde colocar um
atributo de relacionamento determinada subjetivamente pelo projetista de esquemas.

Se o valor de um atributo determinado pela combinao das entidades participantes em


uma instncia de relacionamento, e no apenas por uma das entidades, ento o atributo
deve ser especificado como um atributo de relacionamento. Esta condio aplica-se a
atributos de tipos de relacionamentos M:N, porque as entidades dos tipos de entidades
participantes podem participar em inmeras instncias de relacionamento.

Um exemplo disso o atributo Horas do relacionamento M:N TRABALHA-EM. O nmero de


horas que um empregado trabalha em um projeto determinado pela combinao
empregado-projeto e no separadamente.

3.3 Conceitos do Modelo EntidadeRelacionamento


Tipo de Entidade-Fraca

Alguns tipos de entidades podem no ter quaisquer atributos-chaves. Isto implica que
no se pode distinguir as entidades porque a combinao dos valores de atributos
podem ser idnticas. Tais tipos de entidades so chamadas tipos de entidades-fracas.

Por exemplo, considere o tipo de entidade DEPENDENTE, relacionado a


EMPREGADO, que usado para representar os dependentes de cada empregado
atravs do relacionamento 1:N. Os atributos de DEPENDENTE so Nome (apenas o
primeiro nome do dependente), DataNasc, Sexo e Relao com o empregado
(esposa, marido, filho, sogra, etc.). Dois dependentes de empregados distintos podem
ter os mesmos valores para os atributos, mesmo assim eles ainda sero entidades
distintas. Os dependentes sero identificados como entidades distintas aps a
determinao da entidade empregado com a qual cada um est relacionado.

Um tipo de entidade-fraca tem uma chave-parcial, que um conjunto de atributos que


pode univocamente identificar entidades-fracas relacionadas mesma entidade
proprietria. No exemplo, assume-se que nenhum dependente de um mesmo
empregado ter o mesmo nome, ento o atributo Nome de DEPENDENTE ser a
chave-parcial.

3.3 Conceitos do Modelo EntidadeRelacionamento


Tipo de Entidade-Fraca

Um tipo de entidade-fraca pode, algumas vezes, ser representado como atributo


composto e multivalorado.

No exemplo, pode-se especificar um atributo composto e multivalorado


denominado Dependente para EMPREGADO, onde os atributos componentes
so Nome, DataNasc, Sexo e Relao, substituindo-se assim, o tipo de entidadefraca DEPENDENTE. A escolha de qual representao usar determinada pelo
projetista da base de dados.

Um critrio usado para se adotar a representao de tipo de entidade-fraca


quando o tipo de entidade-fraca tem muitos atributos ou participa,
independentemente, em outros tipos de relacionamentos alm do tipo de
relacionamento que o identifica.

3.4 Projeto da Base de Dados COMPANHIA


utilizando o MER

Tendo visto os conceitos pertinentes ao MER, pode-se agora especificar os


seguintes tipos de relacionamentos extrados do exemplo apresentado.
a. GERENCIA (1:1) entre EMPREGADO e DEPARTAMENTO. A participao de
EMPREGADO parcial. A participao de DEPARTAMENTO total. O atributo
DataIncio associado a este tipo de relacionamento.
b. TRABALHA-PARA (1:N) entre DEPARTAMENTO e EMPREGADO. Ambos tm
participao total.
c. CONTROLA (1:N) entre DEPARTAMENTO e PROJETO. A participao de PROJETO
total e de DEPARTAMENTO parcial.
d. SUPERVISIONA (1:N) entre EMPREGADO (no papel de supervisor) e EMPREGADO
(no papel de supervisionado). A participao de ambos parcial, pois nem todo
empregado supervisor e nem todo empregado tem um supervisor.
e. TRABALHA-EM (M:N) entre EMPREGADO e PROJETO com o atributo Horas. Ambos
tm participao total.
f. DEPENDENTE-DE (1:N) entre EMPREGADO e DEPENDENTE. um tipo de
relacionamento de identificao para o tipo de entidade-fraca DEPENDENTE. A
participao de EMPREGADO parcial e de DEPENDENTE total.

3.4 Projeto da Base de Dados COMPANHIA


utilizando o MER
Em diagramas do MER, ou simplesmente DER, a nfase est na
representao de esquemas ao invs de instncias.
Isso porque o esquema de uma base de dados raramente sofre
mudanas, j instncias podem mudar freqentemente.
Tambm, o esquema de fcil visualizao por conter menor
quantidade de elementos visuais.

3.5 Diagrama Entidade-Relacionamento


(DER)

3.5 Diagrama Entidade-Relacionamento


(DER)

3.5 Diagrama Entidade-Relacionamento


(DER)
Tipos de Relacionamentos de Grau maior que Dois

5. Algebra Relacional
Utilizada para manipular Relaes.
Consiste em um conjunto de operaes que tomam uma ou mais
relaes (tabelas) como entrada e produzem uma nova relao
(tabela) como resultado.
As operaes da lgebra relacional podem ser divididas em dois
grupos.
Um grupo inclui operaes de conjunto da teoria de conjuntos da
matemtica. Essas operaes incluem unio, interseo, diferena,
e produto cartesiano.
O outro grupo consiste de operaes desenvolvidas especialmente
para bancos de dados relacionais e incluem as operaes de
seleo, projeo, e juno.

5.1. Operaes da Teoria dos Conjuntos


So chamadas de operaes binrias, uma vez que operam pares de
relaes.

5.1.1 Unio
A unio de duas relaes R e S, R U S o conjunto de todas as
tuplas t pertencentes a R, ou a S, ou a ambas.
As duas relaes operando tm que ser do mesmo grau, digamos n,
e os j-simos atributos das duas relaes (j na faixa de 1 a n) tm
que ser do mesmo domnio.

5.1.2 Interseo
A interseo de duas relaes R e S, R S o conjunto de todas
as tuplas t pertencentes simultaneamente a R e a S.

5.1.3 Diferena
A diferena entre duas relaes R e S (nesta ordem), R - S, o
conjunto de todas as tuplas t pertencentes a R, mas no a S.

5.1.4 Produto Cartesiano

O produto cartesiano de duas relaes R e S, R X S o conjunto de tuplas t


tais que t a concatenao de uma tupla r pertencente a R com uma tupla s
pertencente a S. A concatenao de uma tupla r = (r 1 , , rm) com uma tupla
s = (sm+1 , , sm+n), nesta ordem, a tupla t = (r1 , , rm, sm+1 , , sm+n).

5.2. Operaes Desenvolvidas para Banco


de Dados Relacional
Podem ser operaes binrias ou no, logo no necessariamente
operam pares de relaes.
Seleo ou Restrio;
Projeo;
Juno.

5.2.1 Seleo

A operao de seleo constri uma nova tabela usando um subconjunto


horizontal de uma tabela existente, isto , todas as linhas de uma tabela que
satisfaam a determinada condio.

uma operao unria, ou seja, s envolve uma relao.

A operao de seleo aplicada sobre cada tupla individualmente.

A condio de seleo expressa como uma combinao booleana de


termos, sendo cada termo uma comparao singela que pode se tornar
verdadeira ou falsa para uma determinada linha, inspecionando-se aquela
linha isoladamente.

A comparao da condio de seleo deve envolver atributos do mesmo


domnio.

O grau da relao resultante da operao de seleo igual ao grau da


relao sobre a qual se operou, j que ambas tm os mesmos atributos.

O nmero de tuplas da relao resultante sempre menor ou igual ao


nmero de tuplas da relao original.

5.2.1 Seleo

Simbologia = <condio de seleo>(<nome da relao>)

A operao de seleo comutativa.

<cond1>( <cond2>(R)) = <cond2>( <cond1>(R))

Uma srie de clusulas de seleo conectadas pelo operador booleano E pode ser
substituda por uma cascata de operaes de seleo.

<cond1>e<cond2>e...e<condn>(R)=<cond1>(<cond2>(...(<condn>(R))...))

5.2.2 Projeo

A operao de projeo forma uma nova tabela usando um subconjunto


vertical de algumas colunas de uma tabela, subconjunto obtido pela seleo
de atributos especificados, extraindo colunas especficas e removendo
qualquer linha duplicata no conjunto de colunas extradas.

A projeo nos fornece a maneira de permutar (reordenar) os atributos de


uma dada relao.

Nenhum atributo pode ser especificado mais de uma vez em uma operao
de projeo.

A omisso da lista de nomes de atributos equivalente especificao de


uma lista contendo todos os nomes de atributos da relao dada, na sua
ordem correta, da esquerda para a direita. Em outras palavras, tal projeo
idntica relao dada.

uma operao unria.

5.2.2 Projeo

Simbologia: <lista de atributos>(<nome da relao>).

Se uma lista de atributos no incluir nenhum


atributo-chave, tuplas duplicadas poderiam
aparecer na relao resultante. Logo,para que
isso seja evitado, a operao de projeo
remove implicitamente quaisquer duplicatas de
uma tupla.

Se a lista de atributos incluir um atributo-chave,


a relao resultante ter o mesmo nmero de
tuplas que a relao original.

A equao <lista1>(<lista2>(R))=
<lista1>(R) s ser verdadeira se <lista2>
contiver os atributos presentes em <lista1>,
caso contrrio o lado esquerdo da equao
ser invlido.

A operao de projeo no comutativa.

5.2.3 Juno

A operao de juno, denotada por , usada para combinar tuplas


relacionadas de duas relaes distintas. Esta operao muito importante para
qualquer base de dados relacional porque permite processar o relacionamento
entre relaes.

A forma geral de uma operao de juno sobre duas relaes R(A 1,A2,...,An) e
S(B1,B2,...,Bm) R <condio de juno> S

O resultado de uma juno uma relao Q(A1,A2,...,An,B1,B2,...,Bm) com m+n


atributos nesta ordem. A relao resultante Q tem uma tupla para cada
combinao de tuplas, uma vinda de R e a outra vinda de S, sempre que a
combinao satisfizer a condio de juno (diferena entre JUNO e
PRODUTO CARTESIANO).

Cada combinao de tuplas para qual a condio de juno seja avaliada como
VERDADEIRA includa na relao resultante Q como uma nica tupla. A
<condio de juno> tem a seguinte forma: <condio> E <condio> E ... E
<condio> onde cada condio da forma Ai Bj , onde Ai um atributo de R,
Bj um atributo de S, Ai e Bj tm o mesmo domnio, e um operador
relacional do conjunto {= , < , , > , , }. As tuplas cujos atributos de juno so
nulos no aparecem no resultado.

5.2.3 Juno

5.2.4 Eqijuno

A operao de juno mais comum envolve condies de juno com o


operador de igualdade (=). Tal operao chamada de EQIJUNO.

A forma geral de uma operao de eqijuno, tambm chamada de


JUNO NATURAL, : R *(<lista1>),(<lista2>) S

Neste caso, <lista1> especifica a lista de atributos de R, e <lista2>


especifica a lista de atributos de S. As listas so usadas para executar uma
comparao de igualdade entre os pares de atributos correspondentes
(implicitamente conectadas pelo operador Booleano E). Apenas a lista
correspondente aos atributos da primeira relao (<lista1> da relao R)
mantida na relao resultante Q; evitando assim a duplicao de atributos
na relao resultante.

Em geral, se R tem nR tuplas e S tem nS tuplas, ento R S tem entre zero


e nR*nS tuplas. O tamanho esperado de uma juno dividido pelo valor
mximo de nR*nS leva a uma razo chamada de seletividade da juno, que
uma propriedade de cada condio de juno.

5.2.4 Eqijuno

5.2.5 Juno Externa (OUTER JOIN)

A operao de juno descrita anteriormente realiza um casamento entre


tuplas que satisfaam uma determinada condio de juno. Por exemplo,
em uma operao de Juno Natural R*S, apenas as tuplas de R que tm
uma contrapartida em S, e vice-versa, aparecem no resultado. Logo, as
tuplas que no possuam uma tupla relacionada so eliminadas do resultado.
As tuplas que possuam valores nulos para os atributos de juno tambm
so eliminadas.

Um conjunto de operaes, chamadas de Junes Externas, pode ser usado


quando quisermos manter no resultado todas as tuplas de R e/ou S; quer
tenham ou no tuplas relacionadas na outra relao.

A Juno Externa Esquerda mantm todas as tuplas da primeira relao


(R); se no houver nenhuma tupla correspondente em S os atributos
oriundos de S na relao resultante so preenchidos com o valor nulo. As
tabelas da prxima transparncia ilustram as operaes acima.

Uma operao similar, Juno Externa Direita (=), mantm na relao


resultante as tuplas da segunda relao (S); enquanto a operao Juno
Externa Total (==) mantm as tuplas de ambas as relaes.

5.2.5 Juno Externa (OUTER JOIN)

Por exemplo, suponha que queiramos uma lista com o nome de todos os
empregados e o nome dos departamentos que eles gerenciam. Devemos
ento usar a operao de Juno Externa, denotada por =, como se
segue:

TEMP (EMPREGADO =CPF = CPF_GER DEPARTAMENTO)

RESULT P_NOME , U_NOME,NOME_DEP(TEMP)

Exerccio

Exerccio
1. Obtenha o primeiro nome, o ltimo nome e o salrio de cada um dos empregados.
2. Obtenha o CPF do gerente do Departamento de Informtica.
3. Obtenha o primeiro e o ltimo nome do gerente do Departamento de Informtica.
4. Obtenha o primeiro e o ltimo nome de todos os empregados do Departamento de
Informtica.
5. Obtenha uma relao com o primeiro e o ltimo nome de todos os empregados do
Departamento de Informtica, juntamente com o nome do projeto que cada um deles est
trabalhando.
6. Obtenha o primeiro e o ltimo nome de todos os empregados que no tm dependentes.
7. Obtenha o primeiro e o ltimo nome de todos os empregados que tm dois ou mais
dependentes.
8. Obtenha o total dos salrios pagos aos empregados do Departamento de Informtica.
9. Obtenha o salrio mdio dos gerentes de departamento.
10. Obtenha uma relao com o nome de cada um dos departamentos e o salrio mdio dos
seus empregados.

Exerccio
11. Recupere os nomes de todos os empregados no departamento 5 que trabalham menos
que 20 horas por semana no projeto Intranet.
12. Liste os nomes de todos os empregados que possuem umdependente cujo nome seja
igual ao deles.
13. Encontre os nomes de todos os empregados que estejam diretamente supervisionados
por Beatriz Figueredo
14. Recupere os nomes de todos os empregados que trabalham em cada projeto.
15. Recupere os nomes de todos os empregados que no trabalham em nenhum projeto.
16. Liste os sobrenomes de todos os gerentes de departamento que no possuam
dependentes.
17. Para cada projeto, liste o nome do projeto e o total de horas por semana (de todos os
empregados) despendidos naquele projeto.
18. Para cada departamento, recupere o nome do departamento e o salrio mdio de todos os
empregados que trabalham naquele departamento.
19. Recupere o salrio mdio de todos os empregados do sexo feminino.

6. SQL

A primeira verso da linguagem SQL, chamada SEQUEL (Structured Query English


Language), surgiu em 1974 nos laboratrios da IBM (Califrnia). Entre 1976 e
1977 ela foi revisada e ampliada, tendo ento o seu nome alterado para SQL.

Devido ao sucesso da nova forma de consulta e manipulao de dados dentro de um


ambiente de banco de dados, sua utilizao tornou-se cada vez maior.

Vrios SGBDs atuais utilizam o SQL como a linguagem padro para o acesso s
bases de dados. Entre eles podemos citar:
DB2 da IBM
ORACLE da Oracle Corporation;
RDB da Digital
SYBASE da Sybase INC
SQL Server da Microsoft
Ingres da Computer Associates

Em 1982 o American National Standard Institute (ANSI) tornou a SQL a


linguagem padro para a manipulao de dados em ambiente relacional.

6. SQL
Linguagem de definio de dados (DDL)
Permite ao usurio a definio da estrutura e
organizao dos dados armazenados, e das relaes
existentes entre eles.

Linguagem de manipulao de dados (DML)


Permite a um usurio, ou a um programa de
aplicao, a execuo de operaes de incluso,
remoo, seleo ou atualizao de dados previamente
armazenados na base de dados.

6.1 Comandos SQL


As tabelas a seguir sero usadas nos exemplos que se
seguem, para a apresentao dos comandos SQL:
CLIENTE (cod_cli, nome_cli, endereco, cidade, cep, uf)
VENDEDOR (cod_vend, nome_vend, sal_fixo, faixa_comiss)
PEDIDO ( num_ped, prazo_entr, cd_cli, cd_vend)
ITEM_PEDIDO (no_ped, cd_prod, qtd_ped)
PRODUTO (cod_prod, unid_prod, desc_prod, val_unit)

6.1 Comandos SQL


Criao e Destruio de Tabelas
O comando CREATE TABLE usado para criar uma tabela. A
sua forma geral :
CREATE TABLE <nome_tabela>
(<descrio das colunas>,

<descrio das chaves>);

onde:
<nome_tabela> dever ser substitudo pelo nome da tabela a ser
criada.
<descrio das colunas> deve ser substituda pela relao das
colunas da tabela e seus respectivos tipos de dados (por
exemplo, smallint, char, varchar, integer, number, float e etc).
<descrio das chaves> deve ser substituda pela lista das colunas
que so tratadas como chaves estrangeiras.

6.1 Comandos SQL


Script de Criao das Tabelas dos Exemplos
create table produto

create table vendedor


( cod_vend

smallint

nome_ve nd
sal_fixo

not null,

varchar(40) not null,

number(9,2) not null,

faixa_comiss char(01)

( cod_prod

smallint

unid_prod

char(03)

desc_prod

varchar(20) not null,

val_unit

not null,
create table cliente
smallint

not null,

nome_cli

varchar(40) not null,

endereco

varchar(40) null,

cidade

varchar(20) null,

cep

char(08)

null,

uf

char(02)

null,

primary key (cod_cli));

not null,

number(9,2) not null,

primary key (cod_prod));

primary key (cod_vend));


( cod_cli

not null,

6.1 Comandos SQL


Script de Criao das Tabelas dos Exemplos
create table pedido
( num_ped
prazo_entr
cd_cli

smallint

not null,

smallint

not null,

smallint

not null

REFERENCES CLIENTE (cod_cli),


cd_vend

smallint

not null

REFERENCES VENDEDOR (cod_vend),


primary key (num_ped));

create table item_pedido


( no_ped

smallint

not null

REFERE NCES PEDIDO (num_ped),


cd_prod

smallint

not null

REFERENCES PRODUTO (cod_prod),


qtd_ped

float

not null);

6.1 Comandos SQL


Para excluirmos uma tabela existente devemos
comando DROP TABLE. A sua forma geral :

usar

DROP TABLE <nome_tabela>;


onde:
<nome_tabela> dever ser substitudo pelo nome da tabela a ser
excluda.
Exemplos
drop table item_pedido;
drop table pedido;
drop table vendedor;
drop table produto;
drop table cliente;

6.1.2 Executando Consultas sobre as


Tabelas
Selecionando Colunas Especficas de uma Tabela
SELECT <lista_de_colunas>
FROM <nome_tabela>;

Listar todos os produtos com as respectivas descries, unidades


e valores unitrios.
select desc_prod,unid_prod,val_unit
from produto;

DESC_PROD UNI VAL_UNIT


Chapa de Aco

kg

2,5

Cimento

kg

4,5

parafuso

kg

2,0

Fio plastico

0,2

5,0

Solvente PRW

6.1.2 Executando Consultas sobre as


Tabelas
Listar os nomes dos clientes, as cidade e os estados onde
eles esto localizados.
select nome_cli,cidade,uf
from cliente;

NOME_CLI

CIDADE

UF

Supermercado Carrefour

rio de janeiro

rj

Supermercado Baratao

rio de janeiro

rj

Supermercado Arariboia

niteroi

rj

UFF

niteroi

rj

CSN

volta redonda

rj

Pegeout

resende

rj

Ind. Quimicas Paulistas

sao paulo

sp

Ford Caminhoes

sao paulo

sp

Riocel Celulose

guaiba

rs

Elevadores Sur

guaiba

rs

6.1.2 Executando Consultas sobre as


Tabelas

Selecionando todas as Colunas de uma Tabela


SELECT *
FROM <nome_tabela>;
Listar o contedo de todas as tabelas da base de dados dos exemplos.
select * from cliente;

Selecionando Apenas Alguns Registros da Tabela


SELECT <lista_de_colunas>
FROM <nome_tabela>
WHERE <condio_de_seleo>;

Onde a clusula WHERE tem a seguinte forma:


WHERE <nome_da_coluna> <operador> <valor>

6.1.2 Executando Consultas sobre as


Tabelas

Operadores Relacionais:
=

igual

<> ou != diferente
<

menor que

>

maior que

>=

maior ou igual a

<=

menor ou igual a

Quando a coluna do tipo caracter, o <valor> deve estar entre aspas


simples (').

Exemplo: 'parafuso'

Observao: Na linguagem SQL existe diferena entre caracteres


maisculos e minsculos; logo, 'PARAFUSO' diferente de 'parafuso'.

6.1.2 Executando Consultas sobre as


Tabelas

Listar o nmero do pedido, o cdigo do produto e a quantidade


pedida dos itens de um pedido, onde a quantidade pedida seja igual a 500.
select no_ped,cd_prod,qtd_ped
from item_pedido
where qtd_ped = 500;

NO_PED

CD_ PROD

2111

100

500

2113

500

500

4112

500

500

5111

300

500

7111

100

500

Quais so os clientes localizados na cidade de Niteri?


select nome_cli

NOME_CLI
Supermercado Arariboia

from cliente
where cidade = 'niteroi';

UFF

QTD_PED

6.1.2 Executando Consultas sobre as


Tabelas

Operadores Lgicos
AND
OR
NOT

conjuno
disjuno
negao

Quais so os produtos que tm unidade igual a 'kg' e valor unitrio maior


do que R$ 2,00?
select desc_prod
from produto
where unid_prod = 'kg' and val_unit > 2.00;
DESC_PROD
Chapa de Ao
Cimento

6.1.2 Executando Consultas sobre as


Tabelas

Liste todos os clientes localizados na cidade de So Paulo ou que tenham CEP


entre 20000005 e 20000010.
select nome_cli,cidade,cep
from cliente
where cidade = 'sao paulo'
or (cep>='20000005' and cep<='20000010');
NOME_CLI

CIDADE

CEP

CSN

volta redonda

20000005

Pegeout

resende

20000006

Ind. Quimicas Paulistas

sao paulo

11000001

Ford Caminhoes

sao paulo

11000002

Observao: A prioridade do operador AND maior do que a prioridade do operador OR;


logo, neste exemplo, a utilizao dos parnteses opcional.

6.1.2 Executando Consultas sobre as


Tabelas

Mostrar todos os pedidos que no tenham prazo de entrega superior a 15


dias.
select num_ped
from pedido
where not (prazo_entr > 15);

NUM_PED
1111
1112
2111
2113
3111
3112
4111
4112
5111

6.1.2 Executando Consultas sobre as


Tabelas
Operadores BETWEEN e NOT BETWEEN
WHERE <nome_coluna> BETWEEN <valor1> AND <valor2>
WHERE <nome_coluna> NOT BETWEEN <valor1> AND <valor2>
Este operador possibilita a seleo de uma faixa de valores sem a
necessidade do uso dos operadores >=, <= e AND.
<valor1> e <valor2> tm que ter o mesmo tipo de dado que
<nome_coluna>.

6.1.2 Executando Consultas sobre as


Tabelas

Liste o cdigo e a descrio dos produtos que tenham o valor unitrio na


faixa de R$ 0,10 a R$ 3,00.
select cod_prod,desc_prod
from produto
where val_unit between 0.10 and 3.00;

COD_PROD

DESC_PROD

100

Chapa de Ao

300

parafuso 3.0X10.5 mm

400

Fio plstico

6.1.2 Executando Consultas sobre as


Tabelas

Operadores LIKE e NOT LIKE

WHERE <nome_coluna> LIKE <valor>

WHERE <nome_coluna> NOT LIKE <valor>

Aplicveis apenas a colunas dos tipos CHAR e VARCHAR.

Funcionam de modo anlogo aos operadores = e <>, porm o poder


dos operadores LIKE e NOT LIKE est na utilizao dos smbolos % e _,
que podem fazer o papel de coringa:
%

substitui uma palavra

_ substitui um caracter qualquer

Exemplos:
'apis%' se aplicaria s seguintes cadeias de caracteres:
'lapis preto'
'lapis cera'
'lapis borracha'
'broca n_' se aplicaria s seguintes cadeias de caractere:
'broca n1'
'broca n9'

6.1.2 Executando Consultas sobre as


Tabelas

Listar todos os produtos que tenham a sua unidade comeando por k


(lembre-se de que a coluna unid_prod foi definida como char(03)).
select cod_prod,desc_prod
from produto
where unid_prod like 'k__';

COD_PROD

DESC_PROD

100

Chapa de Ao

200

Cimento

300

parafuso 3.0X10.5 mm

6.1.2 Executando Consultas sobre as


Tabelas

Listar todos os vendedores cujos os nome no comecem por 'A'.


select cod_vend,nome_vend
from vendedor
where nome_vend not like 'A%';

COD_VEND

NOME_VEND

11

Paulo Alberto

13

Cassia Andrade

15

Maria Paula

6.1.2 Executando Consultas sobre as


Tabelas

Operadores IN e NOT IN

WHERE <nome_coluna> IN <lista_de_valores>

WHERE <nome_coluna> NOT IN (<lista_de_valores>)

Seleciona as linhas cujo o valor da coluna <nome_coluna> pertena


ao conjunto <lista_de_valores>.

Listar todos os vendedores cujas as faixas de comisso sejam 'a' ou 'b'.


select cod_vend,nome_vend
from vendedor
where faixa_comiss in ('a','b');
COD_VEND
11

NOME_ VEND
Paulo Alberto

12

Ana Cristina

14

Armando Pinto

6.1.2 Executando Consultas sobre as


Tabelas

Operadores IS NULL e IS NOT NULL

WHERE <nome_coluna> IS NULL

WHERE <nome_coluna> IS NOT NULL

A utilizao do valor nulo (NULL) problemtica, pois as diversas


implementaes da linguagem SQL podem adotar qualquer representao
para o valor nulo.

Mostrar os clientes que no tenham endereo cadastrado.


select nome_cli
from cliente
where endereco is null;
NOME_CLI
---------------------------------------0 linhas selecionadas.

6.1.2 Executando Consultas sobre as


Tabelas

Ordenando os Dados Selecionados


SELECT <lista_de_colunas>
FROM <nome_tabela>
WHERE <condio_de_seleo>
ORDER BY {<nome_coluna>|<num_col> [ASC|DESC]}

Onde <nome_coluna> se refere coluna segundo a qual as linhas


sero ordenadas, e <num_col> se refere posio relativa da coluna
na <lista_de_colunas> projetadas, contada da esquerda para a direita,
e no posio na tabela original.

As clusulas ASC e DESC denotam ordenao ascendente e


descendente respectivamente. A forma ascendente de ordenao
assumida caso nenhuma opo seja informada explicitamente.

6.1.2 Executando Consultas sobre as


Tabelas

Mostrar em ordem alfabtica a lista de vendedores e seus respectivos


salrios fixos.

select nome_vend,sal_fixo
from vendedor
order by nome_vend;

NOME_VEND

SAL_FIXO

Ana Cristina

2100

Armando Pinto

2500

Cassia Andrade

900

Maria Paula

900

Paulo Alberto

1500

6.1.2 Executando Consultas sobre as


Tabelas

Listar os nomes, as cidades e os


estados de
todos os clientes,
ordenados por estado e cidade de
forma descendente.
NOME_CLI

select nome_cli,cidade,uf
from cliente
order by uf desc,cidade desc;

CIDADE

UF

Ind. Quimicas Paulistas

sao paulo

sp

Ford Caminhoes

sao paulo

sp

Riocel Celulose

guaiba

rs

Elevadores Sur

guaiba

rs

volta redonda

rj

CSN
Supermercado Carrefour

rio de janeiro

rj

Supermercado Baratao

rio de janeiro

rj

Pegeout

resende

rj

Supermercado Arariboia

niteroi

rj

UFF

niteroi

rj

6.1.2 Executando Consultas sobre as


Tabelas

Mostrar a descrio e o valor unitrio de todos os produtos que


tenham unidade 'kg' em ordem ascendente de valor unitrio.
select desc_prod,val_unit
from produto
where unid_prod = 'kg'
order by 2;

DESC_PROD
parafuso 3.0X10.5 mm

VAL_UNIT
2

Chapa de Ao

2,5

Cimento

4,5

6.1.2 Executando Consultas sobre as


Tabelas

Realizando Clculos sobre a Informao Selecionada

Podemos criar dinamicamente um campo que no pertena tabela original


atravs de operaes executadas sobre os campos projetados.

Exibir o novo salrio fixo dos vendedores da faixa de comisso C, calculado


com base no reajuste de 75% sobre o salrio atual acrescido de R$ 120,00
de bonificao. Ordene a relao resultante pelo nome do vendedor.
select nome_vend,((sal_fixo*1.75)+120) as
from vendedor
where faixa_comiss='c'
order by nome_vend;
NOME_VEND

NOVO_SAL

Cassia Andrade

1695

Maria Paula

1695

6.1.2 Executando Consultas sobre as


Tabelas

Mximos (MAX) e Mnimos (MIN)

Mostrar o menor e o maior salrio entre os vendedores.


select MIN(sal_fixo),MAX (sal_fixo)
from vendedor;

MIN(SAL_FI) MAX(SAL_FI )
900

2500

Totalizando Colunas (SUM)

Mostrar a quantidade total pedida para o produto cimento, de cdigo 200.


select SUM(qtd_ped)
from item_pedido

SUM(QTD_PE)

where cd_prod=200;

900

6.1.2 Executando Consultas sobre as


Tabelas

Calculando Mdias (AVG)

Qual a mdia dos salrios fixos dos vendedores?


select AVG(sal_fixo)
from vendedor;

AVG(SAL_FI)
1580

Contando as Linhas (COUNT)

Quantos vendedores ganham acima de R$ 2.000,00 de salrio fixo?


select COUNT(*)
from vendedor

COUNT(*)

where sal_fixo>2000;

6.1.2 Executando Consultas sobre as


Tabelas

A Palavra-Chave DISTINCT

Vrias linhas de uma tabela podem conter os mesmos valores para as


suas colunas (duplicidade), com exceo da chave primria. Quando
desejarmos eliminar a duplicidade, podemos inserir a palavra-chave
DISTINCT aps a palavra-chave SELECT.

Em que cidades as nossa empresa possui clientes?


select DISTINCT cidade
from cliente;

CIDADE
guaiba
niteroi
resende
rio de janeiro
sao paulo
volta redonda

6.1.2 Executando Consultas sobre as


Tabelas
NO_PED

TOTAL_ITEN

1111

Agrupando a Informao Selecionada (GROUP BY)

1112

Existem ocasies em que desejamos aplicar uma


funo de agregao no somente a um conjunto
de tuplas, mas tambm organizar a informao em
determinadas categorias. Isto possvel atravs do
uso da clusula GROUP BY.

1113

2111

2112

2113

3111

3112

Listar o nmero de itens existente em cada pedido.


select no_ped, count(*) as total_itens
from item_pedido
group by no_ped;

4111

4112

5111

6111

6112

7111

6.1.2 Executando Consultas sobre as


Tabelas
Inicialmente as linha so agrupadas atravs do(s)
atributo(s) fornecido(s) na clusula GROUP BY; neste caso,
no_ped.
Em um segundo passo, aplicada a operao COUNT(*) para
cada grupo de linhas que tenha o mesmo nmero de pedido.
Aps a operao de contagem de cada grupo, o resultado da
consulta apresentado.
Normalmente, a clusula GROUP BY utilizada em
conjunto com as operaes COUNT e AVG.

6.1.2 Executando Consultas sobre as


Tabelas
A Clusula HAVING
s vezes temos que definir condies e aplic-las aos grupos ao
invs de faz-lo a cada linha separadamente.
Por exemplo, suponha que desejemos listar todos os pedidos
que possuam mais de um item.
Esta condio no se aplica a uma
nica
linha
separadamente, mas a cada grupo definido pela clusula
GROUP BY.
Para exprimir tal consulta, usamos a clusula HAVING.
A condio da clusula HAVING aplicada aps a formao dos
grupos;
logo, podemos usar
funes de agregao na
construo das condies da clusula HAVING.

6.1.2 Executando Consultas sobre as


Tabelas

A Clusula HAVING

Listar os pedidos que possuam mais de um item.


select no_ped,count(*) as total_itens
from item_pedido

NO_PED

group by no_ped

1111

having count(*)>1;

1112

2111

2112

3112

4112

5111

6112

TOTAL_ITEN

6.1.2 Executando Consultas sobre as


Tabelas
Recuperando Dados de Vrias Tabelas (JOINS)
Algumas consultas necessitam acessar simultaneamente vrias
tabelas, o que leva realizao de junes (JOINS) entre as
tabelas para poder extrair as informaes necessrias para a
consulta formulada.

Qualificadores de Nomes
Um qualificador de nome consiste do nome da tabela, seguido
de um ponto, seguido por um nome de uma coluna da tabela. Por
exemplo, o qualificador da coluna DESC_PROD da tabela
PRODUTO ser PRODUTO.DESC_PROD.
Os qualificadores de nome so utilizados em uma consulta
para efetivar a juno (JOIN) entre as tabelas.

6.1.2 Executando Consultas sobre as


Tabelas

Faa uma juno da tabela de clientes com a de pedidos, exibindo o nome do


cliente, o cdigo do cliente e o nmero do pedido.
select cod_cli,nome_cli,pedido.num_ped
from cliente,pedido;
COD_CLI

NOME_CLI

NUM_PED

1000

Supermercado Carrefour

1111

2000

Supermercado Baratao

11 11

3000

Supermercado Arariboia

1111

7000

Ind. Quimicas Paulistas

1111

8000

Ford Caminhoes

1111

9000

Riocel Celulose

1111

..........................................................................................................................
10000

Elevadores Sur

1111

1000

Supermercado Carrefour

1112

140 linhas selecionadas.

6.1.2 Executando Consultas sobre as


Tabelas
Neste exemplo foi executado um produto cartesiano das
tabelas CLIENTE e PEDIDO, seguido de uma projeo das
colunas exibidas.
Neste caso, poucas informaes teis podem ser extradas
da relao resultante.
Devemos ento aplicar critrios de seleo juno para
podermos obter algum resultado concreto.

6.1.2 Executando Consultas sobre as


Tabelas

A que clientes esto associados os


pedidos existentes? Listar pelos
nomes dos clientes.

Select (nome_cli,pedido.cd_cli,pedido.num_ped)
from cliente,pedido
where cliente.cod_cli=pedido.cd_cli;

NOME_CLI

CD_CLI

NUM_PED

Supermercado Carrefour

1000

1111

Supermercado Carrefour

1000

1112

Supermercado Carrefo ur

1000

1113

Supermercado Arariboia

3000

2111

Supermercado Arariboia

3000

2112

Supermercado Arariboia

3000

2113

UFF

4000

3111

UFF

4000

3112

Pegeout

6000

4111

Pegeout

6000

4112

Ford Caminhoes

8000

5111

Riocel Celulose

9000

6111

Riocel Celulose

9000

6112

Elevadores Sur

10000

7111

6.1.2 Executando Consultas sobre as


Tabelas
A equao apresentada na clusula WHERE chamada
de EQUAO DE JUNO.
Podemos utilizar os operadores LIKE, NOT LIKE, IN, NOT IN,
NULL, NOT NULL, os operadores relacionais e operadores
AND, OR e NOT, na clusula WHERE de uma juno de
tabelas.

6.1.2 Executando Consultas sobre as


Tabelas

Quais so os clientes que tm pedidos com prazos de entrega superiores


a 15 dias e que esto localizados nos estados de So Paulo ou do Rio de
Janeiro?
select nome_cli,uf,pedido.num_ped,pedido.prazo_entr
from cliente,pedido
where cliente.cod_cli=pedido.cd_cli
and uf in ('rj','sp')
and prazo_entr>15;

NOME_CLI

UF

NUM_PED

Supermercado Carrefour

rj

1113

30

Supermer cado Arariboia

rj

2112

18

PRAZO_ENTR

6.1.2 Executando Consultas sobre as


Tabelas

Mostrar os pedidos dos


clientes e seus respectivos
prazos de entrega, ordenados
do maior para o menor.

Select nome_cli, pedido.num_ped,


pedido.prazo_entr
from cliente,pedido
where cliente.cod_cli=pedido.cd_cli
order by prazo_entr DESC;

NOME_CLI

NUM_PED PRAZO_ENTR

Riocel Celulose

611 2

60

Supermercado Carrefour

1113

30

Riocel Celulose

6111

30

Elevadores Sur

7111

20

Supermercado Arariboia

2112

18

Supermercado Arariboia

2111

15

UFF

3111

13

Supermercado Carrefour

1111

10

Ford Caminhoes

5111

10

UFF

3112

Pegeout

4111

Pegeout

4112

Supermercado Carrefour

1112

Supermercado Arariboia

2113

6.1.2 Executando Consultas sobre as


Tabelas
Sinnimos
Para que no seja necessrio escrever o nome da tabela nas
qualificaes de nomes, podemos utilizar ALIASES definidos na
prpria consulta.
A definio dos ALIASES feita na clusula FROM, sendo
ento utilizada nas outras clusulas (WHERE, ORDER BY,
GROUP BY, HAVING e SELECT) de uma consulta.

6.1.2 Executando Consultas sobre as


Tabelas

Sinnimos

Exibir os vendedores (ordenados por nome) que emitiram pedidos com prazos
de entrega superiores a 15 dias e que tenham salrios fixos iguais ou
superiores a R$ 1.000,00.
select distinct V.nome_vend,P.prazo_entr
from vendedor V, pedido P
where V.cod_vend=P.cd_vend and
V.sal_fixo>1000 and P.prazo_entr>15
order by V.nome_vend;
NOME_VEND

PRAZO_ENTR

Ana Cristina

60

Armando Pinto

30

6.1.2 Executando Consultas sobre as


Tabelas

Junes Envolvendo Trs ou mais Tabelas

Exiba a relao dos clientes localizados no Rio de Janeiro (ordenados


alfabeticamente) que tm pedidos do produto Chapa de Aco com prazos de
entrega superirores a 15 dias.
select C.nome_cli,PR.desc_prod,P.no_ped,P.prazo_entr
from cliente C,pedido P,item_pedido IP,produto PR
where C.cod_cli=P.cd_cli and
P.num_ped=IP.no_ped and
IP.cd_prod=PR.cod_prod and
PR.desc_prod='Chapa de Aco' and
P.prazo_entr>15 and
C.uf='rj'
order by C.nome_cli;

NOME_CLI DESC_PROD

NO_PED PRAZO_ENTR

Carrefour

1113

Chapa de Aco

30

6.1.2 Executando Consultas sobre as


Tabelas

Junes Envolvendo Trs ou mais Tabelas

Mostre os nome de todos os vendedores que venderam Chapa de Ao


em quantidade superior a 300 Kg.
select distinct V.nome_vend
from vendedor V, pedido P, item_pedido IP, produto PR
where V.cod_vend=P.cd_vend and
P.num_ped=IP.no_ped and
IP.cd_prod=PR.cod_prod and
IP.qtd_ped>300 and

NOME_VEND

PR.desc_prod='Chapa de Aco';
Armando Pinto
Maria Paula
Paulo Alberto

6.1.2 Executando Consultas sobre as


Tabelas

Quantos clientes fizeram pedidos com a vendedora Ana Cristina?


select count(distinct C.cod_cli)
from cliente C, pedido P, vendedor V
where C.cod_cli=P.cd_cli and
P.cd_vend=V.cod_vend and

COUNT(COD_ Cli)
3

V.nome_vend='Ana Cristina';

Quantos clientes das cidades do Rio de Janeiro e Niteri tiveram seus pedidos
tirados com a vendedora Ana Cristina?
select C.cidade,count(distinct C.cod_cli) as num_clientes
from cliente C, pedido P, vendedor V
where C.cod_cli=P.cd_cli and
C.cidade in ('rio de janeiro','niteroi') and
P.cd_vend=V.cod_vend and
V.nome_vend='Ana Cristina'
group by C.cidade;

CIDADE NUM_CLIENT
niteroi

6.1.2 Executando Consultas sobre as


Tabelas

Utilizando Consultas Aninhadas (Subqueries)

Chamamos de consulta aninhada consulta cujo o resultado utilizado


por outra consulta, de forma encadeada e contida no mesmo comando SQL.

Que produtos esto includos em um pedido qualquer com a quantidade


pedida igual a 100?
select desc_prod
from produto

DESC_PROD

where cod_prod IN

Chapa de Ao

(select cd_prod
from item_pedido
where qtd_ped=100);

Cimento
Fio plstico

6.1.2 Executando Consultas sobre as


Tabelas

Utilizando Consultas Aninhadas (Subqueries)

Quais vendedores ganham um salrio fixo abaixo da mdia?


select nome_vend
from vendedor
where sal_fixo <
(select avg(sal_fixo)

NOME_VEND

from vendedor);

Paulo Alberto
Cassia Andrade
Maria Paula

6.1.2 Executando Consultas sobre as


Tabelas

Utilizando Consultas Aninhadas (Subqueries)

Quais os vendedores que s venderam produtos comercializados em


quilogramas (Kg)?
select distinct cod_vend,nome_vend
from vendedor V
where 'kg'=ALL
(select unid_prod
from pedido P,item_pedido IP,produto PR
where P.num_ped=IP.no_ped and
IP.cd_prod=PR.cod_prod and
P.cd_vend=V.cod_vend);

COD_VEND NOME_VEND
15

Maria Paula

6.1.2 Executando Consultas sobre as


Tabelas

Utilizando Consultas Aninhadas (Subqueries)

Quais clientes realizaram mais de dois pedidos?


select nome_cli
from cliente C
where exists
(select count(*)
from pedido
where cd_cli=C.cod_cli
having count(*)>2);

NOME_CLI
Supermercado Carrefour
Supermercado Arariboia

6.1.2 Executando Consultas sobre as


Tabelas

Utilizando Consultas Aninhadas (Subqueries)

Quais os produtos que no esto presentes em nenhum pedido?


select cod_prod,desc_prod
from produto P
where not exists
(select *
from item_pedido
where cd_prod=P.cod_prod);

COD_PROD DESC_PROD
---------- -------------------0 linhas selecionadas.

6.1.2 Inserindo, Modificando e


Excluindo Registros

Inserindo Registros em uma Tabela


INSERT INTO <nome_tabela> (<lista_de_colunas>)
VALUES (<lista_de_valores);

Inserir o produto Tinta de PVC na tabela de produtos.


insert into produto
values (600,l,Tinta PVC,15.80);

Inserindo Registros Usando um SELECT


INSERT INTO <nome_tabela> (<lista_de_colunas>)
SELECT <lista_de_colunas>
FROM <nome_tabela>
WHERE <condio_de_seleo>;

6.1.3 Inserindo, Modificando e


Excluindo Registros

Cadastrar como clientes os vendedores que emitiram mais de 3 pedidos.

Usar para o cdigo de cliente o mesmo cdigo do vendedor. O restante das


colunas devem ser preenchidas com um espao em branco.
insert into cliente (cod_cli, nome_cli,endereco,cidade,cep,uf)
select cod_vend,nome_vend,' ', ' ',' ',' '
from vendedor V
where 3<(select count(*)
from pedido P
where V.cod_vend=P.cd_vend);

2 linhas processadas.

6.1.3 Inserindo, Modificando e


Excluindo Registros

Modificando um Registro
UPDATE <nome_tabela>
SET {<nome_coluna> = <expresso>}
WHERE <condio_de_seleo>;

Alterar o preo unitrio do Cimento para R$ 5,00.


update produto
set val_unit=5.00
where desc_prod=Cimento;

1 linha processada.

Atualizar o salrio fixo de todos os vendedores em 27% mais uma bonificao

de R$ 100,00.
update vendedor
set sal_fixo=(sal_fixo*1.27+100.00);

5 linhas processadas.

6.1.3 Inserindo, Modificando e


Excluindo Registros

Acrescentar 2,5% ao preo unitrio dos produtos que estejam abaixo da mdia
dos preos dos produtos comprados a quilo.
update produto
set val_unit=val_unit*1.025
where val_unit <
(select avg(val_unit)
from produto
where unid_prod=kg);

3 linhas processadas.

6.1.2 Inserindo, Modificando e


Excluindo Registros

Excluindo Registros
DELETE FROM <nome_tabela>
WHERE <condio_de_seleo>;

Excluir todos o itens de pedido que tenham quantidade pedida inferior a 200.
delete from item_pedido
where qtd_ped < 200;

6 linhas processadas.

Excluir todos os vendedores que no realizaram nenhum pedido.


delete from vendedor V
where 0=(select count(*)
from vendedor,pedido
where V.cod_vend=cd_vend);

1 linha processada.

You might also like