You are on page 1of 40

BANCODEDADOS I

Modelo de Relacional, lgebra Relacional, Sql

O MODELO RELACIONAL
O Modelo Relacional representa a base de dados como uma coleo de relaes. Uma
relao concebida como uma tabela de valores, cada linha da tabela representa uma
coleo de valores de dados relacionados. Estes valores podem ser interpretados como fatos
que descrevem uma entidade ou um relacionamento do mundo real. Os nomes de tabelas e
nomes de colunas servem tambm para auxiliar na interpretao do significado dos valores
em cada linha de cada tabela.
Na terminologia do Modelo Relacional, uma linha chamada TUPLA, o cabealho de uma
coluna chamado ATRIBUTO e a tabela chamada RELAO. Os tipos de dados que
descrevem os tipos de valores que podem aparecer em cada coluna so chamados de
DOMNIO.
Domnio
Um domnio D um conjunto de valores atmicos, isto , cada valor do domnio
indivisvel segundo o contexto sobre o qual o modelo concebido. Um mtodo comum de
especificar um domnio consiste em especificar o tipo de dado segundo o qual os valores
dos dados que formam o domnio so estabelecidos.
Exemplos
Alunos_Matrculas: Conjunto de 5 dgitos vlidos como matrcula
Alunos_Datas_Nascimento: Conjunto de datas vlidas.
Alm de nome, tipo de dado e formato, informaes adicionais podem ser fornecidas para
facilitar a interpretao dos valores do domnio.
Exemplos
Alunos_Datas_Nascimento: Conjunto de datas compreendidas entre 01/01/1950 e
31/12/1982.
Alunos_Sexo: Deve ser M ou F.

RELAO (Relation Schema R)


Uma relao R, denotada por R(A1, A2, . . . , An), representa uma relao de nome R e
uma lista de atributos A1, A2, . . . , An. Cada atributo Ai refere-se a um domnio
correspondente D na relao R. D chamado de domnio de Ai e denotado por dom(Ai).
O grau da relao R o nmero de atributos que ela contm.
Exemplo:
ALUNO ( Matrcula, Nome, DataNascimento, Sexo )
ALUNO o nome da Relao e seu grau 4 porque tem quatro atributos. Seus
domnios so:
dom ( Matrcula ) = Matrculas
dom ( Nome ) = Nomes
dom ( DataNascimento ) = Datas_Nascimento
dom ( Sexo ) = Sexos
TUPLA
Uma instncia r de uma relao R(A1, A2, . . . , An), tambm denotada por r(R), um
conjunto de n-tuplas r = { t1, t2, ..., tm }. Cada n-tupla t uma lista ordenada de n valores t
= <v1, v2, ..., vn>, onde cada valor vi, 1<i<n, um elemento do domnio dom (Ai) ou
nulo.
Exemplo:
Nome da Relao

Atributos

Tuplas
ALUNO

Matrcula

Nome

DataNascimento

Sexo

A instncia de uma relao em um determinado momento reflete somente as tuplas vlidas


que representam um estado particular do mundo real. Em geral, como o estado do mundo
real muda, muda tambm a instncia da relao, transformando-se em outro estado.
Entretanto, o esquema da relao, R, relativamente esttico e raramente muda, como por
exemplo, quando adicionamos um novo atributo para representar uma nova informao que
no existia originalmente. possvel que vrios atributos, de uma mesma relao ou de
relaes diferentes, compartilhem o mesmo domnio. Os atributos indicam diferentes
interpretaes para o domnio. Por exemplo, o domnio Datas_Nascimento para o atributo
DataNascimento da relao ALUNO significa a data de nascimento do aluno, j para a
relao PROFESSOR, representar a data de nascimento do professor.

CARACTERSTICAS DAS RELAES


Ordenao das tuplas na relao
Uma relao definida como um conjunto de tuplas. Matematicamente, elementos de um
conjunto no tm nenhuma ordem entre si, portanto, tuplas em uma relao no tm uma
ordem particular. Entretanto, em um arquivo, registros so fisicamente armazenados no
disco de tal forma que existe a uma ordem entre os registros. Esta ordem indica o primeiro,
segundo, etc., e o ltimo registro no arquivo. Assim, quando listamos o contedo de uma
relao como uma tabela, as linhas aparecem em uma determinada ordem.
A ordenao das tuplas no faz parte da definio relacional, porque a relao tenta
representar fatos em um nvel lgico ou abstrato. Muitas ordens lgicas podem ser
especificadas em uma relao.
Ordenao dos valores na tupla
Analogamente definio precedente de uma relao, uma n-tupla uma lista ordenada de
n valores, assim a ordenao de valores em uma tupla e portanto de atributos em uma
definio de relao importante. Entretanto, em um nvel lgico, a ordem dos atributos e
seus valores no so realmente importante tanto como a correspondncia entre atributos e
seus valores.
3

Uma definio alternativa de relao


