Buscar

Gerenciamento de Banco de Dados

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 84 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 84 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 84 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
 
 
 
 
 
 
2 
 
 
Sumário 
UNIDADE I - CONCEITOS DE BANCOS DE DADOS ................................................................................ 3 
1. Características de Sistemas de Bancos de Dados .................................................................................. 4 
2. Transações ............................................................................................................................................. 5 
3. Vantagens de se Utilizar um SGBD ...................................................................................................... 8 
 
UNIDADE II -MODELO RELACIONAL ..................................................................................................... 15 
1. O Modelo Relacional ........................................................................................................................... 16 
2. Introdução à Modelagem ..................................................................................................................... 17 
3. Atributos .............................................................................................................................................. 19 
4. Tipos de Atributos ............................................................................................................................... 21 
5. Domínio ............................................................................................................................................... 23 
6. Chave Estrangeira (Foreign Key) ........................................................................................................ 23 
 
UNIDADE III - SQL BÁSICO ....................................................................................................................... 31 
1. SQL.......................................................................................................................................................... 32 
2. Restrições ................................................................................................................................................ 35 
3. Consultas Básicas em SQL ...................................................................................................................... 37 
4. Comandos de Modificação de Dados em SQL ........................................................................................ 38 
 
UNIDADE IV - MAIS SQL ............................................................................................................................ 41 
1. Consultas Envolvendo NULL ................................................................................................................. 42 
2. Consultas Aninhadas (Subqueries) .......................................................................................................... 53 
3. Consultas Utilizando Joins ....................................................................................................................... 57 
4. Comandos de Alteração de Schema ......................................................................................................... 61 
5. Inserindo, Modificando e Excluindo Registros ....................................................................................... 65 
6. Transações ............................................................................................................................................... 68 
7. Visões ...................................................................................................................................................... 69 
8. Índices...................................................................................................................................................... 72 
9. Segurança ................................................................................................................................................ 74 
 
CONCLUSÃO ............................................................................................................................................... 82 
REFERÊNCIAS ............................................................................................................................................ 82 
 
 
3 
 
 
 
 
 
 
 
 
 
 
 
UNIDADE I - CONCEITOS DE 
BANCOS DE DADOS 
 
 
4 
 
1. Características de Sistemas de Bancos de Dados 
 
Banco de Dados - Representa o arquivo físico de dados, armazenado em 
dispositivos periféricos, onde estão armazenados os dados de diversos sistemas, 
para consulta e atualização pelo usuário. 
 
Tabelas Lógicas - Representam as estruturas de armazenamento de dados 
(arquivos) dos sistemas. 
 
S.G.D.B. (Sistema Gerenciador de Banco de Dados) - É o software 
responsável pelo gerenciamento (armazenamento e recuperação) dos dados no 
Banco de Dados. 
 
Dado - É o valor do campo quando é armazenado no Banco de Dados. Ex. O 
valor do campo "nome do cliente" para quem está fazendo a entrada de dados. 
 
Conteúdo do campo - É o valor do campo armazenado no Banco de Dados. Ex. 
O valor do campo "nome do cliente" sem estar, momentaneamente, sendo 
utilizado. 
Informação - É o valor que este campo representa para as atividades da 
empresa. Ex. Resposta a uma consulta. Qual os nomes do clientes localizados no 
Rio de Janeiro? 
 
Modelo de Banco de Dados: Modelo Relacional, Modelo Hierárquico e 
Modelo em Rede. Representa a estrutura física no qual o armazenamento dos 
dados foram projetados. O modelo identifica a estrutura interna de recuperação 
e armazenamento dos dados no qual o SGBD foi projetado. 
 
5 
 
Visões do Banco de Dados: 
 
a - Visão Interna - É aquela vista pelo responsável pela manutenção e 
desenvolvimento do SGBD. Existe a preocupação com a forma de 
recuperação e manipulação dos dados dentro do Banco de Dados. 
 
b - Visão Conceitual - É aquela vista pelo analista de desenvolvimento e pelo 
administrador das bases de dados. Existe a preocupação na definição de 
normas e procedimentos para manipulação dos dados, para garantir a sua 
segurança e confiabilidade, o desenvolvimento de sistemas e programas 
aplicativos e a definição no banco de dados de novos arquivos e campos. Na 
visão conceitual, existem 2 (duas) linguagens de operação que são: 
 
1) Linguagem de definição dos dados (DDL) - Linguagem que define as 
aplicações, arquivos e campos que irão compor o banco de dados 
(comandos de criação e atualização da estrutura dos campos dos 
arquivos). 
2) Linguagem de manipulação dos dados (DML) - Linguagem que define 
os comandos de manipulação e operação dos dados (comandos de 
consulta e atualização dos dados dos arquivos). 
 
c - Visão Externa - É aquela vista pelo usuário que opera os sistemas 
aplicativos, através de interfaces desenvolvidas pelo analista 
(programas), buscando o atendimento de suas necessidades. 
 
2. Transações 
 
O conceito de transação é fundamental em muitas áreas da computação e parti- 
cularmente fundamental em sistemas de banco de dados. Consideramos como 
6 
 
transação uma determinada “unidade de trabalho”, que é realizada em qualquer 
sistema computacional de um modo coerente e independente de outras transa- ções. 
Essas transações devem permitir que o sistema esteja num estado coerente antes e 
depois de sua execução, independente de falhas ou outros problemas que possam 
ocorrer. Devem permitir também que vários clientes diferentes acessem 
concorrentemente o sistema sem que isso possa corromper ou levar a estados que 
não sejam considerados coerentes. 
Uma definição clássica do conceito de transações envolve o acrônimo ACID, 
oriundo das propriedades de Atomicidade, Consistência, Isolamento e 
Durabilidade. 
 
Atomicidade: a propriedade atomicidade de banco de dados advém do con- ceito 
de átomo da física – o qual até recentemente supunha-se indivisível. Essa 
indivisibilidade pressupõeque as operações realizadas numa transação sejam todas 
realizadas por completo ou que nenhuma seja realizada. Popularmente seria o 
conceito do “tudo ou nada”. Isso permite que durante a nossa interação com um 
banco de dados possamos agrupar vários comandos relacionados com a garantia de 
que todos sejam executados – de modo que as informações arma- zenadas 
permaneçam num estado consistente após a execução da transação. 
 
Consistência: a propriedade de consistência assegura que a execução de 
qualquer transação trará o banco de dados de um estado consistente para outro 
estado também consistente. No caso, a “consistência” implica que todos os dados 
de um banco de dados devem ser válidos de acordo com um conjunto de regras que 
podem incluir restrições de tipo, valor, referências entre informações etc. 
 
Isolamento: a propriedade de isolamento determina que o resultado da execução 
concorrente de um conjunto de transações terá o mesmo resultado de sua execução 
em série (uma após a outra). 
O isolamento transacional é o que garante e permite o acesso concorrente de 
7 
 
múltiplos usuários ao mesmo SGBD. 
 
Durabilidade: a propriedade de durabilidade garante que uma vez que uma 
transação tenha sido finalizada com sucesso, os dados terão a garantia de terem sido 
armazenados corretamente – independentemente da eventualidade de falhas, falta 
de energia, erros de aplicação etc. 
 
Em nossa opinião, é justamente a propriedade de durabilidade que faz com que 
os bancos de dados sejam posicionados como “ferramentas sagradas” em muitas 
empresas. Novamente, não há menosprezo algum em dizer que o mais importante é 
o código que atende aos processos de negócios. Durabilidade é essencial: imagine 
qualquer empresa perdendo todos os seus dados. A continuidade do próprio negócio 
está em risco. Mas mais importante do que os dados em si é o uso que se faz deles. 
 
 
 
 
 
 
 
 
 
 
Sistemas tradicionais que vêm sendo desenvolvidos nas últimas décadas 
sempre tiveram como premissa em seus dados sua corretitude (grau em 
que o software executa suas funções de modo correto). Isso normalmente 
implicou na utilização de um banco de dados que pudesse satisfazer as pro- 
priedades ACID. 
Com o aumento da quantidade de informações e usuários nas aplicações, o 
fator disponibilidade passou em alguns casos a ser mais importante do que a 
própria consistência das informações. 
Estado flexível e Eventualmente consistente. O BASE tornou-
se uma sigla bastante comum ao lidar com bancos de dados não 
relacionais. 
Uma reflexão que vale a pena ser feita é: para os novos desafios e empreita- 
recomendado e em quais outras situações o BASE mostra-se mais adequa- 
do? 
8 
 
 
Papéis assumidos pelos usuários de SGBDs: 
 
 
 
 
 
DESENVOLVEDORES DE SGBDS 
 
São pessoas que projetam e codificam os SGBDs. Exem- plos 
de pessoas nesses papéis incluem os funcionários de 
empresas como Oracle, IBM e Microsoft que atuam 
diretamente na programação do software SGBD. No caso de 
SBGDs livres, podem ser também voluntários ou pes- soas e 
empresas interessadas na evolução do software. 
Normalmente são programadores altamente qualificados que 
trabalham no código-fonte do SBGD. Mas voluntários de 
projetos de software livre também podem contribuir em outras 
atividades, como documentação, por exemplo. 
 
 
DESENVOLVEDORES DE APLICAÇÕES E 
ADMINISTRADORES DE BANCOS DE DADOS 
(DBAS – DATABASE ADMINISTRATORS) 
São pessoas que desenvolvem software que armazena as 
informações em um SGBD. Tradicionalmente, em abordagens 
mais tradicionais e conservadoras, as equipes de 
desenvolvimento são separadas em desenvolvedores e 
DBAs. Os primeiros desenvolvem o software que acessa o 
SGBD. Os segundos projetam os bancos de dados e 
os mantêm. Em abordagens de desenvolvimento mais 
modernas, tende-se a eliminar essa distinção entre os papéis, 
pois quanto maior a distância entre os membros da equipe 
envolvidos no projeto de software, menor tende a ser a 
qualidade do software entregue. 
 
 
 
USUÁRIOS FINAIS 
São pessoas que não interagem diretamente com os bancos de 
dados, e sim com as aplicações criadas pelos desenvolvedores 
de software que armazenam suas informações em SGBDs. A 
maioria das pessoas enquadra-se nessa categoria e, embora 
sejam os grandes beneficiados pela tecnologia dos sistemas de 
bancos de dados, raramente possuem ciência do fato. 
 
3. Vantagens de se Utilizar um SGBD 
 
Definições: 
 
Sistema Tradicional - São aqueles em que os dados do sistema estão 
armazenados fisicamente separados um do outro. O acesso é feito pelos 
programas de aplicação, associando o nome externo dos arquivos e definindo todo 
o registro independente da utilização dos campos. 
Sistema de Banco de Dados - É aquele em que os dados são definidos para o 
S.G.B.D., através da DDL (linguagem de definição de dados). Fisicamente estão 
armazenados em um único local, sendo o acesso realizado apenas através do 
S.G.B.D. Nos programas de aplicação, é necessário apenas definir os campos que 
9 
 
