Escolar Documentos
Profissional Documentos
Cultura Documentos
Pré-requisito:
Este curso não tem pré-requisito, porém e recomendável algum conhecimento em
Lógica de Programação e Banco de Dados.
Índice de aulas:
1. Primeiras informações.
2. Modelos de Base de Dados.
3. Tipos de Linguagem SQL
4. Transação
5. Tipo de Dados
6. Tabelas de exemplo.
7. Criação de Tabelas
8. Alterando tabelas.
9. Inserindo dados na tabela.
10. Consultando registros no banco de dados.
11. Atualizando registros da tabela.
12. Deletando registros da tabela.
13. Excluindo uma tabela.
14. Executando consultas sobre as tabelas de exemplo.
15. Realizando cálculos sobre a informação selecionada.
16. Junções entre as tabelas (JOINS)
17. Sinônimos.
18. Vamos exercitar.
19. Utilizando Consultas Aninhadas.
20. Vamos exercitar.
21. Visões (VIEW)
22. Índices
23. Gerenciando Usuários
24. Segurança.
1. Primeiras informações.
1.1. SQL (Structured Query Language)
É a linguagem padrão universal para manipular banco de dados relacionais
através dos SGBDs (Sistema de Gerenciamento de Banco de Dados
Relacionais), é utilizada para interagir com o SGBD e executar várias tarefas
como inserir e alterar registros, criar objetos no banco de dados, gerenciar
usuários, consultar informações, controlar transações.
A Linguagem SQL surgiu nos laboratórios da IBM em 1974 com o nome
original de SEQUEL (Structured English Query Language), em 1977 foi
revisada e ampliada e teve o seu nome alterado para SQL.
Em 1982 a ANSI (American National Standard Institute) torna a SQL a
linguagem padrão para manipulação de dados em ambiente relacional, o que
faz com que a Linguagem SQL seja adotada por todos os SGBDs relacionais
existentes no mercado.
Com isso, pelo menos em tese, posso mudar de SGBD sem me preocupar
em mudar os programas de aplicação.
4. Transação
Uma transação é um conjunto de procedimentos executados num banco de
dados, que o usuário percebe como uma única ação.
A integridade de uma transação depende de quatro propriedades, conhecidas
como: ACID.
• Atomicidade.
Todas as ações que compões a unidade de trabalho da transação devem
ser concluídas com sucesso, para que seja efetivada. Se durante a
transação qualquer ação que constitui unidade de trabalho falhar, a
transação inteira deve ser desfeita (rollback), quando todas as ações são
efetuadas com sucesso, a transação pode ser efetivada e persistida em
banco (commit).
• Consistência
Todas as regras e restrições definidas no banco de dados devem ser
obedecidas. Relacionamentos por chaves estrangeiras, checagem de
valores para campos restritos ou únicos devem ser obedecidos para que
uma transação possa ser completada com sucesso.
• Isolamento
Uma transação não deve tornar visível para outras transações as
modificações feitas em um banco de dados até que ela seja encerrada
com sucesso.
• Durabilidade
Significa que os resultados dos dados são permanentes e podem ser
desfeitos somente por uma transação subsequente. Mesmo que haja
falha de sistema ou de hardware.
➔ As transações devem ser terminadas por um dos seguintes comandos:
1. Commit; (efetiva a transação corrente e inicia uma nova)
2. Rollback; (aborta a transação corrente).
3.
5. Tipo de Dados
Definem os tipos de informação que podem ser inseridos em um campo. Os
tipos suportados por um banco de dados podem variar de SGBD para SGBD.
6. Tabelas de Exemplos
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)
7. Criação de tabelas.
CREATE TABLE é o comando para criação da tabela e deve ser seguida pelo nome
que daremos à tabela. Dentro do comando, devemos definir os nomes dos campos de
acordo com a conveniência do banco de dados, e determinar o tipo de dado que
poderá ser incluído neste campo. Na seção abaixo Tipo de Dados estão especificados
os tipos mais comuns encontrados nos SGBDs. PRIMARY KEY define a chave
primária da tabela, isto é, o campo que serve como chave da tabela e que não pode
ser repetido.
Se desejamos que um campo seja de preenchimento obrigatório, devemos
inserir NOT NULL na frente do campo determinado.
➔ Exercitando:
Criar uma tabela ‘alunos’, contendo as colunas código do aluno, nome do
aluno, data de nascimento e telefone do aluno.
O Nome do aluno deve ser obrigatório.
8. Alterando Tabela:
ALTER TABLE é usado para as seguintes transações:
➔ Exercitando:
Criar o campo “TESTE”, com tipo de dados ‘NUMBER(2) na tabela já
existente.
➔ Exercitando:
Renomear o campo ‘TESTE’ para ‘IDADE’
➔ Exercitando:
Alterar o tipo de dado do campo IDADE para NUMBER(3)
➔ Exercitando:
Criar chave primário para a tabela, com a coluna ‘Código do aluno’.
➔ Exercitando:
Eliminar o campo ‘IDADE’ da tabela.
➔ Exercitando:
Consulte os registros inserido na tabela de Alunos.
➔ Exercitando:
Atualize o campo data de nascimento da tabela de Alunos.
➔ Exercitando:
Delete os dados da tabela ALUNOS
➔ Exercitando:
Elimine sua tabela do banco de Dados.
14. Executando Consultas sobre as tabelas de Exemplo:
➔ Exercitando:
Listar o nome dos clientes, as cidades e o estado onde eles estão
localizados.
SELECT <lista-de-colunas>
FROM <nome-tabela>
WHERE <condição-de-seleção>
= Igual
<> ou != Diferente
< Menor que
> Maior que
>= Maior ou igual que
<= Menor ou igual que
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'.
➔ Exercitando:
1. 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 <lista-de-colunas>
FROM <nome-tabela>
WHERE <condição-de-seleção-1>
AND <condição-de-seleção-2>
OR <condição-de-seleção-3>
AND Conjunção
OR Disjunção
NOT Negação
➔ Exercitando:
1. 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;
➔ Exercitando:
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;
➔ Exercitando:
1. 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__';
➔ Exercitando:
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');
➔ Exercitando:
1. Mostrar os clientes que não tenham endereço cadastrado:
Select nome_cli
From cliente
Where endereco is null;
Select nome_cli
From cliente
Where cidade is not null;
SELECT <lista_de_colunas>
FROM <nome_tabela>
WHERE <condição_de_selecao>
ORDER BY {<nome_coluna>|<num_coluna> [ASC|DESC]
➔ Exercitando:
1. Mostrar em ordem alfabética a lista de vendedores e seus
respectivos salários fixos.
Exemplo:
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. Ordenando a relação resultante pelo nome do vendedor.
Select SUM(qtd_ped)
From item_pedido
Where cd_prod = 200;
Select AVG(sal_fixo)
From vendedor;
15.4. Contando as Linhas (COUNT)
Quantos vendedores ganharam acima de R$ 2.000,00 de salário fixo?
Select COUNT(*)
From vendedor
Where sal_fixo > 2000;
Ex.
Em que cidade a nossa empresa possui clientes:
Ex.
A que clientes estão associados os pedidos existentes? Listar pelo nome dos
clientes.
Ou
➔ Exercitando:
1. Quais são os clientes que tem pedidos com prazos de entrega
superiores a 15 dias e que estão localizados nos estados de São
Paulo ou Rio de Janeiro?
Ex.
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
Ex.
1. Que produtos estão incluídos em um pedido qualquer com a quantidade
pedida igual a 100?
Select desc_prod
From produto
Where cod_prod IN
(Select cd_prod
From item_pedido
Where qtd_ped = 100);
2. 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);
Select nome_cli
From cliente C
Where exists (
Select count(*)
From pedido
Where cd_cli = C.cod_cli
Having count(*) > 2);
➔ Exercitando:
1. Criar uma visão que contenha apenas os produtos vendidos em
quilograma.
➔ Exercitando:
Elimine a view salario_anual.
22. Índices
Os SGBD’s utilizam índices para tornar mais eficiente a recuperação dos
dados de um banco de dados.
Um índice é uma estrutura de dados, onde são armazenados valores e
ponteiros organizados de forma ascendente ou descendente, que torna
possível localizar rapidamente as linhas de uma tabela nas quais o valor
desejado está armazenado.
Os índices são utilizados internamente pelo SGBD, ficando totalmente
transparente ao usuário e sua utilização.
Ex.
Criar um índice chamado produto_desc_prod_idx sobre a coluna desc_prod
da tabela produto.
➔ Exercitando:
1. Criar um índice único chamado cliente_nome_cli_idx sobre a
coluna nome_cli da tabela cliente.
➔ Exercitando:
Eliminar os índices criados nos problemas acima.
Ex.
CREATE USER pedro IDENTIFIED BY 123mudar;
Ex.
ALTER USER pedro IDENTIFIED syadm1r0a;
Ex.
DROP USER pedro CASCADE;
24. Segurança.
A informação é vital para o sucesso de um negócio, mas quando ela é tratada
de forma incorreta ou quando cai em mãos erradas, pode tornar-se um sério
obstáculo para se atingir o sucesso.
Visando garantir a segurança dos dados, os SGBD’s disponíveis no mercado
fornecem uma série de facilidades para salvaguardar as informações por eles
mantidas. Tais facilidades são implementadas concedendo-se e retirando-se
privilégios dos usuários sobre os dados mantidos por um SGBD.
24.1. O Comando GRANT
Quando uma tabela ou uma visão é criada, o nome do usuário que a criou é
anexado implicitamente ao nome da tabela ou da visão.
Se a tabela produto foi criada pelo usuário Pedro; então, internamente, ela
será conhecida como pedro.produto.
Em SQL, os privilégios são concedidos através do comando grant, cuja
forma geral é:
Ex.
Concedendo permissão de consulta na tabela produto para usuário pedro.
GRANT SELECT ON produto TO pedro;
➔ Exercitando.
Disponibilizar para alteração as colunas endereco, cidade, cep e uf
da tabela cliente, para todos os usuários.
Ex.
Conceder ao usuário pedro o poder de dar a concessão de todos os privilégios
sobre a tabela pedido a outros usuários.
Ex.
Retirar o privilégio de consulta sobre a tabela pedido do usuário ana.
➔ Exercitando.
1. Retirar todos os privilégios concedidos a todos os usuários sobre
a tabela vendedor.