Considerando-se desnecessria a ordenao de valores em uma tupla, pode-se consider-la
como um conjunto de pares (<atributo>,<valor>), onde cada par fornece o valor para cada
atributo.
Exemplo:
t = < ( Matrcula, ________ ) , ( Nome, _________ ) , ( DataNascimento , _____ ) , ( Sexo , __ ) >
t = < (Nome, ________ ) , (Sexo, _________ ) , (Matrcula, _____ ) , (DataNascimento, _____) >

Valores nas tuplas


Cada valor em uma tupla um valor atmico, isto , indivisvel no contexto do modelo
relacional. Portanto, atributos compostos e multivalorados no so permitidos. A est a
importncia das tcnicas de normalizao. Os valores de alguns atributos em uma tupla em
particular podem ser desconhecidos ou no existirem para esta tupla. Um valor especial,
denominado nulo, usado para estes casos.
Notao para o modelo relacional
Relao R de grau n
Tupla t na relao r (R)




Nomes de Relaes
Instncias de Relaes
Tuplas





R ( A1 , A2 , ... , An )
t = < v1 , v2 , ... , vn >
Onde vi o valor correspondente ao atributo Ai.
Q,R,S
q,r,s
t,u,v

Nomes dos atributos podem ser qualificados com o nome da relao a que pertencem, por exemplo:
ALUNO.Matrcula, ALUNO.Nome, etc.

RESTRIES NO MODELO RELACIONAL


Restries de domnio
Restries de domnio especificam que o valor de cada atributo A deve ser um valor
atmico pertencente ao domnio dom(A) para este atributo. Os tipos de dados associados a
domnios incluem os numricos inteiros, reais, caracteres, strings de tamanho fixo, strings

de tamanho varivel, data, etc. Os domnio podem ainda especificar um conjunto de valores
vlidos explicitamente identificados.
Restries de Chave ( Chave Primria = Primary Key )
Uma relao definida como um conjunto de tuplas. Por definio, todos os elementos do conjunto so
distintos, portanto, todas as tuplas em uma relao devem tambm ser distintas. Isto significa que no pode
haver duas tuplas com a mesma combinao de valores para todos os atributos.

Restrio de Integridade de Entidade


A restrio de integridade de entidade estabelece que o valor para a chave primria no
pode ser nulo. Isto porque o valor da chave primria usado para identificar
individualmente tuplas de uma relao.
Restries de chave e restries de integridade de entidade so especificadas para cada
relao individualmente.
Restrio de Integridade Referencial
A restrio de integridade referencial especificada entre duas relaes e usada para
manter a consistncia entre as tuplas dessas duas relaes. A restrio de integridade
referencial estabelece que uma tupla em uma relao que se refere a outra relao deve se
referir a uma tupla existente da outra relao.

Chave Estrangeira ( Foreign Key )

As duas condies citadas a seguir, estabelecem a restrio de integridade referencial entre


duas relaes R1 e R2. Um atributo, ou conjunto de atributos, FK em uma relao R1,
(so) uma chave estrangeira de R1 se:
1. O(s) atributo(s) FK tem o mesmo domnio do(s) atributo(s) da chave primria PK da
relao R2; diz-se que o(s) atributo(s) FK refere(m)-se relao R2.

2. O(s) valor(es) de FK na tupla t1 de R1 existe(m) como o valor de uma PK em


alguma tupla de R2 ou nulo.
Formalmente: t1 [FK] = t2 [PK].

Importante
Em um banco de dados de muitas relaes, existem geralmente muitas restries de
integridade referencial. Para especificar estas restries, deve-se primeiro ter uma clara
compreenso do significado do papel de cada atributo das vrias relaes do esquema do
banco de dados. As restries de integridade referencial surgem dos relacionamentos entre
as entidades.
Exemplo:
PROFESSOR
Nome

DataNascimento

Sexo

CodigoDepartamento

CPF
DEPARTAMENTO
Nome
Codigo
CURSO
Nome

CodigoDepartamento

Codigo

Todas as restries de integridade devem ser especificadas se desejamos manter as


restries para todas as instncias do banco de dados. Portanto, em um sistema relacional, a
linguagem de definio de dados (DDL) deve prover recursos para especificar os vrios
tipos de restries para que o sistema gerenciador do banco de dados possa cumpri-los
automaticamente.

Exemplos de Relao
Nome da relao

DEPARTAMENTO

Codigo
01
02
03

atributos

Nome
Financeiro
Engenharia
Comercial

tupla

Figura 1

CARGO

Codigo
01
02
03
04
05
06
07

Nome
Advogado
Analista de Sistemas
Contador
Engenheiro
Programador
Medico
Auxiliar de Escritrio

Salario
3000,00
4000,00
1000,00
4000,00
1500,00
4000,00
400,00

Figura 2

EMPREGADO

Codigo
001
002
003
004
005
006
007
008
009

Nome
Maria Araujo
Carla Figueiredo
Marcio Francisco
Maria Bonita
Francisco Carlos
Rezende Rocha
Marcia dos Anos
Jos Ferreira
Ferreira Fado

DataNascimento
10/10/70
02/05/76
30/06/49
20/07/80
18/08/72
25/03/60
27/12/55
02/03/51
14/11/55