serão utilizados pelo programa. 
 
Vantagens do Banco de Dados: 
 
1 - Redução ou Eliminação de Redundâncias - Possibilita a eliminação de 
dados privativos de cada sistema. Os dados, que eventualmente são comuns a mais 
de um sistema, são compartilhados por eles, permitindo o acesso a uma única 
informação sendo consultada por vários sistemas. 
 
2 - Eliminação de Inconsistências - Através do armazenamento da informação 
em um único local com acesso descentralizado e, sendo compartilhada à vários 
sistemas, os usuários estarão utilizando uma informação confiável. A 
inconsistência ocorre quando um mesmo campo tem valores diferentes em 
sistemas diferentes. Exemplo, o estado civil de uma pessoa é solteiro em um 
sistema e casado em outro. Isto ocorre porque esta pessoa atualizou o campo em 
um sistema e não o atualizou em outro. Quando o dado é armazenado em um 
único local e compartilhado pelos sistemas, este problema não ocorre. 
 
3 - Compartilhamento dos Dados - Permite a utilização simultânea e segura de 
um dado, por mais de uma aplicação ou usuário, independente da operação que 
esteja sendo realizada. Deve ser observada apenas o processo de atualização 
concorrente, para não gerar erros de processamento (atualizar simultaneamente o 
mesmo campo do mesmo registro). Os aplicativos são por natureza multiusuário. 
 
4 - Restrições de Segurança - Define para cada usuário o nível de acesso a ele 
concedido (leitura, leitura e gravação ou sem acesso) ao arquivo e/ou campo. Este 
recurso impede que pessoas não autorizadas utilizem ou atualizem um 
determinado arquivo ou campo. 
 
10 
 
5 - Padronização dos Dados - Permite que os campos armazenados na base de 
dados sejam padronizados segundo um determinado formato de armazenamento 
(padronização de tabela, conteúdo de compôs, etc) e ao nome de variáveis 
seguindo critérios padrões preestabelecido pela empresa. Ex. Para o campo 
"Sexo" somente será permitido armazenamento dos conteúdos "M" ou "F". 
 
6 - Independência dos Dados - Representa a forma física de armazenamento dos 
dados no Banco de Dados e a recuperação das informações pelos programas de 
aplicação. Esta recuperação deverá ser totalmente independente da maneira com 
que os dados estão fisicamente armazenados. Quando um programa retira ou 
inclui dados o SGBD compacta-os para que haja um menor consumo de espaço 
no disco. Este conhecimento do formato de armazenamento do campo é 
totalmente transparente para o usuário. A independência dos dados permite os 
seguintes recursos: 
a - Os programas de aplicação definem apenas os campos que serão utilizados 
independente da estrutura interna dos arquivos 
b - Quando há inclusão de novos campos no arquivo, será feita manutenção 
apenas nos programas que utilizam esses campos, não sendo necessário mexer 
nos demais programas. Obs.: Nos sistemas tradicionaiseste tipo de operação 
requer a alteração no lay-out de todos os programas do sistema que utilizam o 
arquivo. 
 
7 - Manutenção da Integridade - Consiste em impedir que um determinado 
código ou chave em uma tabela não tenha correspondência em outra tabela. Ex. 
Um código de uma determinada disciplina na tabela “Histórico Escolar” sem a 
sua descrição na tabela “Disciplina”. 
 
 
 
 
11 
 
LEITURA COMPLEMENTAR: 
 
 
BANCOS DE DADOS OPEN SOURCE: PRESENTE OU FUTURO? 
Cezar Taurion 
Nos eventos sobre Open Source, volta e meia surge uma pergunta 
sobre bancos de da- dos Open Source. Bem, tenho minha opinião 
pessoal e quero compartilhar com você. Vamos ver se vai gerar 
muita discordância. 
Os softwares de banco de dados são um dos mais importantes 
componentes de softwa- re de uma organização. Nesse ambiente, as 
alternativas de software livre já são bastante conhecidas e 
frequentemente são mencionadas na mídia, como MySQL, 
PostgreSQL, Ingres e Derby. 
O MySQL é um produto de uma empresa privada, a MySQL AB. 
Seu código é desenvolvi- do pelos funcionários da empresa e com isso 
ela garante a propriedade intelectual sobre o produto. Existe uma 
comunidade envolvida, mas submissões de código são restritas 
apenas à correção de bugs. Uma pergunta: o MySQL pode ser 
considerado realmente Open Source, uma vez que não adota o 
modelo de desenvolvimento colaborativo? O MySQL é ofertado 
tanto em GPL como sob licença comercial. As duas versões são fun- 
cionalmente equivalentes, sendo diferenciadas pelo nível de suporte e 
certificação. In- discutivelmente é o banco de dados Open Source 
mais popular, com o maior mindshare do setor. 
Outro software é o PostgreSQL, que tem suas origens no Postgres 
desenvolvido pela Universidade de Berkeley. Podemos citar 
também o Ingres, que foi um banco de dados da Computer 
Associates e agora pertence a uma organização independente, a 
Ingres Corporation (<www.ingres.com>) e o Derby, originalmente 
o Cloudscape da IBM e re- centemente doado para a Apache 
Software Foundation, onde agora é o projeto Derby. O Derby 
(<http://db.apache.org/derby/>) é um banco de dados em Java, 
geralmente embarcado em outros softwares. A IBM, por exemplo, o 
utiliza embutido em diversos softwares das famílias WebSphere, 
Tivoli e Lotus. 
Nas minhas andanças pelo mercado tenho visto que na prática os 
bancos de dados Open Source só aparecem como competidores dos 
produtos mais avançados nas apli- cações pouco sofisticadas ou 
bem específicas. 
Por sua vez, os sistemas de banco de dados proprietários buscam 
http://www.ingres.com/
http://www.ingres.com/
http://db.apache.org/derby/
http://db.apache.org/derby/
12 
 
competir com funcio- nalidades diferenciadoras, principalmente as 
relacionadas com administração de am- bientes complexos; 
escalabilidade; desempenho com grande volume de transações; alta 
disponibilidade e capacidade de recuperação rápida; e recursos de 
data warehousing. Além disso, foi criado um ecossistema de negócios 
em torno dos principais softwares de banco de dados proprietários, 
com diversas empresas independentes oferecendo ferra- mentas de 
software complementares (geradores de relatórios, analisadores 
estatísticos e outros), serviços de suporte técnico especializado e 
formação de recursos humanos, e assim por diante, o que também 
cria uma barreira de entrada difícil de transpor por qualquer novo 
entrante. 
Já o ecossistema empresarial criado em torno dos bancos de dados 
Open Source (onde se gera dinheiro) ainda é incipiente, sendo 
formado por pequenas empresas com abrangência de atuação 
bastante limitada. Ano passado, a MySQL gerou cerca de 50 
milhões de dólares em receita 
(<http://news.com.com/MySQL+hits+50+million+reve- 
nue,+plans+IPO/2100-7344_3-6179290.html>), mas ainda é um 
traço (cerca de 0,03%) no gráfico que mostra o mercado global de 
bancos de dados relacionais, estimado pelo IDC em 16 bilhões de 
dólares. Como comparativo, o IDC estima que, nesse mesmo ano, a 
receita da IBM com a família de produtos DB2 foi de 
aproximadamente 3,5 bilhões de dólares. 
Qual o papel que os bancos de dados Open Source desempenharão? 
Na minha opinião, estarão atuando (pelo menos nos próximos 3 a 4 
anos) na chamada faixa de produtos com funcionalidades 
comoditizadas, onde as características de preço são as de maior 
importância. Os usuários típicos serão organizações e aplicações 
que não precisam de recursos mais sofisticados. 
Como avaliar a qualidade de um banco de dados Open Source? 
Existem diversos crité- rios que podem e devem ser considerados 
em uma análise para seleção de um banco de dados. Os níveis de 
importância das variáveis da análise estão diretamente relacionados 
com os objetivos do negócio e das necessidades a serem impostas 
aos softwares de bancos de dados. 
Alguns dos principais fatores a serem considerados são: 
a. Recursos de gerenciamento e administração. São as ferramentas de apoio 
às ta- refas do administrador do banco de dados. 
b. Desempenho e escalabilidade. Os recursos que o software oferece para 
garantir desempenho adequado, nos volumes de transações que serão 
demandados. 
http://news.com.com/MySQL%2Bhits%2B50%2Bmillion%2Breve-
http://news.com.com/MySQL%2Bhits%2B50%2Bmillion%2Breve-
http://news.com.com/MySQL%2Bhits%2B50%2Bmillion%2Breve-
13 
 
c. Recursos técnicos. Disponibilidade de recursos como triggers, stored 
procedu- res, cursors, subqueries, capacidade de replicação, recursos de 
indexação, aderência a padrões (ANSI SQL), particionamento, 
backup/recovery, suporte a dados não es- truturados, independência de 
plataforma e recursos de segurança. 
d. Custos de Propriedade. 
e. Suporte técnico e disponibilidade de recursos humanos. Abrangência do 
ecos- sistema em termos de serviços de suporte e qualificação de recursos 
humanos. 
f. Disponibilidade de aplicativos. 
g. Recursos de data warehousing e BI. 
h. Recursos de desenvolvimento de aplicações. 
i. Modalidade de licenciamento. 
j. Visão, estratégia e road map do produto. 
k. Tamanho e participação/envolvimento da comunidade. 
l. Modelo de governança adotado pela comunidade. 
m. Base instalada e adoção pelo mercado. 
Bem e quanto a uma pergunta que muitos me fazem... Minha 
empresa deve adotar um banco de dados Open Source? Para mim, 
para mudar um software de banco de dados deve haver uma 
estratégia impulsionada por razões fortes e consistentes. Por exemplo, 
se houver desconfianças que o atual fornecedor esteja saindo do 
mercado; falta de fun- cionalidade do software (não é mais adequado 
às necessidade das novas aplicações da empresa); falta de visão 
estratégica por parte do fornecedor do software atual; custos de 
manutenção e operação muito elevados para o resultado obtido; falta 
de pessoal gaba- ritado, que esteja disponível no mercado; carência de 
consultorias e serviços de suporte externos; relacionamento com o 
fornecedor cada vez mais deteriorado... Mudar para um banco de dados 
Open Source simplesmente por questões ideológicas deve estar fora 
de cogitação, pois banco de dados é muito sério para ser tratado de 
forma simplista. 
OK. E quais seriam então os custos e riscos da migração? Existem 
custos de migração que não podem ser subestimados. Temos os 
custos da conversão de dados, custos da codificação, testes e o que 
chamamos reconciliação entre as aplicações no novo e no antigo 
ambiente, sempre considerando que dificilmente conseguiremos 
fazer uma mi- gração estilo big bang, mas que esta será gradual. 
Quanto mais complexas forem as aplicações a serem convertidas, 
mais custosa será a migração. Essa complexidade pode ser medida 
pelo número de programas, número de tabelas relacionais, restrições 
14 
 
de integridade referencial e tamanho do banco de dados. Existem 
custos indiretos como a construção de interfaces entre as aplicações 
já con- vertidas e as que ainda estão no banco de dados antigo.Também os custos de supor- te técnicos aos dois ambientes 
implicam, muitas vezes, em gastos adicionais elevados, 
principalmente quando o novo banco de dados não for de completo 
domínio da equipe técnica da empresa. 
Em resumo, os custos da migração afetam os cálculos de custos totais 
de propriedade. A maioria das empresas é extremamente cautelosa em 
trocar de fornecedor de softwares críticos. O perigo de uma 
interrupção nos seus negócios decorrente de uma troca mal 
planejada ou inadequada faz com que os custos de troca possam ser 
extremamente elevados e desestimuladores. Migrar de um banco 
de dados para outro é sempre uma tarefa complexa e de alto risco, 
que só deve ser efetuada quando os benefícios forem claramente 
demonstráveis. 
Fonte:Taurion (2007, online). 
 
 
 
 
 
15 
 
 
 
 
 
 
 
 
 
 
 
UNIDADE II -MODELO 
RELACIONAL 
 
 
16 
 
1. O Modelo Relacional 
 
Definição: 
Consiste em mapear o mundo real do sistema em um modelo gráfico que irá 
representar o modelo e o relacionamento existente entre os dados. 
 
Entidade - Identifica o objeto de interesse do sistema e tem "vida" própria, ou 
seja, a representação abstrata de um objeto do mundo real sobre o qual 
desejamos guardar informações. 
 
Exemplo: Clientes, Fornecedores, Alunos, Funcionários, Departamentos, 
etc. 
 
Não são entidades: 
 - Entidade com apenas 1 elemento; 
 - Operações do sistema; 
 - Saídas do sistema; 
 - Pessoas que realizam trabalhos (usuários do sistema); 
 - Cargos de direção 
 
Instância de Entidade - São os elementos da entidade. 
 Exemplo: Cliente 10, Funcionário João, Aluno Pedro, etc. 
 
Atributo - Informações que desejamos guardar sobre a instância de entidade. 
 Exemplo: Nome do aluno, Número da turma, Endereço do fornecedor, Sexo 
do funcionário, etc. 
17 
 
 
Domínio do Atributo - Universo de valores que um atributo pode armazenar. 
 
Exemplo: 
-Conjunto de valores do atributo Sexo do funcionário: M ou F; 
-Conjunto de valores do atributo Nome do aluno: 40 caracteres alfanumérico. 
-Conjunto de valores do atributo salário: inteiro maior que 5000 
 
2. Introdução à Modelagem 
 
Representação Gráfica: 
 
- Entidade 
 
 
 
 
- Relacionamento 
 
 
 
- Atributo 
 
 
 
Relacionamento - Representa a associação entre os elementos do conjunto de um 
entidade com outra entidade. 
Exemplo: 
 
 O João está matriculado na disciplina de Banco de Dados 
 
 onde: 
 - João - Elemento do conjunto de valores do atributo Nome do aluno da entidade 
Aluno; 
 - Banco de Dados - Elemento do conjunto de valores do atributo Nome da 
disciplina da entidade Disciplina; 
18 
 
 - matriculado - Ligação existente entre um aluno e uma disciplina. 
 
 
 
Cardinalidade de Relacionamentos 
 
 Representa a frequência com que existe o relacionamento. 
 
Exemplo: 
 Relacionamento 1:1 - O João é casado com a Maria. 
 
 onde: 
 - João - Elemento do conjunto de valores do atributo Nome da entidade Homem. 
 - Maria - Elemento do conjunto de valores do atributo Nome da entidade Mulher. 
 - casado - Ligação entre um homem e uma mulher, sendo que um homem pode 
ser casado com uma e apenas uma mulher, assim como uma mulher pode ser 
casada com um e apenas um homem. 
 
 
 
Relacionamento 1:N ou N:1 - O Pedro trabalha no Departamento Pessoal. 
 onde: 
 - Pedro - Elemento do conjunto de valores do atributo Nome da entidade 
Funcionário. 
 - Depart. Pessoal - Elemento do conjunto de valores do atributo Nome do 
departamento da entidade Departamento. 
 - trabalha - Ligação entre um Funcionário e um Departamento, onde um 
funcionário pode trabalhar em um e somente um departamento e um departamento 
pode ter vários funcionários. 
 
19 
 
 
 
 Relacionamento N : M - O Antônio está matriculado na disciplina Banco de 
Dados. 
 
 onde: 
 - Antônio - Elemento do conjunto de valores do atributo Nome da entidade 
Aluno. 
 - Banco de Dados - Elemento do conjunto de valores do atributo Nome da 
Disciplina da entidade Disciplina. 
 - matriculado - Ligação existente entre um aluno e uma disciplina, onde um 
aluno pode estar matriculado em várias disciplinas e cada disciplina pode ter 
vários alunos matriculados. 
 
 
3. Atributos 
 
Os atributos são propriedades utilizadas para descrever uma entidade, podemos 
afirmar que os Atributos são as características contidas nas Entidades, por 
exemplo, em uma Entidade Cliente, podemos relacionar os atributos CPF, 
NOME, IDADE, ENDEREÇO, BAIRRO, CIDADE etc. Vamos ao exemplo 
passo a passo: 
 
20 
 
 
3°) Outra maneira de demonstrar uma Entidade e Atributos é em 
forma de Planilha: 
Observando a figura abaixo, verificamos que a tabela PRODUTOS 
contém Atributos que são os nomes das colunas e um conceito novo chamado de 
TUPLA. Definindo de modo formal, uma linha é denominada de Tupla. 
 
 
21 
 
