Académique Documents
Professionnel Documents
Culture Documents
Verso 1.1
Apostila destinada ao curso com carga horria de 20 (vinte) horas
Curso SQL
Sumrio
1. Introduo...............................................................................................................................4
Definies...............................................................................................................................5
Abstrao de Dados..........................................................................................................5
Base de Dados..................................................................................................................6
SGBD.................................................................................................................................7
Consulta.............................................................................................................................7
Redundncia......................................................................................................................8
Inconsistncia....................................................................................................................8
Integridade.........................................................................................................................8
Regras de Nomenclatura.......................................................................................................8
DER........................................................................................................................................9
Definies...............................................................................................................................9
Entidade...........................................................................................................................10
Conjunto de Entidades....................................................................................................10
Atributo.............................................................................................................................10
Tipos de Dados................................................................................................................11
Tipos Definidos pelo Usurio...........................................................................................12
Domnio............................................................................................................................12
Relao............................................................................................................................12
Chaves.............................................................................................................................13
Entidades Fortes/Fracas..................................................................................................14
Vantagens e Desvantagens da Linguagem SQL.................................................................14
2. Modelo Relacional................................................................................................................16
Definies.............................................................................................................................16
Relao............................................................................................................................16
Tupla................................................................................................................................18
Atributo.............................................................................................................................18
Nulo..................................................................................................................................18
Domnio............................................................................................................................18
Modelo Relacional...........................................................................................................20
Cardinalidade...................................................................................................................21
Grado...............................................................................................................................21
Esquema..........................................................................................................................21
Instncia...........................................................................................................................22
Chave...............................................................................................................................22
Inter-relao.....................................................................................................................22
lgebra Relacional...............................................................................................................22
Seleo............................................................................................................................22
Projeo...........................................................................................................................23
Produto Cartesiano..........................................................................................................23
Composio ou Juno...................................................................................................23
Unio................................................................................................................................23
Interseco......................................................................................................................23
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
2 de 50
Curso SQL
Diferena..........................................................................................................................23
Diviso.............................................................................................................................24
Integridade...........................................................................................................................24
Restries........................................................................................................................24
Integridade Referencial....................................................................................................24
Data/Hora.........................................................................................................................25
Binrios Longos...............................................................................................................25
Enumeraes...................................................................................................................25
3. Normalizao........................................................................................................................26
1 Forma Normal..................................................................................................................26
Passagem 1FN.............................................................................................................26
2 Forma Normal..................................................................................................................27
3 Forma Normal..................................................................................................................27
Terceira Forma Normal de Boyce-Codd (3.5 FNBC).......................................................28
4 Forma Normal..................................................................................................................28
5 Forma Normal..................................................................................................................28
4. Comandos de Manuteno e Consulta................................................................................30
Base de Dados: CREATE, ALTER e DROP........................................................................30
Registros: INSERT, UPDATE e DELETE.............................................................................31
Consultas.............................................................................................................................32
Operadores Aritmticos........................................................................................................32
Funes Agregadas.............................................................................................................33
Agregao com a clusula GROUP BY...............................................................................34
Agregao com a clusula HAVING....................................................................................34
Ordenando os Dados...........................................................................................................35
Produto Cartesiano..........................................................................................................35
Composio (JOIN).........................................................................................................36
Predicados de Procura....................................................................................................36
Unio................................................................................................................................39
Subconsultas........................................................................................................................39
Trabalhando com Views.......................................................................................................40
Criando Views..................................................................................................................40
Outros Exemplos de Views..............................................................................................41
5. Exerccios de Fixao..........................................................................................................43
Projeto Treinamento.............................................................................................................43
Projeto Alexandria................................................................................................................44
Projeto Empresa..................................................................................................................46
Projeto Vendas.....................................................................................................................49
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
3 de 50
Curso SQL
1. Introduo
Devido a carncia de literatura destinada ao ensino de Banco de Dados e SQL para os
estudantes, elaboramos a presente apostila, que utilizada para estabelecer um conjunto de
conhecimentos determinados e introduzir o estudante no mundo dos SGBD 1 e da Linguagem
SQL.
A primeira verso da linguagem SQL, chamada SEQUEL 2, surgiu em 1974 nos laboratrios
da IBM na Califrnia/EUA. Entre 1976 e 1977 foi revisada e ampliada, mais tarde seu nome
foi alterado para SQL3.
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. Diversos SGBD
utilizam a SQL como linguagem padro para o acesso s bases de dados. Entre eles
podemos citar:
DB2 da IBM
POSTGRES da Postgres
1
2
3
4
5
4 de 50
Curso SQL
Definies
Segundo Korth, Banco de Dados pode ser definido como uma coleo de dados interrelacionados, cujo contedo informativo representa a qualquer instante, o estado de uma
determinada aplicao. E segundo Navathe, Banco de Dados uma coleo de dados
interligados por uma semntica comum.
Banco de Dados Relacional
O modelo de dados relacional representa os dados contidos em um Banco de Dados atravs
de relaes. Essas relaes contm informaes sobre as entidades representadas e seus
relacionamentos6.
Banco de Dados Orientado a Objetos
Representam os dados como colees que obedecem propriedades. So modelos
geralmente conceituais dispondo de pouqussimas aplicaes reais. Cada objeto tem
caractersticas prprias (atributos) com aes prprias (mtodos) 7.
Abstrao de Dados
Abstrao a habilidade de concentrar nos aspectos essenciais de um contexto qualquer,
ignorando caractersticas menos importantes, ou seja, so propriedades comuns de um
conjunto de objetos, omitindo os detalhes.
O sistema de banco de dados tem seu lado abstrato para o usurio, ou seja, para o usurio
que vai usar o banco de dados no importa qual unidade de armazenamento, no importa
6 SILVESTRE, Eduardo. Banco de dados relacional, 2002.
7 SILVESTRE, Eduardo. Banco de dados orientado a objetos, 2002.
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
5 de 50
Curso SQL
seu tamanho, ou banco de dados onde vai ser inserido seus dados, o importante que na
hora que for preciso procurar ou realizar uma consulta todos os dados estejam disponveis.
Base de Dados
BD ou Banco de dados um programa de computador utilizado para organizar e guardar
dados. Este conceito parte integrante dos chamados Sistemas de Informao, onde os
dados so coletados, processados, organizados e armazenados.
A parte de coleta, tratamento e processamento dos dados feito por softwares especficos
como por exemplo ERP, CRM, Web Service, sites, entre outros. Porm, o armazenamento e
organizao desses dados so realizados em um BD, podendo ser Oracle, SQL Server,
MySQL ou outro. Deste modo, um BD pode ser usado para referenciar um software, como:
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
6 de 50
Curso SQL
BD Oracle, BD SQL Server, entre outros; E neste caso eles so chamados de SGDB 8. Mas
pode ser usado para referenciar uma base de dados, que nada mais do que o produto dos
SGDB.
A maioria dos BD atuais so relacionais, pois suas estruturas so formadas por tabelas e do
relacionamento entre as tabelas. Tanto um BD robusto como o Oracle ou pequenos como o
HyperSQL adota este mesmo padro, o que torna possvel a integrao de dados entre os
diversos bancos.
Um BD composto pelas seguintes partes:
SGBD
Sistema de Gerenciamento de Bancos de Dados um software com recursos especficos de
forma a facilitar a manipulao das informaes dos BD e o desenvolvimento de programas
aplicativos. Como por exemplo Oracle, Ingres, Interbase ou MySQL.
Um SGBD no contm apenas os dados em si, mas armazena completamente toda a
descrio dos dados, seus relacionamentos e formas de acesso.
Consulta
Em um SGBD fornecida ao usurio somente uma representao conceitual dos dados, o
que no inclui maiores detalhes sobre sua forma de armazenamento real. O chamado MER 9
um tipo de abstrao utilizada para fornecer esta representao conceitual.
Neste modelo, um esquema das tabelas, seus relacionamentos e suas chaves de acesso
so exibidas ao usurio. Utilizando este modelo podemos ento navegar pelos dados, e
buscar as informaes que nos interessa, para isso procedemos pesquisas (consultas) no
SGBD.
8 Sistemas Gerenciados de Banco de Dados
9 Modelo de Entidade-Relacionamento
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
7 de 50
Curso SQL
Redundncia
Quando as aplicaes estiverem realmente imunes a mudanas na estrutura de
armazenamento ou na estratgia de acesso aos dados, podemos dizer que esta regra foi
atingida. A redundncia se faz com a eliminao da duplicidade das informaes contidas no
BD.
Inconsistncia
Um SGBD deve permitir que cada usurio visualize os dados de forma diferente daquela
existente previamente no BD. Uma viso consiste de um subconjunto de dados do BD,
necessariamente derivados dos existentes no BD. A caracterstica de inconsistncia
fornecer dados ou permitir gravar dados invlidos, por exemplo: uma data de nascimento
com o valor superior a data atual.
Integridade
Um SGBD deve gerenciar a integridade referencial definida em seu esquema, sem precisar
em tempo algum, do auxlio do programa aplicativo. Desta forma, o DB deve ter ao menos
uma instruo que permita a gravao de uma srie modificaes simultneas e uma
instruo capaz de cancelar um srie modificaes.
Regras de Nomenclatura
Ao trabalhar com SQL comum utilizarmos PascalCasing nos casos de variveis, nomes de
objetos, colunas e outras definies. J no caso de palavras chaves seque-se o padro
maisculo em todo o comando. Veja o exemplo de como esta regra aplicada:
SELECT nome, sobrenome, idade
FROM clientes
WHERE cidade = Guarulhos
Note que em SQL as strings so delimitadas por apstrofo, ou aspas simples, e no por
aspas duplas. Comandos SQL no utilizam como delimitador o ENTER e sim o espao, ou
seja, no existe marca de fim de comando, o processador de consultas separa cada palavra
e consulta a tabela de comandos, o que for diferente da tabela de comandos considerado
parmetro ou objeto.
Ou seja, objetos que utilizem espao em branco ou tenham o mesmo nome que uma
instruo precisam ser delimitados por colchetes. Veja o exemplo abaixo de uma tabela com
espaos e com palavra reservada:
/*
Faz consulta na tabela de clientes
Trazendo os dados mais importantes
*/
SELECT name, lastname, [order] -- Dados principais
FROM [client national] -- Tabela de clientes
WHERE [state] = 'DF' -- Estado desejado
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
8 de 50
Curso SQL
Foi necessrio utilizar os colchetes nas palavras order e state por serem palavras
reservadas, bem como no nome da tabela por conter espaos.
DICA: Evite utilizar as palavras reservadas e espaos em nomes de objetos criados.
Comentrios podem ser feitos em bloco ou em linha. Comentrios em linha so definidos por
-- (dois traos seguidos) e a linha de comando precisa continuar aps, como o exemplo
anterior. Comentrios em bloco so delimitados por /* e finalizados em */.
DER
Antes de falar sobre os conceitos, vamos conhecer a histria do Diagrama de Entidade e
Relacionamento. Tudo comeou quando o Dr. Peter Chen em 1976 props uma forma de
representar as Entidades e seus Relacionamento para os projetos de banco de dados. Isso
forneceu uma nova e importante percepo dos conceitos de dados. O DER proposto pelo
Dr. Chen possibilitava ao projetista concentrar-se apenas na utilizao dos dados sem se
preocupar com estrutura lgica de tabelas (DEVMEDIA, 2010). Por esse motivo, o DER
utilizado pelo projeto conceitual para modelar os conceitos de um BD de forma independente
do SGDB.
Sendo assim, o DER10 um modelo conceitual no qual descrevemos o BD, utilizamos
smbolos grficos para representar os requisitos dos usurios.
Definies
Os comandos SQL so separados em trs famlias:
1. DDL Data Definition Language Utilizada para criar, deletar e alterar os objetos
como views, databases, stored procedures, entre outros.
2. DCL Data Control Language Permite controlar a segurana de dados definindo
quem pode acessar cada operao em cada objeto.
3. DML Data Manipulation Language Comandos de manipulao das tabelas.
DDL
DCL
DML
CREATE
ALTER
DROP
GRANT
REVOKE
DENY
SELECT
INSERT
UPDATE
10 O software brModelo para realizao do DER pode ser baixado gratuitamente no endereo eletrnico
http://www.sis4.com/brmodelo/
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
9 de 50
Curso SQL
DELETE
Entidade
O primeiro conceito do DER o conceito de entidade. Mas, o que uma Entidade? algo
que possui uma existncia distinta e separada, real ou imaginria. Ou seja, uma entidade
um objeto no mundo real que pode ser identificado de forma nica em relao aos outros
objetos.
Por exemplo, suponha que uma empresa pede que desenvolva um software para gerenciar
seus funcionrios. Durante a fase de entrevistas, perguntamos os desejos para o novo
software (as regras de negcio). Uma possvel resposta da empresa pode ser: informaes
sobre empregados e o departamento associado a cada um deles. Por tal resposta, podemos
identificar algumas entidades no nosso DER, tais como:
Empregado e Departamento
Conjunto de Entidades
Depois de identificar tais entidades, necessrio model-las no DER. Para tanto, devemos
desenhar retngulos e escrever o nome da entidade no centro deles. Na figura seguinte,
temos um exemplo de duas entidades: Empregado e Departamento.
Atributo
Note que, at o momento, as entidades no guardam informao alguma. Elas apenas
representam um objeto existente no cenrio da empresa. Para guardar informao, devemos
definir os atributos para cada uma das entidades. Sendo assim, os atributos so
propriedades particulares que descrevem cada entidade. So partes especficas de uma
determinada entidade. So as informaes que caracterizam a entidade.
Por exemplo, podem ser os atributos para a entidade Empregado: matrcula, nome, sexo,
endereo e salrio. Cada entidade possui valores especficos para seus atributos que pode
diferir ou ser iguais aos valores dos atributos de outras entidades de um mesmo tipo de
entidade.
Valor de um Atributo
Chamamos valor de um atributo ao contedo que um atributo pode ter. Fernando Anselmo,
Maria Clia, Carlos Matheus poderiam ser os valores da entidade Empregado.
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
10 de 50
Curso SQL
Domnio de um Atributo
o conjunto de valores que um atributo pode assumir. Por exemplo, M ou F considerado o
domnio do atributo sexo da entidade Empregado.
Tipos de Atributos de uma Entidade
nico Cada entidade tem um valor diferente para este atributo. A matrcula de um
Empregado um atributo nico porque no existe outro empregado com o mesmo
nmero de matrcula.
No-nico Quando o valor pode se repetir em vrias entidades. Por exemplo, mais
de um Empregado pode ter o mesmo salrio.
Obrigatrio Quando tem que existir um valor para este atributo em toda entidade.
Por exemplo, todo empregado deve ter um nome.
Simples Quando possui um domnio simples. Por exemplo, o atributo sexo tem um
domnio simples pois formado pelo conjunto (nico) das letras F e M.
Uni valorado Quando tem um nico valor para cada entidade. Por exemplo, cada
empregado possui um nico nmero de matrcula.
Multi valorado Quando pode ter mais de um valor para cada entidade. Por
exemplo, um empregado pode ter mais de um telefone, do trabalho e da residncia.
No derivado Quando ele no pode ser obtido a partir de outros atributos. Por
exemplo, nome de um empregado.
Observamos com os exemplos que cada atributo pode ser de vrios tipos, por exemplo, o
matrcula um atributo nico, obrigatrio, uni valorado, no derivado e identificador.
Tipos de Dados
Os tipos de dados variam entre os diferentes RDBMS so padronizados pelo ANSI-92, mas
alguns bancos podem utilizar nomenclaturas diferentes. Esses so os tipos mais comuns:
Tipo Comum
MS-SQL
Definio
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
11 de 50
Curso SQL
binary varying
varbinary
character(n)
char(n)
character varying(n)
varchar(n)
dec
decimal
float[(n)] de n = 1-7
real
float[(n)] de n = 8-15
float
integer
int
-2.147.483.648 a 2.147.483.648
blob
image
At 2 GB de dados binrios
clob
text
At 2 GB de caracteres
national character(n)
nchar(n)
national character
varying(n)
nvarchar(n)
national text
ntext
numeric
decimal
Tipos variveis so melhores para textos pois ocupam apenas o espao digitado, enquanto
os tipos fixos ocupam espao em branco quando no digitado. Alguns tipos de dados tem o
tamanho definido na criao, como por exemplo, os tipos char, varchar e nvarchar.
importante definir no inicio da criao os tipos a serem usados e os que podem ser criados
para no ter variaes em um mesmo dado, como por exemplo o CEP pode ser utilizado
como 8 dgitos ou 8 caracteres. Criar o tipo CEP limita possveis confuses.
Domnio
o conjunto de valores permitidos para um atributo. Exemplo: Conjunto de valores do
atributo Sexo do funcionrio: M ou F; Conjunto de valores do atributo Nome aluno: 40
caracteres alfanumricos Conjunto de valores do atributo salrio: inteiro maior que 5000.
Relao
Representa a associao entre os elementos de duas entidades. Exemplo: Joo pertence ao
Departamento de Banco de Dados, onde Joo um elemento do conjunto de valores do
atributo Nome do empregado da entidade Empregado.
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
12 de 50
Curso SQL
Chaves
Chave primria, chave estrangeira e chave candidata so conceitos importantes na
modelagem de dados, pois implementam restries que garantir ao futuro banco de dados
a integridade dos dados.
Na anlise de entidade e na identificao dos relacionamentos, teremos que definir as
chaves que iro impor as restries de integridade no banco de dados.
Chave primria (ou Primary Key)
Atributo ou combinao de atributos que possuem a propriedade de identificar de forma
nica uma linha da tabela. Corresponde a um atributo determinante. Cada tabela deve incluir
um campo ou conjunto de campos que identifique de forma exclusiva, cada registro
armazenado na tabela. Essas informaes so chamadas de chave primria da tabela.
Desta forma, com a chave primria cria-se uma identificao nica, e permite uma total
segurana para que aplicaes possam acessar, alterar, excluir dados sem correr o risco de
apagar ou alterar dois campos da tabela ao mesmo tempo.
Chave estrangeira (ou Foreign Key)
Ocorre quando um atributo de uma relao for chave primria em outra relao. Por
exemplo:
Tabela Produto
codigo_produto
produto
categoria
preco_data
quantidade
descricao
Tabela ItemDoPedido
numero_pedido
codigo_produto
quantidade
Nessas tabelas temos dois casos de chaves primria e estrangeira. Observe que o
codigo_produto consta nas duas tabelas. Em Produto o campo identificador, ou seja,
cada produto ser exclusivo, portanto, uma chave primria. J em ItemDoPedido o campo
pode constar vrias vezes e aqui ser uma chave estrangeira.
Portanto as tabelas ficaro assim:
Tabela Produtos
Tabela ItensDoPedido
Chaves Candidatas
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
13 de 50
Curso SQL
Ocorrem antes da definio de uma relao que existe mais de uma combinao de
atributos possuindo a propriedade de identificao nica. Por exemplo, Matrcula, CPF, RG,
Nmero do Titulo de Eleitor
Entidades Fortes/Fracas
Como j vimos, chamamos de entidade, qualquer coisa real ou abstrata, de um determinado
ambiente, sobre a qual precisamos guardar informaes.
Entidade Primria (ou Forte)
Existe por si mesma. Sua identificao completa feita pelos seus prprios atributos.
Independncia de fabricante
Pode ser utilizada tanto em mquinas Intel rodando Windows, passando por
workstations RISC rodando UNIX, at mainframes rodando sistemas operacionais
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
14 de 50
Curso SQL
proprietrios.
Permite aos usurios acesso fcil e rpido aos dados a partir de um front end que
permita a edio e a submisso de comandos SQL.
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
15 de 50
Curso SQL
2. Modelo Relacional
Definies
O Modelo Relacional foi introduzido por Edgar Frank Codd (1970) e tornou-se um padro
para aplicaes comerciais, devido a sua simplicidade e desempenho. um modelo formal,
bastante representativo e ao mesmo tempo bastante simples, foi o primeiro modelo de
dados descrito teoricamente.
Um dos SGBD precursores que implementaram esse modelo foi o System R (IBM), cuja sua
histria foi vista na nossa primeira aula, baseado em seus conceitos surgiram: DB2 (IBM),
SQL-DS (IBM), Oracle, Informix, Ingres, Sybase, entre outros.
O Modelo Relacional representa os dados num Banco de Dados como uma coleo de
relaes e seus relacionamentos. Cada relao contm um nome e um conjunto de atributos
com seus respectivos nomes. Informalmente, as relaes do Modelo Relacional so tambm
chamadas de tabelas pela maioria dos desenvolvedores.
Relao
a forma como os objetos que compem a realidade se relacionam. o tipo de ocorrncia
existente entre entidades.
um-para-um
um-para-muitos
muitos-para-muitos
16 de 50
Curso SQL
Relacionamento um-para-muitos
O relacionamento um-para-muitos usado quando uma entidade A pode se relacionar com
uma ou mais entidades B.
Representado pelo sinal: 1:N
No exemplo da Figura 9, temos o relacionamento Empregado (entidade) e Dependentes
(entidade). Esse um relacionamento um-para-muitos porque a entidade Empregado possui
vrios Dependentes. Por outro lado, cada Dependente possui apenas um Empregado.
Relacionamento muitos-para-muitos
O relacionamento muitos-para-muitos usado quando vrias entidades A se relacionam com
vrias entidades B.
Representado pelo sinal: N:N ou N:M
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
17 de 50
Curso SQL
Tupla
As tuplas representam os valores de uma tabela. A figura a seguir mostra a tabela
Empregado preenchida com valores hipotticos. Note que as colunas da tabela representam
os atributos, enquanto as linhas representam as tuplas. Se uma tabela no tiver tuplas, ela
estar vazia, ou seja, sem dados. Desse modo, quando efetuarmos uma busca no Google,
recebemos como resposta as tuplas do banco de dados do Google que esto relacionadas
de alguma forma com o texto procurado. Informalmente, as tuplas so tambm chamadas de
registros pelos desenvolvedores.
Atributo
Atributos so todas as informaes que existem em uma tabela. Essas informaes so
chamadas informalmente de campos. Exemplo: Nome, CPF, Rua, Bairro, Telefones, CEP,
Data de Nascimento etc.
Nulo
Quando permitido que um atributo no possua um valor determinado, este valor
considerado nulo. Lembre-se que o termo nulo diferente do termo vazio, sendo que este
primeiro deriva da inexistncia de um valor e o segundo aplicado exclusivamente a
campos do tipo texto.
Domnio
Todo atributo para armazenar as informaes de uma tabela deve ter um domnio definido. O
domnio representa todos os valores possveis que um atributo pode receber. Por exemplo, o
atributo Telefone pode receber um conjunto de nmero com oito dgitos. Por outro lado, o
atributo Nome pode receber um conjunto de cadeias de caracteres que representa o nome
de uma pessoa.
Devemos escolher quais sero os tipos de dados de cada atributo/coluna. Estes tipos de
dados devem levar em conta o tipo de SGBD escolhido 11.
11 Os seguintes exemplos so referentes do Microsoft SQL Server 2000
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
18 de 50
Curso SQL
Nmeros exatos
Inteiros: nmeros inteiros da forma 0, 1, 1000, 10.000.000, -1, -300, etc. Estes
podem ser divididos em inteiros pequenos, mdios, grandes, cada um ocupando um
determinado espao de armazenamento. Exemplos:
bigint:
de
-2^63
(-9.223.372.036.854.775.808)
(9.223.372.036.854.775.807). Ocupa 8 bytes;
at
2^63-1
bit: inteiro que pode valer 0 ou 1. Cada conjunto de 8 campos deste ocupa 1 byte, de
16 ocupa 2 bytes e assim em diante;
Dados monetrios
money:
de
-2^63
(-922.337.203.685.477,5808)
at
2^63
1
(+922.337.203.685.477,5807), com preciso de 10.000 valores decimais. Ocupa 8
bytes;
Nmeros aproximados
float: dados de ponto flutuante de -2,23E - 308 at 2,23E + 308, onde define-se o
expoente. Pode ocupar 4 ou 8 bytes;
Datas
Texto
char: tamanho fixo de uma cadeia de caracteres, com mximo de 8000 caracteres.
Ocupa n bytes onde n o tamanho da cadeia. Exemplo: se armazenamos o texto
"Joo", este ocupar n bytes;
varchar: tamanho varivel de uma cadeia de caracteres, com limite de 8000. Ocupa o
tamanho em bytes do registro. Exemplo: se armazenamos o texto "Joo", este
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
19 de 50
Curso SQL
ocupar 4 bytes;
nchar: tamanho fixo de uma cadeia de caracteres UNICODE, com mximo de 4000
caracteres. Ocupa n bytes onde n o tamanho da cadeia. Exemplo: se armazenamos
o texto "Joo", este ocupar n bytes;
Strings Binrias
Outros tipos
sql_variant: armazena vrios tipos de dados suportados pelo SQL Server, exceto
text, ntext, timestamp, e sql_variant. Mximo de 8.016 bytes;
table: tipo especial de dados que armazena o resultado de uma tabela, para
processamento posterior;
Desse modo, o domnio de um atributo define qual o tipo de dado e o formato que o dado
pode ser armazenado por aquele atributo. Por exemplo, o formato do atributo Data de
Nascimento dd/mm/aaaa. O formato do atributo CEP nnnnn-nnn. Assim, o formato
descreve como o dado ser exibido para o usurio do sistema.
Modelo Relacional
O primeiro conceito do MER, ou Modelo Entidade-Relacionamento o conceito de
entidade. Mas, o que uma Entidade? algo que possui existncia distinta e separada, real
ou imaginria. Ou seja, uma entidade um objeto no mundo real que pode ser identificado
de forma nica em relao aos outros objetos.
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
20 de 50
Curso SQL
O Modelo Relacional representa as entidades dispostas em num BD, seus atributos e seus
relacionamentos. Cada relao contm um nome e um conjunto de atributos com seus
respectivos nomes.
Cardinalidade
A cardinalidade um conceito importante para ajudar a definir o relacionamento, ela define o
nmero de ocorrncias em um relacionamento.
Para determinarmos a cardinalidade, deve-se fazer algumas perguntas relativa ao
relacionamento em ambas s direes. Por exemplo, dado um relacionamento entre
Departamento e Empregado, pode-se fazer as seguintes perguntas:
Pergunta:
Resposta:
Pergunta:
Resposta:
Um
No
Um
No
Grado
Ou Grau, so as restries identificadas na quantidade de ocorrncias de uma entidade, que
pode estar relacionada a uma ocorrncia de outra entidade. So representados graficamente
por smbolos especiais colocados nas extremidades da linha que representa um
relacionamento
Esquema
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
21 de 50
Curso SQL
Instncia
J os dados atualmente existentes em uma base de dados podem mudar com relativa
frequncia. Os dados da base de dados em um particular momento do tempo so chamados
Instncias do BD (ou Ocorrncias ou Estados).
O Esquema algumas vezes chamado de Base Intencional e uma instncia chamada de
Base Extensional do Esquema.
Chave
So utilizadas para identificar um registro especfico, geralmente feito atravs de um valor
inteiro nico. Um nmero artificialmente gerado a melhor forma de garantir a unicidade da
chave, pois poucas informaes reais possuem essa propriedade.
Inter-relao
Dizemos que o Modelo possui as estruturas efetivamente inter-relacionadas, permitindo que
o Processo de Negcio seja gerenciado de maneira integrada, e isso envolve diversas
funes de diversas reas como um processo nico, que visualizado por todos os
envolvidos de ponta a ponta.
Os Processos de Negcio so considerados de maneira explcita e inteira. Uma organizao
com viso horizontal tem conscincia dos Processos de Negcio que utiliza e que esto
embutidos nas suas rotinas.
lgebra Relacional
A lgebra relacional uma linguagem de consulta procedural. Ela consiste em um conjunto
de operaes que tomam uma ou duas tabelas como entrada e produzem uma nova tabela
como resultado. Essas operaes baseiam-se na teoria dos conjuntos 12.
Seleo
Pode ser entendida como a operao que filtra, seleciona as linhas de uma tabela,
realizando tambm uma projeo, e opera em um conjunto de dados, sendo portando uma
operao unria.
utilizada para selecionar um subconjunto de tuplas numa relao que satisfaa uma
determinada condio.
12 As tabelas correspondem aos conjuntos
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
22 de 50
Curso SQL
Projeo
Pode ser entendida como uma operao para filtrar as colunas de uma tabela de nosso BD
ou uma tabela resultante de uma outra operao relacional executada. Por operar em
apenas um conjunto de entrada, a projeo classificada como uma operao unria.
A operao de projeo utilizada para selecionar determinadas colunas de uma relao. A
operao executada em apenas uma relao e o resultado uma nova relao contendo
apenas os atributos selecionados, eliminando-se as duplicidades.
Produto Cartesiano
Utiliza a mesma notao de operao matemtica de dois conjuntos, tendo como resultado
do produto cartesiano de duas tabelas uma terceira tabela contendo as cominaes
possveis entre os elementos das tabelas originais.
Essa tabela resultante possui um nmero de colunas que igual soma do nmero de
colunas das tabelas iniciais e um nmero de linhas igual ao produto do nmero de linhas das
duas tabelas
Composio ou Juno
Essa operao interage com o modelo relacional, ou seja trabalha com o modelo de
relaes entre tabelas realizando um produto cartesiano, combinando as linhas e somando
as colunas de duas tabelas, s que partindo de campos comuns de ambas para realizar
essa seleo relacional.
Unio
uma operao binria, ou seja cria uma tabela a partir de duas outras tabelas unio
compatveis levando as linhas comuns e no comuns a ambas. As informaes duplicadas
aparecero somente uma vez no resultado.
Uma caracterstica que somente possvel utilizar este operador caso as tabelas de
origem possuam compatibilidade de unio, ou seja, as tabelas devem ser equivalentes e
gerem o mesmo tipo de resultado.
Interseco
uma operao binria, ou seja, cria uma tabela a partir de duas outras tabelas levando
sem repetio as linhas, que pertenam a ambas as tabelas presentes na operao. A
relao criada pela operao de interseco o resultado de todas as tuplas que pertenam
a ambas as relaes presentes na operao.
Diferena
Essa operao permite encontrarmos linhas que esto em uma tabela mas no esto em
outra. uma operao primitiva que requer duas tabelas compatveis, ou seja,
estruturalmente idnticas. O resultado uma tabela que possui todas as linhas que existem
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
23 de 50
Curso SQL
Diviso
Essa operao produz como resultado a projeo de todos os elementos da primeira tabela
que se relacionam com todos os elementos da segunda tabela. Essa operao tambm
pode ser obtida atravs de outras operaes de lgebra relacional.
Integridade
O objetivo primordial de um SGBD o de garantir a integridade de dados, para garantir a
integridade de um banco de dados, os SGBD oferecem o mecanismo de restries de
integridade. Uma restrio de integridade uma regra de consistncia de dados que
garantida pelo prprio SGBD.
Algumas dessas restries podem ser fornecidas pelo SGBD e automaticamente
executadas. Outras restries podem ser verificadas pelos programas de atualizao ou
durante a entrada de dados.
Restries
As restries de Integridade podem ser:
Restrio de Domnio
Restrio de Chave
Integridade Referencial
A chave primria e a integridade da relao so especificadas individualmente em cada
relao. A integridade referencial uma restrio estabelecida entre duas relaes com o
objetivo de manter a consistncia dos dados entre as tuplas dessas relaes.
De um modo simples, pode-se dizer que a integridade referencial determina que uma linha
numa relao A que est referida a uma outra relao B tem que obrigatoriamente estar
ligada a uma linha existente na relao B.
A associao entre as duas relaes faz-se atravs da Chave Estrangeira, que um
atributo, ou grupo de atributos, que desempenham o papel de chave primria noutra relao,
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
24 de 50
Curso SQL
servindo portanto de elo de ligao entre elas. Dependendo das situaes possvel que
uma chave estrangeira aceite valores nulos, o que significa que essa linha no est referida
chave da outra relao.
Data/Hora
Podem ser os tipos:
Binrios Longos
Tipos de dados para objetos grandes. Por exemplo fotos, vdeos, arquivos.
Enumeraes
Conhecido pelo tipo ENUM. Um ENUM um nome do domnio est firmemente acoplado. O
processo de verificao ou no o registando de um ENUM nome do domnio idntico para
o cessionrio dos correspondentes comumente chamado de "validao".
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
25 de 50
Curso SQL
3. Normalizao
Normalizao uma tcnica de projeto amplamente utilizada no desenho de bancos de
dados relacionais. um processo sistemtico atravs do qual uma tabela relacional no
normalizada transformada em um conjunto de tabelas normalizadas, que representem da
melhor forma possvel uma realidade a ser modelada.
Um conceito bsico usado para a normalizao o conceito de dependncia funcional. O
processo de Normalizao passa pelas seguintes etapas:
1 Forma Normal
Uma relao se encontra na 1FN se todos os domnios de atributos possuem apenas
valores atmicos (simples e indivisveis), e que os valores de cada atributo na tupla seja um
valor simples. Assim sendo todos os atributos compostos devem ser divididos em atributos
atmicos.
Caractersticas da 1FN:
Criar tabelas separadas para cada grupo de dados relacionados e identificar cada
linha com uma ou mais colunas como nicas (IDs, Cdigos, etc). Ou seja, todos os
atributos da relao estiverem baseados em um domnio simples, no contendo
grupos ou valores repetidos
Passagem 1FN
Gerar uma nica tabela com colunas simples, a chave primria: id de cada tabela aninhada.
Por exemplo:
Fornecedor(codigo, status_cidade, cidade, codigo_peca, quantidade)
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
26 de 50
Curso SQL
2 Forma Normal
Uma relao se encontra na segunda forma normal quando estiver na primeira forma normal
e todos os atributos que no participam da chave primria so dependentes desta.
Assim devemos verificar se todos os atributos so dependentes da chave primria e retirarse da relao todos os atributos de um grupo no dependente que dar origem a uma nova
relao, que conter esse atributo como no chave. Desta maneira, na segunda forma
normal evita inconsistncias devido a duplicidades.
Caractersticas da 2FN:
Estar na 1FN
Cada atributo no-chave for dependente da chave primria inteira, isto , cada
atributo no-chave no poder ser dependente de apenas parte da chave. Ou seja,
todos os seus atributos que no faam parte de alguma chave candidata devem ser
determinados unicamente por qualquer chave candidata da tabela.
Note que ainda h o problema de relacionar o Status com a Cidade, pois deve existir
obrigatoriamente um fornecedor nela.
3 Forma Normal
Uma relao estar na 3FN, quando estiver na 2FN e todos os atributos que no participam
da chave primria so dependentes desta porm no transitivos. Assim devemos verificar se
existe um atributo que no depende diretamente da chave, retir-lo criando uma nova
relao que conter esse grupo de atributos, e defina com a chave, os atributos dos quais
esse grupo depende diretamente.
Caractersticas da 3FN:
Estar na 2FN
Foi criada a tabela CIDADE com os campos NOME_CIDADE como chave primria. Desta
forma, a tabela FORNECEDOR s precisa guardar o Cdigo Fornecedor (chave) e o valor
da Cidade, que se relaciona com esta tabela.
Fornecedor(codigo, status_cidade)
Um esquema de dados nessa situao pode facilmente lidar com o projeto de um banco de
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
27 de 50
Curso SQL
4 Forma Normal
Na grande maioria dos casos, as entidades normalizadas at a 3FN so fceis de entender,
atualizar e de se recuperar dados. Mas s vezes podem surgir problemas com relao a
algum atributo no chave, que recebe valores mltiplos para um mesmo valor de chave.
Esta nova dependncia recebe o nome de dependncia multi valorada que existe somente
se a entidade contiver no mnimo trs atributos.
Caractersticas da 4FN:
Estar na 3FN
Uma entidade que esteja na 3FN tambm estar na 4FN, se ela no contiver mais do que
um fato multi valorado a respeito da entidade descrita, em um relacionamento muitos-paramuitos, entidades independentes no podem ser armazenadas na mesma tabela. A 4FN lida
com este problema, criando tabelas de relacionamentos apenas com chaves primrias e
estrangeiras, removendo entradas duplicadas em outras tabelas.
Por exemplo, considere a seguinte tabela:
FuncionarioHabilidadeIdioma(matricula, habilidade, idioma)
5 Forma Normal
A 5FN afirma que deve ser possvel reconstruir a tabela original a partir das tabelas em que
ela foi dividida. O benefcio de aplicar esta regra assegurar que nenhuma coluna estranha
ao contexto foi criada e que todas as tabelas criadas so to grandes quanto
necessariamente precisam ser.
Caractersticas da 5FN:
Estar na 4FN
Quando o contedo deste mesmo registro no puder ser reconstrudo (juno) a partir
de outros registros menores, extrados deste registro principal.
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
28 de 50
Curso SQL
uma boa prtica aplicar estas regras, mas, a menos que esteja trabalhando num esquema
de dados muito grande, provavelmente no precisar delas. Um registro no pode ser
reconstrudo a partir de vrios tipos de registros menores. Exemplo:
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
29 de 50
Curso SQL
MIGUEL
JOSIEL
RAQUEL
LUCIANA
JOANA
EMANUEL
M
M
F
F
F
M
M
M
G
G
M
M
1,67
1,72
1,65
1,80
1,65
1,78
Tabela 1
DESCONTO
MIGUEL
JOSIEL
RAQUEL
LUCIANA
JOANA
EMANUEL
MIGUEL
LUCIANA
4
2
1
3
5
6
3
4
0,20
0,10
01-01-2010
01-01-2010
01-01-2010
01-01-2010
01-01-2010
01-01-2010
09-01-2010
09-01-2010
08-01-2010
15-01-2010
15-01-2010
08-01-2010
15-01-2010
15-01-2010
15-01-2010
15-01-2010
0,10
0,12
Tabela 2
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
30 de 50
Curso SQL
)
CREATE TABLE quarto (
nome VARCHAR(25) NOT NULL,
quarto INT NOT NULL,
chegada DATE NOT NULL,
saida DATE,
desconto NUMERIC(5,2),
PRIMARY KEY (nome, quarto)
)
Utilizamos a instruo ALTER para modificar a estrutura de um objeto depois de ter sido
criado, ou seja, este comando permite modificar objetos no banco de dados.
Sintaxe: ALTER <tipo> <nome> (ADD/DROP nome_atributo1 <tipo> [NOT NULL],
nome_atributoN <tipo> [NOT NULL])
A seguir o cdigo para a modificao da tabela QUARTO, adicionando a chave de ligao
entre esta tabela e HOSPEDE:
ALTER TABLE quarto ADD CONSTRAINT fkQuarto FOREIGN KEY (nome) REFERENCES hospede
(nome) ON UPDATE CASCADE ON DELETE CASCADE
Use a instruo DROP para remover um objeto depois de criado, ou seja, este comando
permite a eliminao de objetos no banco de dados.
Sintaxe: DROP <tipo> <nome>
A seguir o cdigo para a eliminao da tabela QUARTO (no o execute pois necessitaremos
dessas entidades para os exerccios posteriores):
DROP TABLE quarto
31 de 50
Curso SQL
Apesar da clusula WHERE constar no UPDATE, opcional. Entretanto, sem essa opo o
comando modificar todos os registros. O exemplo abaixo o recomendado, pois inclui a
definio para um filtro de modificao:
UPDATE hospede SET biotipo = 2 WHERE nome = 'MIGUEL'
A excluso dos registros nas entidades realizada com o comando DELETE, que possui a
seguinte sintaxe bsica:
DELETE FROM [tabela] WHERE [condio]
Apesar da clusula WHERE constar no comando DELETE, opcional. Entretanto, sem essa
opo o comando eliminar todos os registros. O exemplo abaixo o recomendado, pois
inclui a definio para um filtro de excluso:
DELETE FROM hospede WHERE nome = 'MIGUEL'
Consultas
A consulta dos registros nas entidades realizada com o comando SELECT, que possui a
seguinte sintaxe bsica:
Sintaxe: SELECT <lista_de_colunas> FROM <nome_tabela>
Por exemplo, podemos utilizar o seguinte comando para mostrar todos os hspedes
cadastrados:
SELECT * FROM hospede
O exemplo utiliza o coringa * para selecionar as colunas na ordem em que foram criadas. A
instruo SELECT, como pudemos observar seleciona um grupo de registros de uma (ou
mais) tabela(s). No caso a instruo FROM nos indica a necessidade de pesquisarmos tais
dados apenas na tabela HOSPEDE.
A clusula DISTINCT elimina duplicidades, significando que somente relaes distintas
sero apresentadas como resultado de uma pesquisa.
SELECT DISTINCT nome FROM hospede
Operadores Aritmticos
So quatro os operadores aritmticos que podem formar expresses:
+
adio
subtrao
multiplicao
diviso
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
32 de 50
Curso SQL
Na consulta a seguir, usamos o operador de adio para adicionar 0.05 ao valor corrente de
DESCONTO a todos os hospedes que j possuem descontos. A clusula SELECT contm
duas expresses: NOME e a expresso formada pelo operador aritmtico, DESCONTO +
0.05 mostrando um novo nome para esta coluna (novo_desconto). A tabela resultado dever
conter duas colunas, uma para cada expresso:
SELECT nome, desconto + 0.05 novo_desconto FROM quarto WHERE desconto IS NOT NULL
A consulta abaixo pode ser usada para determinar por quantos dias os hspedes ficaram no
Spa. Este nmero obtido subtraindo-se a data de chegada de sada.
SELECT nome, saida chegada tempo FROM quarto
Funes Agregadas
A caracterstica marcante das funes agregadas que produzem um nico valor a partir de
uma coluna inteira de dados. Portanto, enquanto qualquer outro tipo de expresso retorna
um valor para cada linha, as funes agregadas retornam um valor que representa um
agregado dos valores referentes s vrias linhas. Por esta razo, so tambm chamadas de
funes de colunas.
Existem cinco funes agregadas. So elas:
Outro exemplo:
SELECT MIN(desconto) * AVG(desconto) FROM quarto
33 de 50
Curso SQL
Caso existam linhas em branco para a coluna QUARTO, ou seja, com um valor nulo,
tambm seriam agrupadas. E as linhas so agrupadas da mesma maneira para cada coluna
formadora de grupos subsequente, embora isto no esteja aparente no exemplo dados pois
s contm duas colunas. Existem as seguintes funes agregadas AVG, SUM, MAX, MIN
e COUNT que devem ser usadas com a clusula GROUP BY pois geram um nico valor.
A clusula GROUP BY tambm pode ser usada em consultas contendo uma clusula
WHERE. Neste caso, a GROUP BY codificada depois da clusula WHERE. Por exemplo,
a consulta abaixo exibe quantos hspedes ocuparam os quartos depois do dia 01 de janeiro
por quarto:
SELECT SUM(quarto) FROM quarto WHERE chegada > '2010-01-01' GROUP BY quarto
34 de 50
Curso SQL
NOME
QUANDO
PESO
MIGUEL
MIGUEL
RAQUEL
RAQUEL
RAQUEL
JOANA
JOANA
LUCIANA
01-01-2010
02-01-2010
01-01-2010
02-01-2010
03-01-2010
01-01-2010
02-01-2010
01-01-2010
66.4
66.2
86.5
86.1
85.8
66.7
66.3
67.5
Tabela 3
A seguinte tabela contm os registros de peso dos hspedes por dia. A consulta a seguir
indica os hspedes que tiveram uma diferena entre seu peso mnimo e seu peso mximo.
SELECT nome, MAX(peso) MIN(peso) diferenca FROM peso
GROUP BY nome
HAVING MAX(peso) MIN(peso) > 0.0
Passemos para um outro exemplo. Esta consulta mostra os hospedes que realizaram mais
de duas pesagens:
SELECT nome, COUNT(nome) FROM peso GROUP BY nome HAVING COUNT(nome) > 2
Ordenando os Dados
A clusula ORDER BY permite classificar as linhas do resultado alfabtica e numericamente,
em ordem crescente ou decrescente. O padro a ordem crescente. A clusula ORDER BY
deve ser sempre a ltima clusula da consulta.
No exemplo a seguir, obtemos os nomes dos hspedes classificados em ordem decrescente
atravs da palavra chave DESC na clusula ORDER BY depois do nome da coluna a ser
ordenada. Usamos a palavra-chave DISTINCT para suprimir as linhas duplicadas:
SELECT DISTINCT nome FROM quarto ORDER BY nome DESC
As classificaes so, por padro, efetuadas em ordem crescente, a no ser que seja
indicada a palavra-chave DESC aps o nome da coluna. Entretanto, podemos explicitar a
ordem crescente para uma determinada coluna, usando-se a palavra-chave ASC aps o
nome da coluna na clusula ORDER BY.
Produto Cartesiano
Podemos utilizar os seguintes Operadores Lgicos:
Por exemplo. Quais so os hspedes que tm o biotipo igual a 1 e o gnero igual a 'M'
SELECT nome FROM hospede WHERE biotipo = 1 AND genero = 'M'
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
35 de 50
Curso SQL
Outro exemplo. Quais so os hspedes que tm o biotipo igual a 1 ou o gnero igual a 'M'
SELECT nome FROM hospede WHERE biotipo = 1 OR genero = 'M'
Composio (JOIN)
Este o comando mais comum utilizado e sua caracterstica s trazer registros que
contenham correspondncia nas outras tabelas utilizadas. Podemos listar todos os
hspedes e os quartos aos quais estes pertencem, com o seguinte cdigo:
SELECT h.nome, q.quarto FROM hospede h
INNER JOIN quarto q ON h.nome = q.nome
Outro modo que podemos realizar mostrar todos os hspedes, mesmo que no existam
quartos associados a este:
SELECT h.nome, q.quarto FROM hospede h
LEFT JOIN quarto q ON h.nome = q.nome
Ou o inverso, queremos ver todos os quartos, mesmo que estes no contenham nenhum
hspede:
SELECT h.nome, q.quarto FROM hospede h
RIGHT JOIN quarto q ON h.nome = q.nome
Conclumos ento que as instrues LEFT JOIN e RIGHT JOIN so utilizadas para resolver
a no correspondncia de dados entre diferentes tabelas.
O NATURAL JOIN e o STRAIGHT_JOIN fazem exatamente a mesma coisa que o INNER
JOIN em questo de resultado, porm com algumas particularidades:
STRAIGHT_JOIN: faz com que a tabela a esquerda seja lida primeiro, isso utilizado
quando o otimizador do JOIN coloca as tabelas em ordem errada. Isto muito pouco
utilizado.
Obs.:
1 possvel substituir o ON por USING quando o nome das colunas nas duas tabelas for
idntico.
SELECT h.nome, h.altura, p.peso FROM hospede h INNER JOIN peso p USING(nome)
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
36 de 50
Curso SQL
Predicados de Procura
Predicados Relacionais
So aqueles que relacionam duas expresses segundo um operador. Os seguintes
operadores so suportados:
Operador Significado
=
Igual
!=
Diferente
<>
Diferente
>
Maior
!>
<
Menor
!<
>=
Maior ou igual
<=
Menor ou igual
Predicado BETWEEN
Compara um valor com uma faixa de valores. Os limites da faixa esto inclusos. Possui a
seguinte sintaxe: <expresso> | not | between <expresso> and <expresso>
No exemplo seguinte recuperamos todas os quartos, cujo desconto est entre 10% e 20%:
SELECT nome, quarto FROM quarto WHERE desconto BETWEEN 0.10 AND 0.20
Predicado NULL
Utilizado para testar os valores nulos. Verifica, por exemplo, se colunas no contm nenhum
valor armazenado. Possui a seguinte sintaxe: <nome da coluna> is | not | NULL. Caso seja
necessrio conhecer os quartos no possuem qualquer desconto, utilizaramos a seguinte
instruo:
SELECT nome, quarto FROM quarto WHERE desconto IS NULL
possvel utilizar o operador not juntamente com a palavra-chave is (do modo, is not NULL)
para, por exemplo, montar condies de colunas que no possuem valores nulos.
Predicado LIKE
O predicado LIKE procura por strings que se encontram dentro de um determinado padro.
O predicado LIKE s pode ser usado com tipos de dados CHAR e VARCHAR.
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
37 de 50
Curso SQL
Verificar os hspedes que possuem o incio de sua descrio a palavra MIG (p.ex.
MIGUEL).
Predicado EXISTS
utilizado para testar se o conjunto de linhas resultantes de uma consulta vazio. Sintaxe:
| not | exists < subselect >
O exemplo seguinte mostra a utilizao do predicado exists. Neste caso desejamos todos
os nomes dos hospedes que tenham pelo menos uma reserva. Para fazermos isto,
utilizamos a seguinte lgica: para cada Hspede, pesquisamos em Quarto se reservou algo.
select NOME from HOSPEDE where exists
(select * from QUARTO where HOSPEDE.NOME = QUARTO.NOME)
Predicado IN
O predicado in compara um valor com um conjunto de valores. Este conjunto de valores
pode ser uma lista ou o resultado de um subselect. Sintaxe:
<expresso> | not | in < subselect >
ou
<expresso> | not | in < lista de valores >
Os seguintes exemplos demonstram o uso do predicado in:
38 de 50
Curso SQL
Unio
Cria uma consulta unio, que combina os resultados de duas ou mais consultas ou tabelas
independentes, importante que ambas consultas retornem os mesmos tipos de dados na
sequencia.
Sintaxe: [TABLE] consulta1 UNION [ALL] [TABLE] consulta2 [UNION [ALL] [TABLE]
consultaN [ ... ]]
Podemos mesclar os resultados de duas ou mais consultas, tabelas e instrues SELECT,
em qualquer combinao, em uma nica operao UNION.
Subconsultas
Uma subconsulta uma consulta que faz parte de uma outra consulta para auxiliar esta,
como exemplo, "criar uma consulta para verificar o peso atual de cada hospede baseado na
ltima pesagem realizada por este".
Para montarmos a consulta principal precisamos associar a tabela hospede com a tabela
peso, entretanto, o peso mostrado o primeiro registro de cada hospede:
SELECT h.nome, p.peso FROM hospede h INNER JOIN peso p USING(nome) GROUP BY nome;
Podemos obtermos as ltimas datas para cada hospede, podemos utilizar como base a
seguinte consulta:
SELECT nome, MAX(quando) FROM peso GROUP BY nome;
A ideia de uma subconsulta unir duas ou mais consultas para produzir um nico resultado:
SELECT h.nome, p.peso FROM hospede h INNER JOIN peso p USING(nome)
WHERE p.quando = (SELECT MAX(quando) FROM peso WHERE nome = p.nome)
GROUP BY h.nome;
Podemos tambm utilizar subconsultas para simplificar o uso de comandos JOIN, por
exemplo, desejamos saber quantas pesagens cada hspede realizou. Utilizamos o seguinte
SQL:
SELECT h.nome, COUNT(p.peso) FROM hospede h LEFT JOIN peso p USING(nome) GROUP BY
nome;
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
39 de 50
Curso SQL
Uma View pode ser utilizada, por exemplo, para retornar um valor baseado em um
identificador de registro;
Pode ser utilizada para promover restries em dados para aumentar a segurana
dos mesmos e definir polticas de acesso em nvel de tabela e coluna. Podem ser
configurados para mostrar colunas diferentes para diferentes usurios do banco de
dados;
Pode ser utilizada com um conjunto de tabelas que podem ser unidas a outros
conjuntos de tabelas com a utilizao de JOINs ou UNION.
Criando Views
Para definir Views em um banco de dados, utilizamos a declarao CREATE VIEW, a qual
possui a seguinte sintaxe:
CREATE [OR REPLACE] [ALGORITHM = algorithm_type] VIEW
VIEW view_name [(column_list)] AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
view_name: o nome que damos ao objeto View que criarmos. Esse nome poder ser no
qualificado, quando criado no banco de dados corrente ou totalmente qualificado quando
criarmos em um banco de dados que no est definido no contexto atual
(db_name.view_name).
column_list: recurso para que possamos sobrescrever os nomes das colunas que sero
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
40 de 50
Curso SQL
A partir desse momento, observe que um comando SHOW TABLES, veremos que uma
tabela adicional foi criada, a vw_ultimaPesagem. Para uma conceituao mais ampla, uma
View um mapeamento lgico de vrias tabelas contidas em um ou mais bancos de dados
que por sua vez esto em um servidor MySQL. No caso da View, temos uma tabela virtual
baseada em uma tabela chamada de base (hospede).
Sua utilizao como uma tabela comum, ento podemos aplicar a seguinte instruo:
SELECT * FROM vw_ultimaPesagem
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
41 de 50
Curso SQL
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
42 de 50
Curso SQL
5. Exerccios de Fixao
Projeto Treinamento
1. Criar uma base de dados chamada PROJETO01.
2. Criar a tabela FUNCIONARIO para comportar a seguinte estrutura:
MATRICULA
NOME
DTCONTRATO SALARIO
ARC01
ARC02
ARC03
ARC04
ARC05
RAFAEL
RAQUEL
SAMAEL
ISMAEL
RAQUEL
04-01-2010
11-01-2010
04-01-2010
11-01-2010
18-01-2010
780.40
660.20
860.50
860.50
660.20
Tabela 4
SQL Bsico
SQL Avanado
Linguagem PL/SQL
Tabela 5
C01
C02
C03
C02
C03
C01
C03
04-01-2010
11-01-2010
18-01-2010
11-01-2010
18-01-2010
04-01-2010
18-01-2010
Tabela 6
43 de 50
Curso SQL
Projeto Alexandria
1. Criar uma base de dados chamada PROJETO02.
2. Criar as tabelas para este projeto de acordo com o seguinte modelo:
44 de 50
Curso SQL
Projeto Empresa
1. Criar uma base de dados chamada PROJETO03.
2. Criar as tabelas para este projeto, e defina os tipos de cada campo:
DIVISAO (cod_div)
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
45 de 50
Curso SQL
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
46 de 50
Curso SQL
23. Listar para cada supervisor, o seu nome e o nmero de subordinados que este
possui.
24. Listar o salrio mdio dos empregados por local e cargo para grupos de mais de
um empregado.
25. Listar o nmero e o nome das divises, o cdigo e o nome dos respectivos
departamentos subordinados a esta, ordenados por nmeros das divises.
26. Listar todos os atributos de projeto em ordem crescente de cdigo
27. Descobrir qual a mdia de ganhos totais e quantos empregados so considerados
para clculo dessa mdia.
28. Listar o nome, a matrcula e o salrio de todas as pessoas que no ganhem
salrio inferior a R$ 1.000,00.
29. Listar matrcula, nome, anos de servio e salrio de todas as pessoas com mais
de 6 anos de servio e que, ou seja gerente de departamento ou ganhe salrio
superior a R$ 3.000,00
30. Listar a matrcula, o nome e o salrio de todas as pessoas em ordem decrescente
de salrio.
31. Listar o nome, a matrcula e o departamento de todas as pessoas que no
trabalhem nos departamentos 10 e 20.
32. Listar a localizao, a matrcula e o nome de todos os empregados do
departamento de compra e venda.
33. Listar a matrcula, o nome e o salrio de todos os coordenadores de projeto que
no ganhem salrio inferior a R$ 1.500,00.
34. Listar o nome e a localizao de todos os departamentos subordinados diviso
"administrao".
35. Listar o nome e a matrcula de todos os funcionrios alocados no projeto
holografia.
36. Listar o nome e a matrcula de todos os gerentes de departamento e o respectivo
nome do departamento gerenciado e da diviso a que so subordinados.
37. Listar o salrio mdio para os departamentos que possuam salrio mdio superior
mdia da companhia.
38. Listar o menor, o maior e a mdia de salrios de cada departamento que possua
salrio mdio superior a R$ 1.000,00.
39. Listar o salrio mdio dos empregados por departamento e local para grupos de
mais de um empregado.
40. Listar o salrio mdio dos empregados por local para grupos de mais de um
empregado.
41. Listar a matrcula e os nomes dos coordenadores, e matrcula dos funcionrios
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
47 de 50
Curso SQL
Projeto Vendas
1. Criar uma base de dados chamada PROJETO04.
2. Defina as tabelas e seus campos para este projeto.
3. Criar registros para popular este banco de dados.
4. Escrever comandos SQL para resolver s seguintes listagens:
1. Nome, endereo, CEP e UF de todos clientes que no pertencem do estado de
DF.
2. Nome, CGC, estado e cidade do cliente que possui a identificao 7121.
3. Dados do cliente que possui o identificao 260.
4. Dados dos vendedores que possui a faixa de comisso assalariado.
5. Dados dos vendedores que possuem salrio maior ou igual a 2.400,00.
6. Dados dos vendedores no qual sua faixa de comisso seja diferente do tipo
"Comissionrio".
7. Dados dos pedidos no qual o prazo de entrega seja igual ou menor 20.
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
48 de 50
Curso SQL
49 de 50
Curso SQL
33. Clientes que tem o prazo de entrega maior que 7 dias para o produto "Chocolate".
34. Vendedores que venderam o produto "Vinho" em quantidade superior ou igual a 1
litro.
35. Clientes que fizeram pedidos para o vendedor "Jesiel".
36. Clientes da cidade de "Braslia" ou de "Sobradinho" que tiveram seus pedidos
atendidos pelo vendedor "Raphael".
S G A S 9 1 0 , B l o c o D , sa l a s , 2 3 7 a 2 4 3 , M i x Pa r k S u l A s a S u l , B ra s l i a / D F
C E P : 7 0 . 3 9 0 - 1 0 0 Fo n e / Fa x : ( 6 1 ) 3 2 4 4 - 2 5 1 0 3 2 4 2 - 4 3 3 9
50 de 50