Figura 3

CodDep CodCargo
01
03
02
01
01
02
03
05
02
02
01
01
03
03
02
01
01
02

DER Diagrama de Entidades x Relacionamentos correspondente s relaes


anteriores

DEPARTAMENTO
1

N
1

EMPREGADO

CARGO

LGEBRA RELACIONAL
A lgebra relacional consiste de um conjunto de operaes que tm como entrada um ou
mais relaes e produzem como sada uma nova relao
Operaes Fundamentais
As operaes fundamentais da lgebra relacional so: Insert, Delete, Modify, Select,
Project, Union, Set difference, Cartesian Product e Rename.

Outras Operaes
Alm das operaes fundamentais a lgebra relacional define outras operaes, tais como:
Namely, Set intersection, Natural Join, Division e Assinment.
Operaes primrias
So as operaes que operam com uma nica relao.
Operaes binrias
So as operaes que operam com duas relaes.

A Operao INSERT
Insere uma nova tupla(linha) em uma relao. A operao insert pode violar todas as
restries de integridade de uma relao.
Estrutura geral do comando
Insert (v1,v2,v3,...vn) into Relao
Relao objeto do comando Insert

Valores dos atributos da relao Insert

Exemplo
Insert (20,Departamento de Marketing) into DEPARTAMENTO
Resultado
Se ns considerarmos a relao DEPARTAMENTO como aquela da figura 1, ento
o resultado dessa operao, um relao cujo contedo o mostrado abaixo:
DEPARTAMENTO

Codigo
01
02
03
20

Nome
Financeiro
Engenharia
Comercial
Marketing

Figura 4: Relao DEPARTAMENTO aps a incluo do departemnto de Marketing

10

A Operao DELETE
Exclui fisicamente uma tupla(linha) de uma relao. Esta operao pode violar a restrio
de integridade referencial de uma relao.
Estrutura geral do comando
Delete from Relao with condio
Condio de excluso da tupla

Relao objeto da operao Deletet

Exemplo
Delete from DEPARTAMENTO with Cdigo = 20
Resultado
Se ns considerarmos a relao DEPARTAMENTO como aquela da figura
anterior, ento o resultado dessa operao, um relao cujo contedo o
mostrado abaixo:
DEPARTAMENTO

Codigo
01
02
03

Nome
Financeiro
Engenharia
Comercial

Figura 5: Relao DEPARTAMENTO aps a excluso do departamento de codigo


= 20

11

A Operao MODIFY
Altera o contedo dos campos de uma tupla(linha) de uma relao. Esta operao pode
violar todas as restries de integridade da relao.
Estrutura geral do comando
Modify Relao a1 = v1, a2=v2,...na=v2 with condio
Condio de excluso da tupla
v1, v2,..vn so os novos valores dos campos da tupla

a1, a2,..an so os campos da tupla a serem alterados


Relao objeto da operao Modifyt

Exemplo
Modify DEPARTAMENTO Nome = Recursos Humanos with Cdigo = 20
Resultado
Se ns considerarmos a relao DEPARTAMENTO como aquela da figura 4, ento
o resultado dessa operao, um relao cujo contedo o mostrado abaixo:
DEPARTAMENTO

Codigo
01
02
03
20

Nome
Financeiro
Engenharia
Comercial
Recursos Humanos

Figura 6: Relao com o nome do departamento 20 mudado para "Recursos


Humanos"

12

A Operao SELECT
A operao select seleciona tuplas(linhas) de uma relao que satisfaam a uma
determinada condio (predicado).
Estrutura geral do comando

predicado (Relao)
Relao objeto da operao
Condio de seleo das linhas
Operador representativo da operao select

Exemplos
a) Obter uma relao com os empregados cujo CodCargo = 3 (Departamento
Comercial).

nome = Comercial (EMPREGADO)


Se ns considerarmos a relao EMPREGADO como aquela da figura 3, ento o
resultado dessa operao, um relao cujo contedo o mostrado abaixo:

Codigo
001
007

Nome
Maria Araujo
Marcia dos Anos

DataNascimento
10/10/70
27/12/55

CodDep CodCargo
01
03
03
03

Figura 7: Relao dos empregados com os atributos: codigo e nome

b) Obter um relao dos empregados, do departamento financeiro (CodDep = 01)


que nasceram a partir de 14/11/55.

CodDep = 01 DataNascimento = 01/11/55 (EMPREGADO)


13

Considerando, novamente a relao EMPREGADO, da figura 3, a operao,


acima, produz uma relao com o seguinte contedo:
Codigo
001
003
006
009

Nome
Maria Araujo
Marcio Francisco
Rezende Rocha
Ferreira Fado

DataNascimento
10/10/70
30/06/49
25/03/60
14/11/55

CodDep CodCargo
01
03
01
02
01
01
01
02

Figura 8: Relao dos empregados, do departamento fimanceiro, nascidos a partir de


14/11/55.

14

A Operao PROJECT

A operao project obtm uma relao cujos atributos so um subconjunto dos atributos de
uma outra relao.
Estrutura geral do comando