4. Tipos de Atributos 
 
Atributos Simples e Compostos: 
Podemos classificar um atributo como sendo simples ou composto. 
 Atributo simples: seu valor é indivisível. Por exemplo, os atributos sexo e 
saldo da conta 
são simples. 
 Atributo composto: seu valor pode ser decomposto em partes. Por exemplo, 
dependendo da aplicação que se deseja desenvolver, o endereço pode ser 
decomposto em tipo do logradouro, nome do logradouro, número, complemento, 
bairro, CEP, cidade, estado e país. 
 
Atributos Monovalorados e Multivalorados 
 
Os atributos também podem ser classificados como sendo monovalorados ou 
multivalorados. 
 
 Atributo monovalorado: possui apenas um valor num dado instante. Por 
exemplo, o nome de uma pessoa é monovalorado, pois uma pessoa não pode 
ter dois nomes ao mesmo tempo. 
 
 Atributo multivalorado: pode ter diversos valores ao mesmo tempo. Por 
exemplo, o apelido de uma pessoa é multivalorado, pois uma pessoa pode ter 
vários apelidos ao mesmo tempo. 
 
Observe que, dependendo da aplicação, o atributo telefone pode ser 
monovalorado ou multivalorado. Se for suficiente conhecer apenas um telefone da 
entidade, o atributo será monovalorado. Se precisarmos conhecer vários telefones 
da entidade (residencial, comercial, celular etc), o atributo será multivalorado. 
22 
 
 
Atributos Requeridos e Valores Nulos 
Um atributo é requerido se o seu valor não pode ser nulo, ou seja, não pode ser 
omitido. Por exemplo, o nome do aluno, em geral, é requerido, pois não faz sentido 
cadastrar um aluno sem nome. 
Quando um atributo não é requerido, seu valor para uma determinada entidade 
pode ser nulo. Isso pode ocorrer quando a informação está indisponível. Por 
exemplo, um aluno pode ter valor indisponível para o atributo CPF, se esse aluno 
ainda não tiver tirado seu CPF. Nesse caso, o valor do CPF desse aluno será nulo. 
 
Outra situação que pode levar ao surgimento de valores nulos ocorre quando o a 
informação não se aplica àquela entidade. Por exemplo, atributo número do 
certificado de reservista não se aplica às alunas. Nesse caso, pode ser adequado 
reformular o modelo de dados. Como veremos mais adiante, a introdução de valores 
nulos no banco de dados pode trazer consequências indesejáveis e por isso deve ser 
evitada. 
 
Atributos Derivados 
Um atributo é derivado se o seu valor pode ser obtido a partir de outros dados 
contidos no BD. Por exemplo, se já tivermos o atributo data de nascimento, o 
atributo idade é derivado, pois seu valor pode ser obtido a partir da data de 
nascimento. Nesse caso, não vale a pena ter o atributo idade. 
 
Vejamos outro exemplo. Num banco é preciso armazenar dados de todas as 
operações (saques, depósitos, transferências etc.) que ocorrem nas contas dos 
clientes. Com essas informações é possível calcular o saldo da conta de qualquer 
cliente somando o valor das operações de crédito e subtraindo o valor das operações 
de débito naquela conta. No entanto, esse cálculo pode ser bem demorado.Por esse 
motivo, para melhorar o desempenho do BD, vale a pena incluir o atributo derivado 
saldo da conta. 
23 
 
 
5. Domínio 
 
As restrições de domínio especificam que o valor de cada atributo deve ser um 
valor atômico que, para cada atributo criado, devemos associar um tipo a ele. A 
essa associação, damos o nome de domínio. A seguir, demonstraremos alguns 
tipos: 
■ Numéricos: inteiros e reais. 
■ Caracteres. 
■ Booleanos. 
■ Cadeias de caracteres de tamanho fixo e tamanho variável. 
■ Data. 
■ Hora. 
 
A seguir, iremos criar uma tabela chamada Funcionário, 
contendo NOME DO CAMPO, TIPOS e TAMANHO para 
exemplificar a aplicação dos tipos. 
 
Propriedades dos campos da tabela Funcionário: 
 
NOME DO 
CAMPOS 
TIPO DO 
CAMPO 
TAMANHO 
Matrícula Inteiro 3 
Nome Caractere 40 
Idade Inteiro 3 
Data 
Admissão 
Data 8 
 
 
6. Chave Estrangeira (Foreign Key) 
 
No modelo relacional a única forma de relacionar dados que existem em uma 
tabela com dados que existem em outra tabela é através de atributos comuns. 
Assim, vão existir atributos especiais (chaves estrangeiras) que servem para 
fazer a ligação com outras tabelas, onde esses mesmos atributos são usados para 
identificar, unicamente, cada uma das linhas (chaves primárias). Os tipos de chaves 
podem sem: 
 
24 
 
 Chave Primária: chave que identifica cada tupla(linha) 
 Chave Estrangeira: atributo ou conjunto de atributos de uma relação, que é 
chave primária em outra relação 
 
Uma chave primária (atributo identificador) é uma coluna ou um grupo de 
colunas que assegura a unicidade das linhas dentro de uma tabela. Uma chave 
primária que tenha mais de uma coluna é chamada de chave primária composta. 
 
Chaves primárias são geralmente indicadas pela sigla PK (primary key) 
Exemplos de Chaves Primárias: 
 Produto (codigo_produto (PK), Descrição, ...) 
 Veiculo (chassi (PK), Cor, Tipo, ...) 
 Usuario (login (PK), Senha, ...) 
 Conta_Bancaria(agencia (PK),conta_corrente (PK), Titular) 
 
Para criação de chaves primárias, algumas regras são definidas, conforme a seguir: 
 Valores de chave primária não podem ser nulos (not null): 
 Valores de chaves primarias não podem ser nulos porque uma linha sem 
chave primaria não se distingue de outras linhas da mesma tabela; 
 Colunas com chaves primarias não podem ter valores duplicados 
 Um valor duplicado é um valor exatamente igual a outro de uma ou mais 
linhas da mesma coluna na mesma tabela; 
 Se a coluna possui valores duplicados esta não pode servir de identificador 
da linha; 
 
Recomendações: 
1. Selecione chaves primarias absolutamente disciplinada e que permaneçam 
únicas; 
2. Selecione chaves primarias que não tenham qualquer tendência a alterações; 
25 
 
3. Se possível seleciona chaves primarias simples; 
4. De preferência a colunas numéricas para chaves primarias; 
5. Selecione chaves primarias que sejam familiares; 
6. Se não houver nenhuma coluna com chave primaria candidata, utilize chaves 
primarias atribuídas pelo sistema (autonumeração). 
 
Uma chave estrangeira é uma coluna ou grupo de colunas que pode ou não ser 
chave primária da tabela em questão, mas, com certeza é chave primária de outra 
tabela. Uma chave estrangeira formada por mais de uma coluna é chamada de chave 
estrangeira composta. Chaves estrangeiras são indicadas pela sigla FK (Foreign 
Key) 
 
Exemplos de Chave Estrangeira: 
 Dependentes (codigo_dependente, codigo_socio(FK)) 
 Pedido (nota_fiscal, codigo_cliente(FK)) 
 
Como estudamos, toda entidade (tabela) deverá possuir um atributo único e 
não nulo que identifique um registro. Esse atributo é chamado de chave primária ou 
primary key. A constraint primary key é equivalente às cláusulas NOT NULL + 
UNIQUE juntas. Em uma tabela deve-se existir apenas uma constraint primary key, 
enquanto podem existir variadas ocorrências da cláusula UNIQUE. 
 
Veja os exemplos abaixo para a criação de Primary Key: 
 
 
26 
 
 
 
A constraint REFERENCES permite fazer a validação das chaves estrangeiras. 
Isto é, não se podem inserir nos campos referenciados como chaves estrangeira 
valores que não existam na tabela onde os campos são chave primária. 
Veja exemplo na qual o campo codigo_postal é uma chave estrangeira da tabela 
POSTAL, para isso foi usado o comando REFERENCES, onde o campo 
codigo_postal da tabela PESSOA refere-se ao campo codigo da tabela POSTAL: 
 
 
 
27 
 
 LEITURA COMPLEMENTAR 
 
A REVOLUÇÃO DO BIG DATA ESTÁ PRESTES A ACONTECER 
Cezar Taurion 
O termo Big Data começa a despertar muita atenção, mas ainda é um 
conceito mal de- finido e compreendido. Com uma rápida pesquisa 
no Google, identifiquei, pelo menos, uma dúzia de definições. Neste 
artigo, vou falar um pouco sobre o assunto e debater alguns 
desafios que temos para conseguir colocar projetos de Big Data em 
ação. 
Sem entrar em definições e nos atendo apenas a conceitos, podemos 
resumir com uma fórmula simples o que é Big Data: volume + 
variedade + velocidade de dados. Volume porque, além dos dados 
gerados pelos sistemas transacionais, temos a imensidão de da- dos 
gerados pelos objetos na Internet das Coisas, como sensores e câmeras, 
e os gerados nas mídias sociais, via PCs, smartphones e tablets. 
Variedade porque estamos tratando tanto de dados textuais 
estruturados quanto dos não estruturados, como fotos, vídeos, emails 
e tuítes. E, por fim, velocidade porque, muitas vezes, precisamos 
responder aos eventos quase que em tempo real. Ou seja, estamos 
falando de criação e tratamento de dados em volumes massivos. 
Outro desafio: criar e tratar apenas de dados históricos, como o 
veterano Data Warehou- se e as tecnologias de BI (Business 
Intelligence) começam a se mostrar lentos demais para a velocidade 
com que os negócios precisam tomar decisões. Aliás, o termo BI já tem 
mais de 50 anos. Ele foi cunhado por Hans Peter Luhn, pesquisador 
da IBM em um artigo escrito nos idos de 1958. 
Quando falamos em volume, os números são gigantescos. Se 
olharmos globalmente, estamos falando em zetabytes ou 10²¹ bytes. 
Grandes corporações armazenam múlti- plos petabytes e mesmo as 
pequenas e médias empresas trabalham com dezenas de terabytes 
de dados. Esse volume tende a crescer geometricamente. Em um 
mundo cada vez mais competitivo e rápido, as empresas precisam 
tomar decisões baseadas não ape- nas em palpites, mas em dados 
concretos. Assim, para um setor de marketing, faz todo sentido ter 
uma visão 360° de um cliente, olhando não apenas o que ele 
comprou da empresa, como registrado no ERP, mas saber o que ele 
pensa e diz sobre a empresa e como os faz - pelo Facebook e 
Twitter, por exemplo. 
Hoje, já é consenso que dados são os recursos naturais da nova 
Revolução Industrial. Na atual sociedade industrial, ter apenas 
recursos naturais, como minério, e exportá-los de forma bruta - 
28 
 
importando em troca produtos manufaturados - não garante a 
competiti- vidade de um país no longo prazo. O importante é a 
tecnologia e o conhecimento que cria produtos manufaturados. 
Afinal, um quilo de satélite vale imensamente mais do que um quilo 
de minério de ferro. 
Fazendo um paralelo, na sociedade da informação, é crucial saber 
tratar dos dados na velocidade adequada. Dados não tratados e 
analisados em tempo hábil são dados como tal, podem - e deverão 
- ser quantificados economicamente. 
Big Data representa um desafio tecnológico, pois demanda atenção à 
infraestrutura e tecnologias analíticas. O processamento de volumes 
massivos de dados pode ser facili- tado pelo modelo de computação 
em nuvem, desde, é claro, que esse imenso volume não seja 
transmitido repetidamente via Internet. Só para lembrar, os 
modelos de co- brança pelo uso de nuvens públicas tendem a gerar 
processamentos muito baratos, mas tornam caro a transmissão de 
muitos dados. 
A principal base tecnológica para Big Data Analyticsé o Hadoop e 
os bancos de dados NoSQL, onde“No” significa Not Only SQL, ou 
seja, usa-se bases de dados SQL e não SQL. A importância do “Not 
Only” SQL explica-se pelo fato do modelo relacional ser base- ado 
na época de sua criação, no início dos anos 70. Nessa época, acessar, 
categorizar e normalizar dados era bem mais fácil do que hoje. 
Praticamente não existiam dados não estruturados circulando pelos 
computadores da época. Também não foi desenhado para escala 
massiva ou para um processamento muito rápido. Seu objetivo 
básico era possibilitar a criação de queries que acessassem bases de 
dados corporativas e, portan- to, estruturadas. Para soluções Big Data, 
tornam-se necessárias várias tecnologias, desde bancos de dados SQL 
a softwares que utilizem outros modelos, que lidem melhor com 
documentos, grafos, processamento paralelo etc. 
A complexidade do Big Data vem à tona quando lembramos que 
não estamos falan- do apenas de armazenamento e tratamento 
analítico de volumes massivos de dados, mas de revisão, ou criação, 
de processos que garantam a qualidade desses dados e de processos 
de negócios que usufruam dos resultados obtidos. Portanto, Big 
Data não é apenas um debate sobre tecnologias, mas, 
principalmente, sobre como os negócios poderão usufruir da 
montanha de dados que está agora à sua disposição. Aí emerge a 
questão da integração: como integrar bases de dados estruturadas e 
não estruturadas com diversos softwares envolvidos? 
O Big Data abre oportunidades profissionais bem amplas. Na minha 
29 
 
opinião, existe es- paço para dois perfis profissionais: um mais 
voltado para os negócios e qualificados para tratar analiticamente as 
informações geradas por essas imensas bases de dados e outro com 
viés mais técnico ou Data Architect. 
Pelo viés dos negócios, um artigo interessante que foi publicado há 
poucos meses pelo Wall Street Journal, na edição brasileira, aponta 
como problema a escassez de talentos. Ele fala que muitas empresas 
americanas começaram a procurar profissionais que sai- bam 
interpretar os números usando a análise de dados, também 
conhecida como inte- ligência empresarial. Mas encontrar 
profissionais qualificados tem se mostrado difícil. O resultado foi que 
várias faculdades americanas, como a Faculdade de Pós-Graduação 
em Administração da Universidade Fordham e a Faculdade de 
Administração Kelley, da Universidade de Indiana, começaram a 
oferecer disciplinas eletivas, cursos de extensão e mestrados em 
análise de dados. Já o Data Architect deve lidar com tecnologias 
SQL e NoSQL, conhecer profundamente conceitos como stream 
processing e Event Driven Architecture (EDA) e, portanto, ter 
capacidade de desenhar estratégias para manusear e analisar grandes 
volumes de dados de formatos diferentes, quase que em tempo real. 
A ideia de stream processing, ou stream computing, é fantástica; é um 
novo paradigma. No modelo de data mining tradicional, uma 
empresa filtra dados dos seus vários siste- mas e, após criar um data 
warehouse, dispara “queries”. Na prática, faz-se uma garim- pagem 
em cima de dados estáticos, que não refletem o momento, mas sim o 
contexto de horas, dias ou mesmo semanas atrás. Com o stream 
computing, essa garimpagem é efetuada em tempo real. Em vez de 
disparar queries em cima de uma base de dados estática, coloca-se 
uma corrente contínua de dados (streaming data) atravessando um 
conjunto de queries. Podemos pensar em inúmeras aplicações, sejam 
estas em finanças, saúde e mesmo manufatura. 
Vamos ver este último exemplo: um projeto em desenvolvimento com 
uma empresa de fabricação de semicondutores monitora em tempo 
real o processo de deteção e classi- ficação de falhas. Com o stream 
computing, as falhas nos chips que estão sendo fabri- cados são 
detetadas em minutos e não em horas ou semanas. Os wafers 
defeituosos podem ser reprocessados e, mais importante ainda, pode-
se fazer ajustes em tempo real nos próprios processos de fabricação. 
Quanto ao EDA, pode-se começar a estudar o assunto acessando 
seu verbete na Wiki- pedia. 
O termo Big Data vai aparecer na tela do radar dos CIOs em breve. 
Aliás, já aparece no canto da tela de um ou outro CIO, e, 
30 
 