predicado (Relao)
Relao objeto da operao
Atributos da relao a serem obtidos
Operador representativo da operao project

Exemplos
a) Listar o cdigo e o nome de todos os empregados constantes da relao
EMPREGADO. Tuplas (linhas) duplicadas obtidas, so ignoradas, e no fazem
parte da relao resultante.

Codigo, Nome (EMPREGADO),


Se ns considerarmos a relao EMPREGADO como aquela da figura 3, ento
o resultado dessa operao, um relao cujo contedo o mostrado abaixo:

Codigo
001
002
003
004
005
006
007
008
009

Nome
Maria Araujo
Carla Figueiredo
Marcio Francisco
Maria Bonita
Francisco Carlos
Rezende Rocha
Marcia dos Anos
Jos Ferreira
Ferreira Fado

Figura 9: Relao com os atributos: Cdigo e Nome do empregado

Repare que a relao produzida contm, apenas, os atributos especificados no


predicado da operao project (Cdigo, Nome).

15

b) Listar o nome e o salrio correspondentes de cada ocorrncia da relao


CARGO (figura 2).Tuplas (linhas) duplicadas obtidas, so ignoradas, e no
fazem parte da relao resultante.

Nome, Salario (CARGO)


Se ns considerarmos a relao CARGO, como aquela da figura 2, ento o
resultado dessa operao, um relao cujo contedo o mostrado a seguir:
Nome
Advogado
Analista de Sistemas
Contador
Engenheiro
Programador
Medico
Auxiliar de Escritrio

Salario
3000,00
4000,00
1000,00
4000,00
1500,00
4000,00
400,00

Figura 10: Relao dos cargos com os atributos: Nome e Salrio

Repare que a relao produzida contm, apenas, os atributos especificados no


predicado da operao project (Cdigo, Nome).
c) Produzir, a partir da relao EMPREGADO, uma relao cujos atributos so:
CodDep e CodCargo.

CodDep, CodCargo (EMPREGADO)


Considerando a relao de empregados da figura 3, a operao anterior produz
a seguinte relao:
CodDep CodCargo
01
03
02
01
01
02
03
05
02
02
01
01
03
03
Figura 11: Relao com os atributos: CodDep e CodCargo

16

Repare que as linhas da relao Empregado correspondentes aos empregados de


Codigo 008 e 009, no aparecem na relao obtida. Elas tm o mesmo CodDep
e CodCargo das linhas referentes aos empregados de cdigo 002 e 003,
respectivamente, portanto, na relao resultante, elas estariam duplicadas
(mesmo contedo de todos os atributos). O que no permitido pela operao
Project.

17

A Operao ASSIGNMENT (ATRIBUIO)


vezes, precisamos dar nome relao resultante de uma operao da lgebra relaciona.
Fazemos isto com a operao assignment.
Estrutura geral do comando
Nome Operao da lgebra Relacional
Qualquer operao da lgebra Relacional
Nome da relao resultante da operao

Exemplos
a) Obter a relao Empregados Especiais, a partir da relao Empregado, da
figura 3. A nova relao deve conter, apenas, o nome dos empregados.
Empregados Especiais Nome (EMPREGADO)
A relao Empregados Especiais teria o contedo, abaixo:

Nome
Maria Araujo
Carla Figueiredo
Marcio Francisco
Maria Bonita
Francisco Carlos
Rezende Rocha
Marcia dos Anos
Jos Ferreira
Ferreira Fado
Figura 12: Relao Empregados Especiais

b) Listar o nome dos empregados do departamento de Financeiro, a partir da


relao mostrada na figura 3.
Para obter a lista precisamos aplicar relao EMPREGADO uma operao
select para obter os empregados do departamento financeiro (CodDep = 01) e

18

na relao resultante aplicar a operao project para obter o nome dos


empregados.
Como o resultado de uma operao da lgebra relacional, uma relao,
podemos escrever, uma soluo para obter a lista seria:
Nome (CodDep = 01 (EMPREGADO))
Obtm uma relao dos empregados do departamento
financeiro com todos os atributos de empregado
Obtm a relao com o nome dos empregados

A relao resultante da expresso anterior, seria:


Nome
Maria Araujo
Marcio Francisco
Rezende Rocha
Ferreira Fado
Figura 13: Lista dos empregados do departamento Financeiro (CodDep = 01)

Uma outra alternativa para obter a lista, seria usar a operao de assignment,
assim:
TEMP CodDep = 01 (EMPREGADO)  Obtm a relao TEMP com os
empregados com CodDep = 01
(departamento Financeiro)
Nome (TEMP)  Obtm a lista com o nome dos empregados, conforme
mostrado na figura 10.

19

A Operao JOIN (JUNO)


Esta operao usada para combinar tuplas (linhas) de duas relaes que sejam associadas
atravs de dois ou mais de seus atributos. Ela permite trabalhar o relacionamento entre as
relaes. A operao join despreza linha duplicadas obtidas.
Estrutura geral do comando
Relao1

predicado (Relao2)