provavelmente, em alguns anos, já será um dos temas mais 
prioritários das tradicionais listas de “tecnologias do ano”. Portanto, é 
bom estar atento à sua evolução e começar a colocar em prática 
algumas provas de conceito. 
Fonte: Taurion (2012, online). 
 
 
 
 
 
 
O maior evento da comunidade brasileira de NoSQL: 
<http://nosqlbr.com/>. 
 
http://nosqlbr.com/
31 
 
 
 
 
 
 
 
 
 
 
UNIDADE III - SQL BÁSICO 
 
 
32 
 
1. SQL 
 
 
A primeira versão da linguagem SQL, chamada SEQUEL (Structured Query 
English Language), surgiu em 1974 nos laboratórios da IBM (Califórnia). 
Entre 1976 e 1977 ela foi revisada e ampliada, tendo então o seu nome 
alterado para SQL. 
Devido ao sucesso da nova forma de consulta e manipulação de dados dentro 
de um ambiente de banco de dados, sua utilização tornou-se cada vez maior. 
Vários SGBD’s atuais utilizam o SQL como a linguagem padrão para o 
acesso às bases de dados. Entre eles podemos citar: 
 
 
 
 
DB2 da IBM 
ORACLE da Oracle 
Corporation; RDB da Digital 
SYBASE da Sybase 
INC SQL Server da 
Microsoft 
Ingres da Computer Associates 
 
 
 
 
Em 1982 o American National Standard Institute (ANSI) tornou a SQL a 
linguagem padrão para a manipulação de dados em ambiente relacional. 
A linguagem SQL pode ter vários enfoques: 
 
 
Definições de Dados e Tipos em SQL: 
 
Linguagem interativa de consulta (query AdHoc) 
 
Através de comandos SQL os usuários podem montar consultas poderosas, 
sem a necessidade da criação de um programa, podendo utilizar ferramentas 
front-end para a montagem de relatórios. 
 
33 
 
 
Linguagem de programação para acesso às bases de dados 
 
Comandos SQL embutidos em programas de aplicação (escritos em C, C++, 
Java, Visual Basic e etc) acessam os dados armazenados em uma base de 
dados relacional. 
 
 
Linguagem de administração de banco de dados 
 
O responsável pela administração do banco de dados (DBA) pode utilizar 
comandos SQL para realizar tarefas relacionadas com a manutenção dos 
schemas do banco de dados. 
 
 
Linguagem de consulta em ambiente cliente/servidor 
 
Os programas sendo processados nos computadores dos clientes (front ends) 
usam comandos SQL para se comunicarem, através de uma rede, com um 
SGBD sendo processado em uma máquina servidora (back end); 
 
 
Linguagem para bancos de dados distribuídos 
 
 
A linguagem SQL é também a linguagem padrão para a manipulação de 
dados em uma base de dados distribuída. 
34 
 
Linguagem de definição de dados (DDL) 
 
Permite ao usuário a definição da estrutura e organização dos dados 
armazenados, e das relações existentes entre eles. 
 
 
Linguagem de manipulação de dados (DML) 
 
Permite a um usuário, ou a um programa de aplicação, a execução de 
operações de inclusão, remoção, seleção ou atualização de dados 
previamente armazenados na base de dados. 
 
 
Controle de acesso 
 
Protege os dados de manipulações não autorizadas. 
 
 
Integridade dos dados 
 
Auxilia no processo de definição da integridade dos dados, protegendo 
contra corrupções e inconsistências geradas por falhas do sistema de 
computação, ou por erros nos programas de aplicação. 
35 
 
2. Restrições 
 
Podemos apontar as seguintes vantagens no uso da linguagem SQL: 
 
 
Independência de fabricante 
 
A linguagem SQL é adotada por praticamente todos os SGBD’s relacionais 
existentes no mercado, além de ser uma linguagem padronizada (ANSI). 
Com isso, pelo menos em tese, posso mudar de SGBD sem me preocupar em 
alterar os programas de aplicação. 
 
 
Portabilidade entre plataformas de hardware e software 
 
Pode ser utilizada tanto em máquinas Intel rodando Windows, passandopor 
workstations RISC rodando UNIX, até mainframes rodando sistemas 
operacionais proprietários. 
 
 
Redução dos custos com treinamento 
 
Com base no item anterior, as aplicações podem se movimentar de um 
ambiente para o outro sem que seja necessária uma reciclagem da equipe de 
desenvolvimento. 
 
 
 
Usa inglês estruturado de alto nível 
 
O SQL é formado por um conjunto bem simples de sentenças em inglês, 
oferecendo um rápido e fácil entendimento. 
 
 
Permite consultas interativas 
 
Permite aos usuários acesso fácil e rápido aos dados a partir de um front 
end que permita a edição e a submissão de comandos SQL. 
36 
 
Múltiplas visões dos dados 
 
Permite ao criador do banco de dados levar diferentes visões dos dados aos 
diferentes usuários. 
 
 
Definição dinâmica dos dados 
 
Através da linguagem SQL pode-se alterar, expandir ou incluir, 
dinamicamente, as estruturas dos dados armazenados, com máxima 
flexibilidade. 
 
 
 
Porém, existem também algumas desvantagens no uso da linguagem 
SQL: Críticas (segundo C.J. Date) 
Falta de ortogonalidade nas expressões, funções embutidas, variáveis 
indicadoras, referência a dados correntes, constante NULL, conjuntos 
vazios, e etc; 
Definição formal da linguagem após sua criação; 
Discordância com as linguagens hospedeiras (geralmente procedurais e 
orientadas para registros e não para conjuntos); 
Falta de algumas funções; 
Não dá suporte a alguns aspectos do modelo relacional (join explícito, 
domínios, e etc.) 
37 
 
3. Consultas Básicas em SQL 
 
As tabelas a seguir serão usadas nos exemplos que se seguem: 
 
 
CLIENTE (cod_cli, nome_cli, endereco, cidade, cep, uf) 
VENDEDOR (cod_vend, nome_vend, sal_fixo, 
faixa_comiss) PEDIDO ( num_ped, prazo_entr, cd_cli, 
cd_vend) ITEM_PEDIDO (no_ped, cd_prod, qtd_ped) 
PRODUTO (cod_prod, unid_prod, desc_prod, val_unit) 
38 
 
4. Comandos de Modificação de Dados em SQL 
 
O comando CREATE TABLE é usado para criar uma tabela. A sua forma 
geral é: 
 
 
CREATE TABLE <nome_tabela> 
(<descrição das colunas>, 
<descrição das chaves>); 
 
onde: 
 
<nome_tabela> dever ser substituído pelo nome da tabela a ser 
criada. 
 
<descrição das colunas> deve ser substituída pela relação das colunas 
da tabela e seus respectivos tipos de dados (por exemplo, smallint, char, 
varchar, integer, number, float e etc). 
 
<descrição das chaves> deve ser substituída pela lista das colunas 
que são tratadas como chaves estrangeiras. 
 
 
Algumas colunas podem receber o valor NULL (nulo), e a coluna definida 
como chave primária, além de não poder receber NULL, deve ser uma coluna 
UNIQUE (sem repetições; isto é, chave primária) 
 
 
Script de Criação das Tabelas dos Exemplos 
 
create table 
cliente ( 
cod_cli smallint not null, 
nome_cli varchar(40) not null, 
endereco varchar(40) null, 
cidade varchar(20) null, 
cep char(08) null, 
uf char(02) null, 
primary key (cod_cli)); 
 
create table 
vendedor ( 
cod_vend smallint not null, 
nome_vend varchar(40) not null, 
sal_fixo number(9,2) not null, 
39 
 
faixa_comiss char(01) not 
null, primary key (cod_vend)); 
 
create table 
produto ( 
cod_prod smallint not null, 
unid_prod char(03) not null, 
desc_prod varchar(20) not null, 
val_unit number(9,2) not null, 
primary key (cod_prod)); 
 
create table pedido 
( 
num_ped smallint not null, 
prazo_entr smallint not null, 
cd_cli smallint not null 
REFERENCES CLIENTE (cod_cli), 
cd_vend smallint not 
null REFERENCES VENDEDOR (cod_vend), 
primary key (num_ped)); 
 
create table 
item_pedido ( 
no_ped smallint not 
null REFERENCES PEDIDO (num_ped), 
cd_prod smallint not 
null REFERENCES PRODUTO (cod_prod), 
qtd_ped float not null); 
 
 
Para excluirmos uma tabela existente devemos usar o comando DROP 
TABLE. A sua forma geral é: 
 
 
DROP TABLE 
<nome_tabela>; onde: 
<nome_tabela> dever ser substituído pelo nome da tabela a ser excluída. 
 
 
Exemplos 
 
drop table 
item_pedido; drop
 table pedido; 
drop table 
vendedor; drop
 table 
produto; drop table 
cliente; 
 
 
 
 
 
 
 
40 
 
 LEITURA COMPLEMENTAR 
 
BANCOS DE DADOS LIVRES CRESCEM NO BRASIL 
Uma nova geração de bancos de dados livres começa a ganhar 
adesão de várias empre- sas do setor financeiro e industrial do 
país, revela estudo. 
Uma nova geração de bancos de dados livres começa a ganhar 
adesão de várias empre- sas do setor financeiro e industrial do 
país, para aplicações específicas ou embarcadas em 
equipamentos de comunicação, e já está criando um impacto 
positivo entre os de- senvolvedores. 
Essa é uma conclusão do consultor independente Fernando 
Lozano, community mana- ger da Java.net, apresentada na quarta-
feira (17/08) no Developer’s World 2005, realiza- do pelo IDG 
Brasil, no Hotel Jaraguá, em São Paulo. 
Lozano vem trabalhando na implementação de projetos de 
banco de dados livres em várias empresas, como o Instituto 
Brasileiro de Petróleo e Gás, Elephant Internet, iBest e 
Amsterdam Sauer. “O banco de dados livre é hoje uma alternativa 
viável e de alta per- formance, além de comercialmente atraente, 
pois pode utilizar qualquer ferramenta de desenvolvimento para 
acesso aos dados”, diz ele. 
Para Thiago José Macieira, desenvolvedor central do KDE, uma 
das principais comunidades de open source do mundo, com quase 
20 colaboradores brasileiros, o interesse pelo software livre no 
Brasil é cada vez maior, principalmente depois que o governo 
federal decidiu estimular a adoção do produto em licitações 
públicas. 
“Muitos desenvolvedores estão decididos a contribuir para o 
avanço do open source, mesmo sem ter qualquer espécie de 
retorno financeiro, no máximo um outro patrocínio para 
participar em congressos internacionais”, afirma Macieira. 
Fonte: Cesar (2005, online). 
41 
 
 
 
 
 
 
 
 
 
 
 
UNIDADE IV - MAIS SQL 
 
 
42 
 
1. Consultas Envolvendo NULL 
 
1.1 Selecionando Colunas Específicas de uma Tabela 
 