Segunda relao objeto da operao de juno


Condio de juno entre as duas relaes
Operador representativo da operao

Primeira relao objeto da operao

Exemplos
b) Obter uma relao que contenha o codigo e nome do departamento e, os dados
dos empregados a ele associados. As duas relaes: DEPARTAMENTO e
EMPREGADO

esto

associadas

atravs

dos

atributos:

Cdigo

de

DEPARTAMENTO (figura 1) e CodDep de EMPREGADO (figura 3).


A expresso a seguir produz a relao pedida
DEPARTAMENTO

departamento.cdigo = empregado.coddep (EMPREGADO)

Departamento. Departamento Codigo Nome


Data
Codigo
.Nome
Nascimento
01
Financeiro
001
Maria Araujo
10/10/70
01
Financeiro
003
Marcio Francisco 30/06/49
01
Financeiro
006
Rezende Rocha
25/03/60
01
Financeiro
009
Ferreira Fado
14/11/55
02
Engenharia
002
Carla Figueiredo
02/05/76
02
Engenharia
005
Francisco Carlos
18/08/72
02
Engenharia
008
Jos Ferreira
02/03/51
03
Comercial
004
Maria Bonita
20/07/80
03
Comercial
007
Marcia dos Anos
27/12/55
Figura 14: Relao dos departamentos com os seus repectivos empregados

20

Cd
Dep
01
01
01
01
02
02
02
03
03

Cd
Cargo
03
02
01
02
01
02
01
05
03

SQL Strutured Query Linguage


a linguagem padro de criao e manipulao dos bancos de dados relacionais.
constituda das seguintes partes:
 Linguagem de Definio de Dados DDL
Proporciona comandos para a criao, excluso e alterao de relaes e criao de
ndices de uma relao, definio de vises, especificao de direitos de acesso e
especificao de regras de integridade de dados de um banco de dados relacional.
 Linguagem de Manipulao de Dados DML
Proporciona comandos para recuperao (consulta) de dados em um banco de dados
relacional
A seguir apresentamos o comando de recuperao de dados com suas respectivas clusulas
e condies.

21

1. RECUPERANDO PARTE DOS DADOS DE UMA TABELA


Os dados recuperados em uma consulta so especificados entre a palavra SELECT e a
palavra FROM de um comando SELECT.
1.1. Exemplo
Listar o cdigo e o nome de cada empregado.
1.2. Soluo
SELECT

FROM

Codigo,
Nome

Atributos a serem listados

Empregado

Tabela onde esto os atributos


a serem listados

1.3. Resultado
Codigo
001
002
003
004
005
006
007
008
009

Nome
Maria Araujo
Carla Figueiredo
Marcio Francisco
Maria Bonita
Francisco Carlos
Rezende Rocha
Marcia dos Anos
Jos Ferreira
Ferreira Fado

1.4. Observaes
Observe que esto listados, apenas, os atributos especificados no comando
SELECT, apesar da tabela conter outros atributos

22

2. RECUPERANDO DADOS DE UMA TABELA OBEDECENDO


DETERMINADAS CONDIES.
As condies de recuperao de dados de uma ou mais tabelas so especificadas na
clusula WHERE do comando SELECT
2.1. Listar o cdigo, o nome e a data de nascimento dos empregados de cdigo 001 e
003.
2.2. Soluo

SELECT

Codigo,
Nome,
DataNascimento

Atributos a serem recuperados do banco

Tabela onde esto os atributos a serem


listados

FROM

Empregado

WHERE

Codigo = 001 OR Codigo = 005

Condio para
recuperao dos dados

2.3. Resultado
Codigo
001
005

Nome
Maria Araujo
Francisco Carlos

DataNascimento
10/10/70
18/08/72

2.4. Observaes

Repare que, apenas, os empregados cujos atributos satisfazem a condio


especificada na clusula WHERE foram listados.

23

3. LISTANDO TODOS OS ATRIBUTOS DE UMA TABELA.


Para listar todos os dados de uma tabela basta especificar no lugar do nome dos
atributos a serem listados um * logo em seguida palavra SELECT.
3.1. Listar todos os atributos de cada cargo
3.2. Soluo
SELECT

FROM

O asterisco indica que todos os atributos da


tabela Empregado sero listados

Cargo

Tabela onde esto os atributos a serem


listados

3.3. Resultado
Codigo
01
02
03
04
05

Nome
Advogado
Analista de Sistemas
Contador
Engenheiro
Programador

Salario
3000,00
4000,00
1000,00
4000,00
1500,00

24

4. RECUPERANDO DADOS DE MAIS DE UMA TABELA.


A recuperao de dados de mais de uma tabela requer a utilizao da clausula WHERE
para associar uma tabela outra, a menos que se queira fazer o produto cartesiano entre
as tabelas considerados.
4.1. Exemplo
Listar o cdigo, o nome e o nome do cargo de cada empregado.
4.2. Soluo
SELECT

FROM

Empregado.Codigo,
Empregado.Nome,
Cargo.Nome

Atributos a serem recuperados do banco

Empregado,
Cargo