SELECT 
<lista_de_colunas> 
FROM 
<nome_tabela>; 
 
 
Problema: 
 
Listar todos os produtos com as respectivas descrições, unidades e valores 
unitários. 
 
select 
desc_prod,unid_prod,val_unit 
from produto; 
 
DESC_PROD UNI VAL_UNIT 
-------------------- --- ---------- 
Chapa de Aco kg 2,5 
Cimento kg 4,5 
parafuso 3.0X10.5 mm kg 2 
Fio plastico m ,2 
Solvente PRW l 5 
5 linhas selecionadas. 
 
 
Problema: 
 
Listar os nomes dos clientes, as cidade e os estados onde eles estão 
localizados. 
 
select 
nome_cli,cidade,uf 
from cliente; 
 
NOME_CLI CIDADE UF 
---------------------------------------- -------------------- -- 
Supermercado Carrefour rio de janeiro rj 
Supermercado Baratao rio de janeiro rj 
Supermercado Arariboia niteroi rj 
UFF niteroi rj 
CSN volta redonda rj 
Pegeout resende rj 
Ind. Quimicas Paulistas sao paulo sp 
Ford Caminhoes sao paulo sp 
Riocel Celulose guaiba rs 
Elevadores Sur guaiba rs 
43 
 
1.2 Selecionando todas as Colunas de uma Tabela 
 
SELECT * 
FROM <nome_tabela>; 
 
 
Problema: 
 
Listar o conteúdo de todas as tabelas da base de dados dos exemplos. 
 
select * from cliente; 
 
COD_CLI NOME_CLI ENDERECO 
CIDADE CEP UF 
---------- ---------------------------------------- --------------------
- 
------------------- -------------------- -------- -- 
1000 Supermercado Carrefour Av. das 
Americas rio de janeiro 20000001 rj 
2000 Supermercado Baratao Rua Rolando 
Lero rio de janeiro 20000002 rj 
3000 Supermercado Arariboia Rua 
Itaoca niteroi 20000003 rj 
4000 UFF Cidade Univers. 
niteroi 20000004 rj 
5000 CSN Rua do Aco 
volta redonda 20000005 rj 
6000 Pegeout Rodovia Pres. Dutra 
resende 20000006 rj 
7000 Ind. Quimicas Paulistas Rua 
Tuiuti sao paulo 11000001 sp 
8000 Ford Caminhoes Rua Henry 
Ford sao paulo 11000002 sp 
9000 Riocel Celulose Rua Gen. 
Arouca guaiba 30000001 rs 
10000 Elevadores Sur RuaPlanejada guaiba 30000001 rs 
 
select * from produto; 
 
COD_PROD UNI DESC_PROD VAL_UNIT 
---------- --- -------------------- ---------- 
100 kg Chapa de Aco 2,5 
200 kg Cimento 4,5 
300 kg parafuso 3.0X10.5 mm 2 
400 m Fio plastico ,2 
500 l Solvente PRW 5 
44 
 
select * from vendedor; 
 
COD_VEND NOME_VEND SAL_FIXO F 
---------- ---------------------------------------- ---------- - 
11 Paulo Alberto 1500 b 
12 Ana Cristina 2100 a 
13 Cassia Andrade 900 c 
14 Armando Pinto 2500 a 
15 Maria Paula 900 c 
 
select * from pedido; 
 
NUM_PED PRAZO_ENTR CD_CLI CD_VEND 
---------- ---------- ---------- ---------- 
1111 10 1000 11 
1112 5 1000 11 
1113 30 1000 15 
2111 15 3000 14 
2112 18 3000 15 
2113 3 3000 12 
3111 13 4000 12 
3112 7 4000 11 
4111 7 6000 11 
4112 7 6000 14 
5111 10 8000 14 
6111 30 9000 14 
6112 60 9000 12 
7111 20 10000 15 
 
select * from item_pedido; 
 
NO_PED CD_PROD QTD_PED 
---------- ---------- ---------- 
1111 100 100 
1111 200 100 
1111 300 200 
1112 400 100 
1112 500 1000 
1113 100 300 
2111 100 500 
2111 500 400 
2112 200 100 
2112 300 200 
2113 500 500 
3111 400 300 
3112 100 400 
3112 200 600 
4111 300 700 
4112 500 1000 
4112 500 500 
5111 200 100 
5111 300 500 
6111 400 100 
6112 300 400 
6112 400 200 
7111 100 500 
45 
 
1.3 Selecionando Apenas Alguns Registros da Tabela 
 
SELECT 
<lista_de_colunas> 
FROM 
<nome_tabela> 
WHERE <condição_de_seleção>; 
 
 
Onde a cláusula WHERE tem a seguinte forma: 
 
WHERE <nome_da_coluna> <operador> <valor> 
 
 
1.3.1 Operadores Relacionais: 
 