Tabelas onde esto os atributos a serem


listados
Ordem de apresentao dos dados

WHERE

Cargo.Codigo = Empregado.CodCargo

4.3. Resultado
Codigo
001
002
003
004
005
006
007
008
009

Nome
CodCargo
Maria Araujo
Contador
Carla Figueiredo
Advogado
Marcio Francisco Analista de Sistemas
Maria Bonita
Programador
Francisco Carlos Analista de sistemas
Rezende Rocha
Advogado
Marcia dos Anos
Contador
Jos Ferreira
Advogado
Ferreira Fado
Analista de Sistema

25

Associa cada empregado


ao seu cargo

5. RECUPERANDO DADOS DE MAIS DE UMA TABELA COM RESTRIES


DE SELEO.
5.1. Exemplo
Listar o cdigo, o nome e o nome do cargo de cada empregado. Somente os
empregados vinculados aos departamentos 01 e 03 devem ser listados.
5.2. Soluo
SELECT

Empregado.Codigo,
Empregado.Nome,
Cargo.Nome

Atributos a serem recuperados do banco

FROM

Empregado,
Cargo

Tabelas onde esto os atributos a serem


listados

WHERE

Cargo.Codigo = Empregado.CodCargo
AND
(Empregado.CodDep = 01
AND
Empregado.CodDep = 03)

Associa cada empregado


ao seu cargo e seleciona
os departamentos 01 e 03
exigidos

5.3. Resultado
Codigo
001
003
004
006
007
009

Nome
CodCargo
Maria Araujo
Contador
Marcio Francisco Analista de Sistemas
Maria Bonita
Programador
Rezende Rocha
Advogado
Marcia dos Anos
Contador
Ferreira Fado
Analista de Sistema

5.4. Observaes

Repare que a associao entre as tabelas e as condies de seleo dos dados


aparecem todas na clusula WHERE.

26

6. ORDENANDO DADOS RECUPERADOS.


Os dados recuperados podem ser ordenados de acordo com nossa necessidade. A
ordenao dos dados feita pela clausula SORT do comando SELECT.
6.1. Exemplo
Listar o cdigo, o nome e a data de nascimento dos empregados de cdigo 001 e
003. Mostrar a lista em ordem crescente de nome do empregado.
6.2. Soluo

SELECT

Codigo,
Nome,
DataNascimento

Atributos a serem recuperados do banco

Tabela onde esto os atributos a serem


listados

FROM

Empregado

WHERE

Codigo = 001 OR Codigo = 005

Condio para
recuperao dos dados
Ordenando por nome

ORDER BY Nome

6.3. Resultado
Codigo
005
001

Nome
Francisco Carlos
Maria Araujo

DataNascimento
18/08/72
10/10/70

6.4. Observaes

Repare que a lista est ordenada pela coluna Nome

27

7.

MUDANDO O TITULO DE UMA COLUNA.

Listar o cdigo, o nome e a data de nascimento de cada empregado. Mudar o cabealho


da coluna DataNascimento para Dada de Nascimento.
7.1. Soluo

SELECT

FROM

Codigo,
Nome,
DataNascimento AS Data de Nascimento

Mudando o ttulo da
coluna

Tabela onde esto os atributos a serem


listados

Empregado

7.2. Resultado
Codigo
001
002
003
004
005
006
007
008
009

Nome
Maria Araujo
Carla Figueiredo
Marcio Francisco
Maria Bonita
Francisco Carlos
Rezende Rocha
Marcia dos Anos
Jos Ferreira
Ferreira Fado

Data de Nascimento
10/10/70
02/05/76
30/06/49
20/07/80
18/08/72
25/03/60
27/12/55
02/03/51
14/11/55

Repare que o cabealho da coluna correspondente data de nascimento, na lusta, foi


mudada de DataNascimento para Data de Nascimento.

28

8. RECUPERANDO DADOS DE MAIS DE DUAS TABELAS.


Listar o cdigo e o nome do empregado, o cdigo do departamento onde ele est
vinculado e o nome do seu cargo e salrio. A coluna correspondente ao nome do
departamento deve Ter o ttulo: Departamento e a correspondente ao nome do cargo:
Cargo. Mostrar a lista em ordem decrescente de salrio.
8.1. Soluo
SELECT

Empregado.Codigo,
Empregado.Nome,
Mudando o ttulo da coluna
correspondente ao nome do
departamento e do cargo

Departamento.Nome AS Departamento,
Cargo.Nome AS Cargo,
Cargo.Salario

Tabela onde esto os atributos a serem


listados

FROM

Empregado,
Departamento,
Cargo

WHERE

Departamento.Codigo = Empregado.CodDep

Associa o Empregado ao
seu Departamento

AND
Empregado.CodCargo = Cargo.Codigo

Associa o Empregado ao
seu Cargo
Ordenando por salario
de modo decrescente

ORDER BY Cargo.Salario DESC

8.2. Resultado
Codigo
003
005
009
002
006
008
004
001
007