= igual 
<> ou != diferente 
< menor que 
> maior que 
>= maior ou igual a 
<= menor ou igual a 
 
 
Quando a coluna é do tipo caracter, o <valor> deve estar entre aspas 
simples ('). 
 
Exemplo: 'parafuso' 
 
Observação: 
 
Na linguagem SQL existe diferença entre caracteres maiúsculos e 
minúsculos; logo, 'PARAFUSO' é diferente de 'parafuso'. 
 
 
Problema: 
 
Listar o número do pedido, o código do produto e a quantidade pedida dos 
itens de um pedido, onde a quantidade pedida seja igual a 500. 
 
select 
no_ped,cd_prod,qtd_ped 
from item_pedido 
where qtd_ped = 500; 
46 
 
NO_PED CD_PROD QTD_PED 
---------- ---------- ---------- 
2111 100 500 
2113 500 500 
4112 500 500 
5111 300 500 
7111 100 500 
5 linhas selecionadas. 
 
 
Problema: 
 
Quais são os clientes localizados na cidade de Niterói? 
 
select 
nome_cli 
from 
cliente 
where cidade = 'niteroi'; 
 
NOME_CLI 
---------------------------------------- 
Supermercado 
Arariboia UFF 
2 linhas selecionadas. 
 
1.3.2 Operadores Lógicos 
AND conjunção 
OR disjunção 
NOT negação 
 
 
Problema: 
 
Quais são os produtos que têm unidade igual a 'kg' e valor unitário maior 
do que R$ 2,00? 
 
select 
desc_prod 
from 
produto 
where unid_prod = 'kg' and val_unit > 2.00; 
 
DESC_PROD 
-------------------- 
Chapa de 
Aco 
Cimento 
2 linhas selecionadas. 
47 
 
Problema: 
 
Liste todos os clientes localizados na cidade de São Paulo ou que tenham 
CEP entre 20000005 e 20000010. 
 
select 
nome_cli,cidade,cep 
from cliente 
where cidade = 'sao paulo' or (cep>='20000005' and cep<='20000010'); 
 
NOME_CLI CIDADE CEP 
---------------------------------------- -------------------- -------- 
CSN volta redonda 20000005 
Pegeout resende 20000006 
Ind. Quimicas Paulistas sao paulo 11000001 
Ford Caminhoes sao paulo 11000002 
4 linhas selecionadas. 
Observação: 
 
A prioridade do operador AND é maior do que a prioridade do operador OR; 
logo, neste exemplo, a utilização dos parênteses é opcional. 
 
 
Problema: 
 
Mostrar todos os pedidos que não tenham prazo de entrega superior a 15 
dias. 
 
select 
num_ped 
from 
pedido 
where not (prazo_entr > 15); 
 
NUM_PED 
---------- 
1111 
1112 
2111 
2113 
3111 
3112 
4111 
4112 
5111 
9 linhas selecionadas. 
48 
 
 
1.3.3 Operadores BETWEEN e NOT BETWEEN 
 
 
WHERE <nome_coluna> BETWEEN <valor1> AND <valor2> 
WHERE <nome_coluna> NOT BETWEEN <valor1> AND 
<valor2> 
Este operador possibilita a seleção de uma faixa de valores sem a 
necessidade do uso dos operadores >=, <= e AND. 
 
<valor1> e <valor2> têm que ter o mesmo tipo de dado que <nome_coluna>. 
 
 
Problema: 
 
Liste o código e a descrição dos produtos que tenham o valor unitário na 
faixa de R$ 0,10 a R$ 3,00. 
 
 
select 
cod_prod,desc_prod 
from produto 
where val_unit between 0.10 and 3.00; 
 
COD_PROD DESC_PROD 
---------- -------------------- 
100 Chapa de Aco 
300 parafuso 3.0X10.5 mm 
400 Fio plastico 
3 linhas selecionadas. 
 
 
1.3.4 Operadores LIKE e NOT LIKE 
 
WHERE <nome_coluna> LIKE <valor> 
WHERE <nome_coluna> NOT LIKE 
<valor> 
Aplicáveis apenas a colunas dos tipos CHAR e VARCHAR. 
 
Funcionam de modo análogo aos operadores = e <>, porém o poder dos 
operadores LIKE e NOT LIKE está na utilização dos símbolos % e _, que 
podem fazer o papel de “coringa”: 
49 
 
 
% substitui uma palavra 
_ substitui um caracter qualquer 
 
 
Exemplos: 
 
'apis%' se aplicaria às seguintes cadeias de caracteres: 
 
'lapis preto' 
'lapis cera' 
'lapis 
borracha' 
 
'broca n_' se aplicaria às seguintes cadeias de caractere: 
'broca n1' 
'broca 
n9' 
'broca 
n3' 
 
 
Problema: 
 
Listar todos os produtos que tenham a sua unidade começando por k 
(lembre- se de que a coluna unid_prod foi definida como char(03)). 
 
select 
cod_prod,desc_prod 
from produto 
where unid_prod like 'k 
'; 
 
COD_PROD DESC_PROD 
---------- -------------------- 
100 Chapa de Aco 
200 Cimento 
300 parafuso 3.0X10.5 mm 
3 linhas selecionadas. 
 
 
Problema: 
 
Listar todos os vendedores cujos os nome não comecem por 'A'. 
50 
 
 
select 
cod_vend,nome_vend 
from vendedor 
where nome_vend not like 'A%'; 
 
COD_VEND NOME_VEND 
---------- ---------------------------------------- 
11 Paulo Alberto 
13 Cassia Andrade 
15 Maria Paula 
3 linhas selecionadas. 
 
 
1.3.5 Operadores IN e NOT IN 
 
WHERE <nome_coluna> IN <lista_de_valores> 
WHERE <nome_coluna> NOT IN 
(<lista_de_valores>) 
Seleciona as linhas cujo o valor da coluna <nome_coluna> pertença ao 
conjunto <lista_de_valores>. 
 
 
Problema: 
 
Listar todos os vendedores cujas as faixas de comissão sejam 'a' ou 'b'. 
 
select 
cod_vend,nome_vend 
from vendedor 
where faixa_comiss in ('a','b'); 
 
COD_VEND NOME_VEND 
---------- ---------------------------------------- 
11 Paulo Alberto 
12 Ana Cristina 
14 Armando Pinto 
3 linhas selecionadas. 
 
 
1.3.6 Operadores IS NULL e IS NOT 
NULL WHERE <nome_coluna> IS 
NULL WHERE <nome_coluna> IS 
NOT NULL 
51 
 
A utilização do valor nulo (NULL) é problemática, pois as diversas 
implementações da linguagem SQL podem adotar qualquer representação 
para o valor nulo. 
 
 
Problema: 
 
Mostrar os clientes que não tenham endereço cadastrado. 
 
select 
nome_cli 
from 
cliente 
where endereco is null; 
 
NOME_CLI 
---------------------------------------- 
0 linhas selecionadas. 
 
 
1.4 Ordenando os Dados Selecionandos 
 
SELECT 
<lista_de_colunas> 
FROM 
<nome_tabela> 
WHERE <condição_de_seleção> 
ORDER BY {<nome_coluna>|<num_col> [ASC|DESC]} 
 
 
Onde <nome_coluna> se refere à coluna segundo a qual as linhas serão 
ordenadas, e <num_col> se refere à posição relativa da coluna 
na 
<lista_de_colunas> projetadas, contada da esquerda para a direita, e não à 
posição na tabela original. 
As cláusulas ASC e DESC denotam ordenação ascendente e descendente 
respectivamente. A forma ascendente de ordenação é assumida caso 
nenhuma opção seja informada explicitamente. 
 
 
Problema: 
Mostrar em ordem alfabética a lista de vendedores e seus respectivos salários 
fixos. 
 
select 
nome_vend,sal_fixo 
from vendedor 
order by nome_vend; 
52 
 
NOME_VEND SAL_FIXO 
---------------------------------------- ---------- 
Ana Cristina 2100Armando Pinto 2500 
Cassia Andrade 900 
Maria Paula 900 
Paulo Alberto 1500 
5 linhas selecionadas. 
 
 
Problema: 
 
Listar os nomes, as cidades e os estados de todos os clientes, ordenados por 
estado e cidade de forma descendente. 
 
select 
nome_cli,cidade,uf 
from cliente 
order by uf desc,cidade desc; 
 
NOME_CLI CIDADE UF 
---------------------------------------- -------------------- -- 
Ind. Quimicas Paulistas sao paulo sp 
Ford Caminhoes sao paulo sp 
Riocel Celulose guaiba rs 
Elevadores Sur guaiba rs 
CSN volta redonda rj 
Supermercado Carrefour rio de janeiro rj 
Supermercado Baratao rio de janeiro rj 
Pegeout resende rj 
Supermercado Arariboia niteroi rj 
UFF niteroi rj 
10 linhas selecionadas. 
 
 
Problema: 
 
Mostrar a descrição e o valor unitário de todos os produtos que tenham 
unidade 'kg' em ordem ascendente de valor unitário. 
 
select 
desc_prod,val_unit 
from produto 
where unid_prod = 
'kg' order by 2; 
 
DESC_PROD VAL_UNIT 
-------------------- ---------- 
parafuso 3.0X10.5 mm 2 
Chapa de Aco 2,5 
Cimento 4,5 
3 linhas selecionadas. 
53 
 
 
2. Consultas Aninhadas (Subqueries) 
 
Podemos criar dinamicamente um campo que não pertença à tabela original 
através de operações executadas sobre os campos projetados. 
 
 
Problema: 
 
Exibir o novo salário fixo dos vendedores da faixa de comissão ‘C’, 
calculado com base no reajuste de 75% sobre o salário atual acrescido de R$ 
120,00 de bonificação. Ordene a relação resultante pelo nome do vendedor. 
 
select nome_vend,((sal_fixo*1.75)+120) 
as from vendedor 
where 
faixa_comiss='c' 
order by nome_vend; 
 
NOME_VEND NOVO_SAL 
---------------------------------------- ---------- 
Cassia Andrade 1695 
Maria Paula 1695 
2 linhas selecionadas. 
 
 
2.5.1 Máximos (MAX) e Mínimos 
(MIN) Problema: 
 
Mostrar o menor e o maior salário entre os vendedores. 
 
select MIN(sal_fixo),MAX 
(sal_fixo) from vendedor; 
 
MIN(SAL_FI MAX(SAL_FI 
---------- ---------- 
900 2500 
1 linha selecionada. 
 
 
2.5.2 Totalizando Colunas 
(SUM) Problema: 
Mostrar a quantidade total pedida para o produto cimento, de código 200. 
54 
 
 
select 
SUM(qtd_ped) 
from 
item_pedido 
where 
cd_prod=200; 
 
SUM(QTD_PE 
---------- 
900 
1 linha selecionada. 
 
 
2.5.3 Calculando Médias 
(AVG) Problema: 
Qual é a média dos salários fixos dos vendedores? 
 
select 
AVG(sal_fixo) 
from vendedor; 
 
AVG(SAL_FI 
---------- 
1580 
1 linha selecionada. 
 
 
2.5.4 Contando as Linhas 
(COUNT) Problema: 
Quantos vendedores ganham acima de R$ 2.000,00 de salário fixo? 
 
select 
COUNT(*) 
from 
vendedor 
where sal_fixo>2000; 
 
COUNT(*) 
---------- 
2 
1 linha selecionada. 
 
 
 2.5.5 A Palavra-Chave DISTINCT 
 
Várias linhas de uma tabela podem conter os mesmos valores para as suas 
colunas (duplicidade), com exceção da chave primária. Quando desejarmos 
eliminar a duplicidade, podemos inserir a palavra-chave DISTINCT após a 
palavra-chave SELECT. 
55 
 
 
 
Problema: 
 
Em que cidades as nossa empresa possui clientes? 
 
select DISTINCT 
cidade from 
cliente; 
 
CIDADE 
-------------------- 
guai
ba 
nite
roi 
rese
nde 
rio de 
janeiro sao 
paulo volta 
redonda 
6 linhas selecionadas. 
 
 
i. Agrupando a Informação Selecionada (GROUP BY) 
 
Existem ocasiões em que desejamos aplicar uma função de agregação não 
somente a um conjunto de tuplas, mas também organizar a informação em 
determinadas categorias. Isto é possível através do uso da cláusula GROUP 
BY. 
 
 
Problema: 
 
Listar o número de itens existente em cada pedido. 
 
select no_ped, count(*) as total_itens 
from item_pedido 
group by no_ped; 
 
NO_PED TOTAL_ITEN 
---------- -------
--- 1111 3 
1112 2 
1113 1 
2111 2 
2112 2 
2113 1 
3111 1 
3112 2 
4111 1 
4112 2 
5111 2 
56 
 
6111 1 
6112 2 
7111 1 
14 linhas selecionadas. 
 
Inicialmente as linha são agrupadas através do(s) atributo(s) fornecido(s) na 
cláusula GROUP BY; neste caso, no_ped. Em um segundo passo, é aplicada 
a operação COUNT(*) para cada grupo de linhas que tenha o mesmo número 
de pedido. Após a operação de contagem de cada grupo, o resultado da 
consulta é apresentado. 
Normalmente, a cláusula GROUP BY é utilizada em conjunto com as 
operações COUNT e AVG. 
 
ii. A Cláusula HAVING 
 
Às vezes temos que definir condições e aplicá-las aos grupos ao invés de 
fazê- lo a cada linha separadamente. Por exemplo, suponha que desejemos 
listar todos os pedidos que possuam mais de um item. Esta condição não se 
aplica a uma única linha separadamente, mas a cada grupo definido pela 
cláusula GROUP BY. Para exprimir tal consulta, usamos a cláusula 
HAVING. A condição da cláusula HAVING é aplicada após a formação dos 
grupos; logo, podemos usar funções de agregação na construção das 
condições da cláusula HAVING. 
 
 
Problema: 
 
Listar os pedidios que possuam mais de um item. 
 
select no_ped,count(*) as 
total_itens from item_pedido 
group by no_ped 
having 
count(*)>1; 
 
NO_PED TOTAL_ITEN 
---------- -------
--- 1111 3 
1112 2 
2111 2 
2112 2 
3112 2 
4112 2 
5111 2 
6112 2 
8 linhas selecionadas. 
57 
 
 
3. Consultas Utilizando Joins 
 
Algumas consultas necessitam acessar simultaneamente várias tabelas, o que 
leva à realização de junções (JOINS) entre as tabelas para poder extrair as 
informações necessárias para a consulta formulada. 
 
3.6.1 Qualificadores de Nomes 
 
Um qualificador de nome consiste do nome da tabela, seguido de um 
ponto, seguido por um nome de uma coluna da tabela. Por exemplo, o 
qualificador da coluna DESC_PROD da tabela PRODUTO será 
PRODUTO.DESC_PROD. Os qualificadores de nome são utilizados em 
uma consulta para efetivar a junção (JOIN) entre as tabelas. 
 
 
Problema: 
 
Faça uma junção da tabela de clientes com a de pedidos, exibindo o nome do 
cliente, o código do cliente e o número do pedido. 
 
select 
cod_cli,nome_cli,pedido.num_ped 
from cliente,pedido; 
 
COD_CLI NOME_CLI NUM_PED 
---------- ---------------------------------------- ---------- 
1000 Supermercado Carrefour 1111 
2000 Supermercado Baratao 1111 
3000 Supermercado Arariboia 1111 
4000 UFF 1111 
5000 CSN 1111 
6000 Pegeout 1111 
7000 Ind. Quimicas Paulistas 1111 
8000 Ford Caminhoes 1111 
9000 Riocel Celulose 1111 
10000 Elevadores Sur 1111 
1000 Supermercado Carrefour 1112 
2000 Supermercado Baratao 1112 
3000 Supermercado Arariboia 1112 
4000 UFF 1112 
5000 CSN 1112 
6000 Pegeout 1112 
7000 Ind. Quimicas Paulistas 1112 
8000 Ford Caminhoes 1112 
9000 Riocel Celulose 1112 
10000 Elevadores Sur 1112 
1000 Supermercado Carrefour 1113 
2000 Supermercado Baratao 1113 
58 
 
3000 Supermercado Arariboia 1113 
4000 UFF 1113 
5000 CSN 1113 
6000 Pegeout 1113 
7000 Ind. Quimicas Paulistas 1113 
8000 Ford Caminhoes 1113 
9000 Riocel Celulose 1113 
 
.............................................................. 
 
1000 Supermercado Carrefour 6112 
2000 Supermercado Baratao 6112 
3000 Supermercado Arariboia 6112 
4000 UFF 6112 
5000 CSN 6112 
6000 Pegeout 6112 
7000 Ind. Quimicas Paulistas 6112 
8000 Ford Caminhoes 6112 
9000 Riocel Celulose 6112 
10000 Elevadores Sur 6112 
1000 Supermercado Carrefour 7111 
2000 Supermercado Baratao 7111 
3000 Supermercado Arariboia 7111 
4000 UFF 7111 
5000 CSN 7111 
6000 Pegeout 7111 
7000 Ind. Quimicas Paulistas 7111 
8000 Ford Caminhoes 7111 
9000 Riocel Celulose 7111 
10000 Elevadores Sur 7111 
140 linhas selecionadas. 
 
Neste exemplo foi executado um produto cartesiano das tabelas CLIENTE e 
PEDIDO, seguido de uma projeção das colunas exibidas. Neste caso, poucas 
informações úteis podem ser extraídas da relação resultante. Devemos então 
aplicar critérios de seleção à junção para podermos obter algum resultado 
concreto. 
 
 
Problema: 
 
A que clientes estão associados os pedidos existentes?Listar pelos nomes 
dos clientes. 
 
select 
nome_cli,pedido.cd_cli,pedido.num_ped 
from cliente,pedido 
where cliente.cod_cli=pedido.cd_cli; 
 
NOME_CLI CD_CLI NUM_PED 
---------------------------------------- ---------- ---------- 
Supermercado Carrefour 1000 1111 
Supermercado Carrefour 1000 1112 
59 
 
Supermercado Carrefour 1000 1113 
Supermercado Arariboia 3000 2111 
Supermercado Arariboia 3000 2112 
Supermercado Arariboia 3000 2113 
UFF 4000 3111 
UFF 4000 3112 
Pegeout 6000 4111 
Pegeout 6000 4112 
Ford Caminhoes 8000 5111 
Riocel Celulose 9000 6111 
Riocel Celulose 9000 6112 
Elevadores Sur 10000 7111 
14 linhas selecionadas. 
 
A equação apresentada na cláusula WHERE é chamada de EQUAÇÃO DE 
JUNÇÃO. 
Podemos utilizar os operadores LIKE, NOT LIKE, IN, NOT IN, NULL, 
NOT NULL, os operadores relacionais e operadores AND, OR e NOT, na 
cláusula WHERE de uma junção de tabelas. 
 
 
Problema: 
 
Quais são os clientes que têm pedidos com prazos de entrega superiores a 15 
dias e que estão localizados nos estados de São Paulo ou do Rio de Janeiro? 
 
select 
nome_cli,uf,pedido.num_ped,pedido.prazo_entr 
from cliente,pedido 
where cliente.cod_cli=pedido.cd_cli 
and uf in ('rj','sp') and 
prazo_entr>15; 
 
NOME_CLI UF NUM_PED PRAZO_ENTR 
---------------------------------------- -- ---------- ---------- 
Supermercado Carrefour rj 1113 30 
Supermercado Arariboia rj 2112 18 
2 linhas selecionadas. 
 
 
Problema: 
 
Mostrar os pedidos dos clientes e seus respectivos prazos de entrega, 
ordenados do maior para o menor. 
 
select 
nome_cli,pedido.num_ped,pedido.prazo_entr 
from cliente,pedido 
where 
cliente.cod_cli=pedido.cd_cli 
order by prazo_entr DESC; 
60 
 
NOME_CLI NUM_PED PRAZO_ENTR 
---------------------------------------- ---------- ---------- 
Riocel Celulose 6112 60 
Supermercado Carrefour 1113 30 
Riocel Celulose 6111 30 
Elevadores Sur 7111 20 
Supermercado Arariboia 2112 18 
Supermercado Arariboia 2111 15 
UFF 3111 13 
Supermercado Carrefour 1111 10 
Ford Caminhoes 5111 10 
UFF 3112 7 
Pegeout 4111 7 
Pegeout 4112 7 
Supermercado Carrefour 1112 5 
Supermercado Arariboia 2113 3 
14 linhas selecionadas. 
 
5.6.2 Sinônimos 
 
 
Para que não seja necessário escrever o nome da tabela nas qualificações de 
nomes, podemos utilizar ALIASES definidos na própria consulta. 
A definição dos ALIASES é feita na cláusula FROM, sendo então utilizada 
nas outras cláusulas (WHERE, ORDER BY, GROUP BY, HAVING e 
SELECT) de uma consulta. 
 
 
Problema: 
 
Exibir os vendedores (ordenados por nome) que emitiram pedidos com 
prazos de entrega superiores a 15 dias e que tenham salários fixos iguais ou 
superiores a R$ 1.000,00. 
 
select distinct 
nome_vend,prazo_entr from 
vendedor V, pedido P 
where V.cod_vend=P.cd_vend and 
V.sal_fixo>1000 and 
prazo_entr>15 
order by nome_vend; 
 
NOME_VEND PRAZO_ENTR 
---------------------------------------- ---------- 
Ana Cristina 60 
Armando Pinto 30 
2 linhas selecionadas. 
61 
 
4. Comandos de Alteração de Schema 
 
Problema: 
 
Exiba a relação dos clientes localizados no Rio de Janeiro (ordenados 
alfabeticamente) que têm pedidos do produto Chapa de Aco com prazos de 
entrega superirores a 15 dias. 
 
select nome_cli,desc_prod,no_ped,prazo_entr 
from cliente C,pedido P,item_pedido IP,produto 
PR where C.cod_cli=P.cd_cli and 
P.num_ped=IP.no_ped and 
IP.cd_prod=PR.cod_prod and 
PR.desc_prod='Chapa de Aco' 
and P.prazo_entr>15 and 
C.uf='rj' 
order by C.nome_cli; 
 
NOME_CLI 
PRAZO_ENTR 
DESC_PROD NO_PED 
---------------------------------------- -------------------- ---------- 
---------- 
Supermercado Carrefour Chapa de Aco 1113 
30 
1 linha selecionada. 
 
 
Problema: 
 
Mostre os nome de todos os vendedores que venderam Chapa de Aco em 
quantidade superior a 300 Kg. 
 
select distinct nome_vend 
from vendedor V, pedido P, item_pedido IP, produto 
PR where V.cod_vend=P.cd_vend and 
p.num_ped=IP.no_ped and 
IP.cd_prod=PR.cod_prod and 
IP.qtd_ped>300 and 
PR.desc_prod='Chapa de Aco'; 
 
NOME_VEND 
---------------------------------------- 
Armando 
Pinto 
Maria 
Paula 
Paulo 
Alberto 
3 linhas selecionadas. 
62 
 
Problema: 
 
Quantos clientes fizeram pedidos com a vendedora Ana Cristina? 
 
select count(distinct cod_cli) 
from cliente C, pedido P, 
vendedor V where 
C.cod_cli=P.cd_cli and 
p.cd_vend=V.cod_vend and 
V.nome_vend='Ana 
Cristina'; 
 
COUNT(COD_ 
---------- 
3 
1 linha selecionada. 
 
 
Problema: 
 
Quantos clientes das cidades do Rio de Janeiro e Niterói tiveram seus 
pedidos tirados com a vendedora Ana Cristina? 
 
select C.cidade,count(distinct cod_cli) as 
num_clientes from cliente C, pedido P, vendedor V 
where C.cod_cli=P.cd_cli and 
C.cidade in ('rio de janeiro','niteroi') 
and p.cd_vend=V.cod_vend and 
V.nome_vend='Ana 
Cristina' group by 
C.cidade; 
 
CIDADE NUM_CLIENT 
-------------------- ---------- 
niteroi 2 
1 linha selecionada. 
 
4.1 Utilizando Consultas Aninhadas (Subqueries) 
 
Chamamos de consulta aninhada à consulta cujo o resultado é utilizado por 
outra consulta, de forma encadeada e contida no mesmo comando SQL. 
 
 
Problema: 
 
Que produtos estão incluídos em um pedido qualquer com a quantidade 
pedida igual a 100? 
63 
 
 
select desc_prod 
from produto 
where cod_prod 
IN 
(select cd_prod 
from 
item_pedido 
where qtd_ped=100); 
 
DESC_PROD 
-------------------- 
Chapa de 
Aco 
Cimento 
Fio plastico 
3 linhas selecionadas. 
 
 
Problema: 
 
Quais vendedores ganham um salário fixo abaixo da média? 
 
select 
nome_vend 
from vendedor 
where 
sal_fixo < 
(select 
avg(sal_fixo) 
from vendedor); 
 
NOME_VEND 
---------------------------------------- 
Paulo 
Alberto 
Cassia 
Andrade 
Maria Paula 
3 linhas selecionadas. 
 
 
Problema: 
 
Quais os vendedores que só venderam produtos comercializados
 em quilogramas (Kg)? 
 
select distinct 
cod_vend,nome_vend from 
vendedor V 
where 'kg'=ALL 
(select 
unid_prod 
from pedido P,item_pedido IP,produto 
PR where P.num_ped=IP.no_ped and 
IP.cd_prod=PR.cod_prod 
and 
P.cd_vend=V.cod_vend); 
64 
 
COD_VEND NOME_VEND 
---------- ---------------------------------------- 
15 Maria Paula 
1 linha selecionada. 
 
 
Problema: 
 
Quais clientes realizaram mais de dois pedidos? 
 
select 
nome_cli 
from 
cliente C 
where 
exists 
(select 
count(*) 
from 
pedido 
where 
cd_cli=C.cod_cli 
having count(*)>2); 
 
NOME_CLI 
---------------------------------------- 
Supermercado 
Carrefour 
Supermercado 
Arariboia 
2 linhas selecionadas. 
 
 
Problema: 
 
Quais os produtos que não estão presentes em nenhum pedido? 
 
select 
cod_prod,desc_prod 
from produto P 
where not 
exists 
(select * 
from item_pedido 
where cd_prod=P.cod_prod); 
 
COD_PROD DESC_PROD 
---------- -------------------- 
0 linhas selecionadas. 
 
 
 
 
 
 
 
 
65 
 
5. Inserindo, Modificando e Excluindo Registros 
 
5.1 Inserindo Registros em uma Tabela 
 
INSERT INTO <nome_tabela> (<lista_de_colunas>) 
VALUES (<lista_de_valores); 
 
 
Problema: 
 
Inserir o produto Tinta de PVC na tabela de produtos. 
 
insert into produto 
values (600,’l’,’Tinta PVC’,15.80); 
 
1 linha processada. 
 
5.2 Inserindo Registros Usando um SELECT 
 
INSERT INTO <nome_tabela> (<lista_de_colunas>) 
SELECT <lista_de_colunas> 
FROM <nome_tabela> 
WHERE <condição_de_seleção>; 
 
 
Problema: 
 
Cadastrar como clientes os vendedores que emitiram mais de 3 pedidos. Usar 
para o código de cliente o mesmo código do vendedor. O restante das colunas 
devem ser preenchidas com um espaço em branco. 
 
insert into cliente (cod_cli, 
nome_cli,endereco,cidade,cep,uf) select 
cod_vend,nome_vend,' ', ' ',' ',' ' 
from vendedor V 
where 3<(select count(*) 
from pedido P 
where V.cod_vend=P.cd_vend); 
 
2 linhas processadas.

Outros materiais