Nome
Marcio Francisco
Francisco Carlos
Ferreira Fado
Carla Figueiredo
Rezende Rocha
Jos Ferreira
Maria Bonita
Maria Araujo
Marcia dos Anos

Departamento
Financeiro
Engenharia
Financeiro
Engenharia
Financeiro
Engenharia
Comercial
Financeiro
Comercial

Cargo
Analista de Sistemas
Analista de Sistemas
Analista de Sistemas
Advogado
Advogado
Advogado
Programador
Contador
Contador

Salario
4000,00
4000,00
4000,00
3000,00
3000,00
3000,00
1500,00
1000,00
1000,00

Repare os ttulos das colunas Departamento e Cargo alterados e a ordem de


apresentao da lista. Do maior salrio para o menor.

29

9. UTILIZANDO A FUNO DE AGREGAO: COUTN()


Listar a quantidade de empregados por cargo. A lista deve conter o cdigo do cargo e a
quantidade obtida. A coluna correspondente quantidade de empregados deve ter o
ttulo: Quantidade.

9.1. Soluo
Mudando o ttulo da coluna
SELECT

Empregado.CodCargo AS Cargo,
COUNT(Empregado.Codigo) AS Quantidade

FROM

Contando os empregados
e mudando o ttulo da
coluna

Tabela onde esto os atributos a serem


listados

Empregado

Agrupando a quantidade de
empregados por cargo

GROUP BY Empregado.CodCargo

9.2. Resultado
Cargo
01
02
03
05

Quantidade
03
03
02
01

9.3. Observaes

Repare os ttulos das colunas. Recorra ao contedo da tabela Empregado para


conferir o resultado da lista obtida.

30

10. UTILIZANDO A FUNO DE AGREGAO: SUM()


Listar a soma dos salrios dos empregados de cada cargo. A lista deve conter o cdigo
do cargo e a soma dos salrios obtida. A coluna correspondente soma dos salrios
deve ter o ttulo: Salrio.

10.1. Soluo

SELECT

Empregado.CodCargo AS Cargo,
SUM(Cargo.Salario) AS Salario

Mudando o ttulo da coluna


Somando os salrios dos
empregados e mudando o
ttulo da coluna

Tabelas onde esto os atributos a serem


listados

FROM

Cargo, Empregado

WHERE

Cargo.Codigo = Empregado.CodCargo

Associando o cargo ao
empregado
Agrupando a soma dos salrios dos
empregados por cargo

GROUP BY Empregado.CodCargo

10.2. Resultado
Cargo
01
02
03
05

Salrio
9.000,00
12.000,00
2.000,00
1.500,00

Repare os ttulos das colunas. Recorra ao contedo das tabelas Empregado e Cargos
para conferir o resultado da lista obtida.
Observe que s foram listados os cargos para os quais tem algum empregado
vinculado.

31

11. UTILIZANDO A FUNO DE AGREGAO: MIN()


Listar o menor salrio de cada departamento. A lista deve conter o cdigo, o nome e o
menor salrio do departamento. A coluna correspondente ao menor salrio deve ter o
ttulo: Menor Salrio.
11.1. Soluo
SELECT

Departamento.Codigo,
Departamento.Nome,
Obtendo o menor salrio e
mudando o ttulo da
coluna

MIN(Cargo.Salario) AS Menor Salario

Tabelas onde esto os atributos


a serem listados

FROM

Departamento, Cargo, Empregado

WHERE

Cargo.Codigo = Empregado.CodCargo
AND
Empregado.CodDep= Departamento.Codigo

Associando o
empregado ao cargo ao
departamento

Agrupando os menores salrios por


departamento

GROUP BY Departamento.Codigo
Departamento.Nome

11.2. Resultado
Codigo
01
02
03

Nome
Financeiro
Engenharia
Comercial

Menor Salrio
1.000,00
3.000,00
1.000,00

11.3. Observaes
Repare os ttulos das colunas. Recorra ao contedo das tabelas Departamento,
Empregado e Cargos para conferir o resultado da lista obtida.
Observe que s foram listados os departamentos para os quais tem algum
empregado vinculado.
Repare que as clusulas FROM e WHERE fazem referncia tabela
Empregado, embora nenhum dado desta tabela pedido na lista. Ela aparece

32

porque est no caminho dos relacionamentos que conduzem a tabela


Departamento (que contm dados a serem listados) e a tabela Cargo (que
contm dados a serem listados). Na realidade o menor salrio diz respeito aos
empregados vinculados aos departamentos.

33

12. UTILIZANDO A FUNO DE AGREGAO: MAX()


Listar o maior salrio de cada departamento. A lista deve conter o cdigo, o nome e o
maior salrio do departamento. A coluna correspondente ao maior salrio deve ter o
ttulo: Maiorr Salrio.
12.1. Soluo

SELECT

Departamento.Codigo,
Departamento.Nome,
Obtendo o maior salrio e
mudando o ttulo da
coluna

MAX(Cargo.Salario) AS Maior Salario

Tabelas onde esto os atributos


a serem listados

FROM

Departamento, Cargo, Empregado

WHERE

Cargo.Codigo = Empregado.CodCargo
AND
Empregado.CodDep= Departamento.Codigo

Associando o o
empregado cargo e ao
departamento

Agrupando o maior salrio por


departamento

GROUP BY Departamento.Codigo,
Departamento.Nome

12.2. Resultado
Codigo
01
02
03

Nome
Financeiro
Engenharia
Comercial

Maior Salrio
4.000,00
4.000,00
1.500,00

12.3. Observaes
Repare os ttulos das colunas. Recorra ao contedo das tabelas Departamento,
Empregado e Cargos para conferir o resultado da lista obtida.

34

Observe que s foram listados os departamentos para os quais tem algum


empregado vinculado.
Repare que as clusulas FROM e WHERE fazem referncia tabela
Empregado, embora nenhum dado desta tabela pedido na lista. Ela aparece
porque porque est no caminho dos relacionamentos que conduzem a tabela
Departamento (que contm dados a serem listados) e a tabela Cargo (que
contm dados a serem listgados). Na realidade o menor salrio diz respeito aos
empregados vinculados aos departamentos.

35

13.

UTILIZANDO A FUNO DE AGREGAO: AVG()

A clusula AVG calcula a mdia aritmtica dos valores de uma determinada coluna.
Linhas cuja coluna tenha valor nulo no entra no clculo da mdia.
13.1. Exmplo
Listar o mdia dos salrios de cada departamento. A lista deve conter o cdigo, o
nome e a mdia dos salrios do departamento. A coluna correspondente mdia
dos salrios deve ter o ttulo: Media dos Salrios.
13.2. Soluo
SELECT

Departamento.Codigo,
Departamento.Nome,
Obtendo mdia dos
salrios e mudando o
ttulo da coluna

AVG(Cargo.Salario) AS Mdia dos Salarios

Tabelas onde esto os atributos


a serem listados

FROM

Departamento, Cargo, Empregado

WHERE

Cargo.Codigo = Empregado.CodCargo
AND
Empregado.CodDep= Departamento.Codigo

Associando o
empregado ao cargo e ao
departamento

Agrupando mdia dos salrios por


departamento

GROUP BY Departamento.Codigo,
Departamento.Nome
13.3. Resultado
Codigo
01
02
03

Nome

Media dos
Salarios
3.000,00
3.333,33
1.250,00

Financeiro
Engenharia
Comercial

36

13.4. Observaes
Repare os ttulos das colunas. Recorra ao contedo das tabelas Departamento,
Empregado e Cargo para conferir o resultado da lista obtida.
Observe que s foram listados os departamentos para os quais tem algum
empregado vinculado.
Repare que as clusulas FROM e WHERE fazem referncia tabela
Empregado, embora nenhum dado desta tabela pedido na lista. Ela aparece
porque est no caminho dos relacionamentos que conduzem a tabela
Departamento (que contm dados a serem listados) e a tabela Cargo (que
contm dados a serem listados). Na realidade o menor salrio diz respeito aos
empregados vinculados aos departamentos.

37

14. UTILIZANDO A CLAUSULA: HAVING()


A clausula HAVING utilizada para selecionar dados (filtrar) obtidos por uma funo
de agregao. Ela seleciona os dados depois que eles so agrupados, diferentemente da
clausula WHERE que seleciona antes.
14.1. Exemplo
Listar os departamentos cuja mdia dos salrios sejam menor que R$ 3.000,00. A
lista deve conter o cdigo, o nome e a mdia dos salrios do departamento. A
coluna correspondente mdia dos salrios deve ter o ttulo: Mdia dos Salrios.
14.2. Soluo
SELECT

Departamento.Codigo,
Departamento.Nome,
Obtendo a mdia dos
salrios e mudando o
ttulo da coluna

AVG(Cargo.Salario) AS Menor Salario

Tabelas onde esto os atributos


a serem listados

FROM

Departamento, Cargo, Empregado

WHERE

Cargo.Codigo = Empregado.CodCargo
AND
Empregado.CodDep= Departamento.Codigo

Agrupando a mdia dos salrios


por departamento

GROUP BY Departamento.Codigo,
Departamento.Nome
HAVIING

Associando o o
empregado cargo e ao
departamento

AVG(Cargo.Salario) < 3000,00

Selecionando as mdias de salrio


menor que 3000,00

14.3. Resultado
Codigo
03

Nome
Comercial

Menor Salrio
1.500,00

38

14.4. Observaes
Repare os ttulos das colunas. Recorra ao contedo das tabelas Departamento,
Empregado e Cargos para conferir o resultado da lista obtida.
Observe que s foram listados os departamentos para os quais tem algum
empregado vinculado.
Repare que as clusulas FROM e WHERE fazem referncia tabela
Empregado, embora nenhum dado desta tabela pedido na lista. Ela aparece
porque porque est no caminho dos relacionamentos que conduzem a tabela
Departamento (que contm dados a serem listados) e a tabela Cargo (que
contm dados a serem listados). Na realidade o menor salrio diz respeito aos
empregados vinculados aos departamentos.

39

You might also like