Banco de Dados I
Linguagem de Consulta (parte II)
Recuperando Dados de Várias
Tabelas (JOINS)
Exemplo - pedido
Diagrama Entidade-Relacionamento
N
Pedido
Pedido
N
N
faz
tira
1
1
Cliente
Cliente
Vendedor
Vendedor
possui
N
Produto
Produto
Exemplo Pedido
N
Diagrama ER
Pedido
Pedido
N
possui
N
Produto
Produto
N
faz
tira
1
Cliente
Cliente
1
Vendedor
Vendedor
Diagrama de Tabelas
Pedido
Pedido
Cliente
Cliente
Vendedor
Vendedor
Item_de_Pedido
Item_de_Pedido
(possui )
(possui )
Produto
Produto
Exemplo Pedido
PEDIDO
PEDIDO
Núm_pedido ⌫
Núm_pedido ⌫
Prazo_entrega
Prazo_entrega
Código_cliente Código_cliente Código_vendedor
Código_vendedor
ITEM_DO_PEDIDO
ITEM_DO_PEDIDO
Núm_pedido ⌫
Núm_pedido ⌫
Código_produto⌫
Código_produto⌫
Quantidade
Quantidade
CLIENTE
CLIENTE
Código_cliente ⌫
Código_cliente ⌫
Nome_cliente
Nome_cliente
Endereço
Endereço
Cidade
Cidade
CEP
CEP
UF
UF
CGC
CGC
IE
IE
VENDEDOR
VENDEDOR
Código_vendedor⌫
Código_vendedor⌫
Nome_vendedor
Nome_vendedor
Faixa_comissão
Faixa_comissão
Salário_fixo
Salário_fixo
PRODUTO
PRODUTO
Código_produto⌫
Código_produto⌫
Descrição
Descrição
Unidade
Unidade
Val_unit
Val_unit
SQL:DDL
Revisão
Linguagem de Definição de Dados: ...
create, alter, drop
Consultando informações: select
Criação e Destruição de Tabelas
CREATE TABLE <tabela>
(<descrição das colunas>);
(<descrição das chaves>);
char (n) : cadeia de caracter de tamanho fixo (pode-se usar character - máx n 255)
varchar ou varchar2 (n): caracteres de tamanho variável. (pode-se usar
character varing - máx n 2000).
smallint: é um inteiro pequeno
number (p,d): número com máx de 38 caracteres. p é o total incluindo a casa decimal
e d é o número de casas decimais. Ex numeric(3,1) 44,5 444,5 e 0,32
float (n): número em ponto flutuante com precisão definida pelo usuário em pelo menos n
dígitos.
date: tipo calendário contendos século, ano (4 dígitos), mês e dia do mês.+ horas horário, em
horas, minutos e segundos. ( 12:00 quando somente data, DD-MON-YY )
long: alfanumérico de tamanho variável. ( 2Giga), um por tabela. Não pode ser usado em
consulta
raw ou long raw: campo binário de tamanho variável. ( 2000 e 2Giga)
Ex:tabelas ITEM_DO_PEDIDO
CREATE TABLE ITEM_DO_PEDIDO
(num_pedido smallint not null unique,
código_produto smallint not null unique,
quantidade number(3),
FOREIGN KEY (num_pedido)
REFERENCES PEDIDO,
FOREIGN KEY (código_produto)
REFERENCES PRODUTO);
CREATE TABLE ITEM_DO_PEDIDO
(num_pedido smallint not null ,
código_produto smallint not null,
quantidade number(3),
FOREIGN KEY (num_pedido)
REFERENCES PEDIDO,
FOREIGN KEY (código_produto)
REFERENCES PRODUTO,
PRIMARY KEY (num_pedido ,código_produto));
Ex:tabelas Vendedor e Produto
CREATE TABLE VENDEDOR
(código_vendedor smallint not null,
nome_vendedor char(20),
salário_fixo number(6,2),
faixa_comissão char(1),
PRIMARY KEYcódigo_vendedor)
(
);
CREATE TABLE PRODUTO
(código_produto smallint not null ,
unidade char(3),
descrição_produto char(30),
val_unit number(10,2),
PRIMARY KEYcódigo_produto)
(
);
Destruição de Tabelas
Forma: DROP TABLE <tabela>;
DROP TABLE PEDIDO;
Consultando dados: estrutura
Select
From
Where
colunas
tabela
restrições
(projeção π)
(linhas seleção δ)
Aluno
RA
Nome
Idade
952001
Ana
19
992655
Marcão
20
302566
Paulinha
22
...
...
...
tabela
Coluna 1
Linha 1
Extraindo Dados de uma Tabela: Comando
SELECT (projeção - π )
A) Selecionando Colunas Especificas da Tabela:
• Forma:
Select <nome(s) da(s) coluna(s)>
from <tabela>;
•Problema :
-Listar todos os produtos com respectivas descrições, unidades e
valores unitários.
SQL:
Select descrição, unidade, valor_unitário
from produto;
•
Resultado:
Extraindo Dados de uma Tabela: Comando
SELECT (projeção - π )
B) Selecionando todas as Colunas da Tabela
• Forma:
Select *
from <tabela> ;
• Problema:
- Listar todo o conteúdo de Vendedor
SQL:
Select
From
Código do
Vendedor
209
111
11
240
720
213
101
310
250
*
vendedor ;
Nome do
Vendedor
José
Carlos
João
Antônio
Felipe
Jonas
João
Josias
Maurício
Salário
Fixo
1.800,00
2.490,00
2.780,00
9.500,00
4.600,00
2.300,00
2.650,00
870,00
2.930,00
Faixa de
Comissão
C
A
C
C
A
A
C
B
B
Selecionando somente alguns Registros da
Tabela: ( seleção - δ)
• Forma:
Select <nomes da(s) coluna(s)>
from <tabela>
Where <restrições>;
Onde:
Where
<nome da coluna> <operador> <valor>
C.1) Operadores Relacionais:
Observações:
= , <> ou != , < , >
>= , <=
quando o atributo é do tipo caracter, o <valor> deve estar entre aspas (‘).
Ex: ‘Parafuso’. Em SQL existe diferença entre ‘Parafuso’ e ‘parafuso’.
Selecionando somente alguns Registros da
Tabela: ( seleção - δ)
• Problema:
- Listar o num_pedido, o código_produto e a quantidade dos itens do pedido
com a quantidade igual a 35.
SQL:
•Resultado:
Select
from
Where
num_pedido, código_produto, quantidade
item_do_pedido
quantidade = 35;
Número do
Pedido
121
138
Código do
Produto
31
77
Quantidade
35
35
Selecionando somente alguns Registros da
Tabela:
C.2) Operadores Lógicos:
AND , OR ;
NOT.
Uso de ( ) para alterar a precedência : AND > OR
Problema :
Listar
os produtos que tenham unidade igual a ‘M’ e valor unitário igual a R$ 1,05
SQL:
Select descrição_produto
from produto
Where unidade = ‘M’ AND val_unit = 1.05 ;
•Resultado:
DESCRICAO
Papel
Selecionando somente alguns Registros da
Tabela:
Exerc 3:
Liste os clientes e seus respectivos endereços que moram em ‘São
Paulo‘OU estejam na faixa de CEP entre '30077000' e '30079000'.
SQL:
Select
from
Where
nome_cliente, endereço
cliente
(CEP >= ‘30077000’ AND CEP <= ‘30079000’) OR
cidade = 'São Paulo’;
•Resultado:
NOME CLIENTE
Flávio
Jorge
Maurício
Rodolfo
Beth
Lívio
Renato
ENDERECO CLIENTE
Av.Pres.Vargas10
Rua Caiapo13
Av.Paulista1236 sl 2345
Largo da Lapa 27 sobrado
Av. Climério n.45
Av. Beira Mar n.1256
Rua Meireles n.1231 bl.2 sl.345
Selecionando somente alguns Registros da
Tabela:
Problema:
- Mostrar todos os pedidos que não tenham prazo de entrega igual a 15 dias
Select num_pedido
from pedido
Where NOT ( prazo_entrega = 15 );
SQL:
• Resultado:
NÚMERO DO PEDIDO
121
97
137
148
104
203
......
98
91
Selecionando Registros da Tabela:
C.3) Operadores Between e NOT Between
Where <nome da coluna>
BETWEEN <valor1> AND <valor2>
Where <nome da coluna> NOT BETWEEN <valor1> AND <valor2>
Pesquisa por uma determinada coluna que esteja dentro
da faixa de valores
Não há necessidade dos operadores >=, <= e AND.
• Os VALOR1 e VALOR2 têm que ser do mesmo tipo de
dado da coluna.
Selecionando Registros da Tabela:
C.3) Operadores Between e NOT Between
Problema:
-Listar o código e a descrição dos produtos que tenham o valor unitário na faixa
de R$ 0,32 até R$ 2,00.
SQL:
Select
from
Where
•
código_ produto, descrição_produto
produto
val_unit BETWEEN 0.32 AND 2.00;
Resultado:
CÓDIGO DO
PRODUTO
25
31
78
53
87
77
DESCRIÇÃO
Queijo
Chocolate
Vinho
Linha
Cano
Papel
Selecionando Registros da Tabela:
C.4) Operadores LIKE e NOT LIKE
-Where <nome da coluna> LIKE <valor>;
-Where <nome da coluna> NOT LIKE <valor>;
LIKE e NOT LIKE só trabalham sobre colunas que sejam do tipo CHAR.
Eles têm praticamente o mesmo funcionamento que os operadores =, < > ,
Podem utilizar os símbolos ( % ) e ( _ ) que podem fazer o papel de "Curinga":
% - substitui uma palavra
_ - substitui um caractere
Ex ‘LAPIS % 'pode enxergar os seguintes registros:
• ‘LAPIS PRETO’,
• ‘LAPIS CERA',
• 'LAPIS BORRACHA’
‘BROCA N_’ pode enxergar os seguintes registros;
• 'BROCA N1,
• 'BROCA N9,
• ‘BROCA N3,
Selecionando Registros da Tabela:
C.4) Operadores LIKE e NOT LIKE
Exerc 4:
- Listar todos os produtos que tenham a sua unidade começando por ‘K’.
SQL:
Select
from
código_produto, descrição_produto
produto
Where
unidade LIKE 'K_’ ;
• Resultado:
CODIGO DO PRODUTO DESCRIÇÃO
25
Queijo
Selecionando Registros da Tabela:
C.5) Operadores IN e NOT IN
-Where
<nome da coluna> IN <valores>;
-Where <nome da coluna> NOT IN <valores> ;
Pesquisam registros que estão ou não contidos no conjunto de
<valores> fornecido.
Estes minimizam o uso dos operadores: =, <>, AND e OR.
Selecionando Registros da Tabela:
C.5) Operadores IN e NOT IN
• Problema:
- Listar os vendedores que são da faixa de comissão A e B.
SQL:
Select nome_vendedor
from vendedor
Where faixa comissão IN (‘A’, 'B');
• Resultado:
NOME VENDEDOR
Carlos
Felipe
Jonas
Josias
Maurício
Selecionando Registros da Tabela:
C.6) Operadores IS NULL e IS NOT NULL
- Where<nome da coluna> IS NULL;
- Where<nome da coluna> IS NOT NULL;
•Problema:
- Mostrar os clientes que não tenham inscrição estadual.
SQL:
Select *
from cliente
Where
IE IS NULL;
Selecionando Registros da Tabela:
D) Ordenando os Dados Selecionados
Select<nome da(s) coluna(s)>
from <tabela>
Where<condição(es)>
order by <nome da(s) coluna(s)> ASC / DESC
ou
order by <número da coluna >
ASC (default) / DESC
• Problema:
- Mostrar em ordem alfabética a lista de vendedores e seus respectivos
salários fixos.
SQL:
Select
nome_vendedor, salário_fixo
from
vendedor
order by nome_vendedor;
Selecionando Registros da Tabela:
E) Realizando CÁLCULOS com Informações Selecionada
• Problema:
-Mostrar o novo salário fixo dos vendedores, de faixa de comissão 'C’,
calculado com base no reajuste de 75% acrescido de R$ 120,00 de
bonificação. Ordenar pelo nome do vendedor.
SQL:
Select
nome_vendedor,
novo salário = (salário_fixo * 1.75) + 120
from
vendedor
Where
faixa comissão = 'C'
order by nome_vendedor;
Selecionando Registros da Tabela:
E) Realizando CÁLCULOS com Informações Selecionada
F) Utilizando Funções sobre Conjuntos
• MAX, MIN
• SUM, AVG
F.1) Buscando Máximos e Mínimos (MAX, MIN)
• Problema:
- Mostrar o menor e o maior salário de vendedor.
SQL:
Select
from
MIN(salário_fixo), MAX(salário_fixo)
vendedor ;
Resultado:
MIN(salário fixo) MAX(salário fixo)
870,00
9.500,00
F.2) Totalizando Colunas (SUM)
•Problema:
-
Mostrar a quantidade total pedida para o produto 'VINHO' de código '78'.
SQL:
Select
SUM(quantidade),
from
item_do_pedido
Where código_produto = ‘78’ ;
Selecionando Registros da Tabela:
E) Realizando CÁLCULOS com Informações Selecionada
•Problema:
- Qual a média dos salários fixos dos vendedores?
SQL:
Select AVG (salário_fixo),
from vendedor;
• Resultado:
AVG(salário_fixo)
3.324,44
F.4) Contando os Registros (COUNT)
• Problema:
- Quantos vendedores ganham acima de R$ 2.500., de salário fixo?
Select
from
Where
SQL:
•
Resultado:
COUNT(*)
5
COUNT(*),
vendedor
salário_fixo >2500 ;
Selecionando Registros da Tabela:
F.5) Utilizando a Cláusula DISTINCT
Vários registros dentro de uma tabela podem conter os mesmos valores, com
exceção da chave primária.
Algumas consultas podem trazer informações erradas.
A cláusula DISTINCT, foi criada para não permitir que certas redundâncias,
obviamente necessárias, causem problemas.
•Problema:
- Quais as unidades de produtos, diferentes, na tabela produto?
SQL:
Select DISTINCT unidade,
produto;
from
• Resultado:
UNIDADE
K
BAR
L
M
SAC
G
Recuperando Dados de Várias Tabelas
(JOINS)
Trabalhamos até agora com a recuperação de
dados sobre apenas uma tabela, no entanto um
banco de dados é formado por várias tabelas
que se relacionam.
Para recuperar informações em de várias
tabelas muitas vezes precisamos realizar uma
JUNÇÃO (JOIN) entre as tabelas. É esta
operação e suas implicações que será abordado
nesta momento.
Recuperando Dados de Várias Tabelas
(JOINS)
O Conceito de Qualificadores de Nome
Consiste em identificar as colunas pôr meio do nome
das tabela.
Qualificador de nome para a coluna descrição da
tabela PRODUTO será:
PR0DUT0. descrição
Os qualificadores de nome são utilizados em uma
consulta para efetivar a junção (JOIN) entre tabelas.
(nomes de colunas iguais em tabelas diferentes)
Recuperando Dados de Várias Tabelas
(JOINS)
Juntar a tabela cliente com pedido,
identificando os pedidos de cada cliente.
CLIENTE
CLIENTE
Código_cliente ⌫
Código_cliente ⌫
Nome_cliente
Nome_cliente
Endereço
Endereço
Cidade
Cidade
CEP
CEP
UF
UF
CGC
CGC
IE
IE
PEDIDO
PEDIDO
Núm_pedido ⌫
Núm_pedido ⌫
Prazo_entrega
Prazo_entrega
Código_cliente Código_cliente Código_vendedor
Código_vendedor
Recuperando Dados de Várias Tabelas
(JOINS)
Uma solução é realizar a operação de produto
cartesiana entre os dois conjuntos.
CLIENTE
CLIENTE
Código_cliente ⌫
Código_cliente ⌫
Nome_cliente
Nome_cliente
Endereço
Endereço
Cidade
Cidade
CEP
CEP
UF
UF
CGC
CGC
IE
IE
c1
c2
...
cn
PEDIDO
PEDIDO
Núm_pedido ⌫
Núm_pedido ⌫
Prazo_entrega
Prazo_entrega
Código_cliente Código_cliente Código_vendedor
Código_vendedor
p1
p2
...
pn
Recuperando Dados de Várias Tabelas
(JOINS)
Uma solução é realizar a operação de produto
cartesiana entre os dois conjuntos.
CLIENTE
CLIENTE
Código_cliente ⌫
Código_cliente ⌫
Nome_cliente
Nome_cliente
Endereço
Endereço
Cidade
Cidade
CEP
CEP
UF
UF
CGC
CGC
IE
IE
SELECT
FROM
PEDIDO
PEDIDO
Núm_pedido ⌫
Núm_pedido ⌫
Prazo_entrega
Prazo_entrega
Código_cliente Código_cliente Código_vendedor
Código_vendedor
cliente.codigo_cliente, pedido. codigo_cliente, num_pedido
cliente , pedido
Recuperando Dados de Várias Tabelas
(JOINS)
Podemos notar que dessa operação de junção, poucas informações
podem ser extraídas. Uma vez que a operação realizada foi a de produto
cartesiano, onde é feita a combinação de cada elemento de um conjunto
com todos os elementos do outro conjunto.
Assim, há a necessidade de qualificar o tipo de junção, para podermos
obter algum resultado concreto.
SELECT
cliente.codigo_cliente, pedido.
codigo_cliente, num_pedido
FROM
cliente , pedido
NOME CLIENTE
PEDIDO.COD_CLIENTE
NUMERO PEDIDO
Ana
720
97
Ana
260
111
Ana
870
54
Ana
390
119
Ana
260
103
Ana
830
203
Ana
410
121
Ana
110
104
Ana
180
105
Ana
720
83
Ana
290
108
Ana
410
89
Flávio
720
97
Flávio
260
111
Recuperando Dados de Várias Tabelas
(JOINS)
Assim, há a necessidade de qualificar o tipo de junção, para podermos
obter algum resultado concreto.
Equação de JUNÇÃO
CLIENTE
CLIENTE
PEDIDO
PEDIDO
Código_cliente ⌫
Código_cliente ⌫
Nome_cliente
Nome_cliente
Endereço
Endereço
Cidade
Cidade
CEP
CEP
UF
UF
CGC
CGC
IE
IE
c1
c2
...
cn
Núm_pedido ⌫
Núm_pedido ⌫
Prazo_entrega
Prazo_entrega
Código_cliente Código_cliente Código_vendedor
Código_vendedor
p1
p2
...
pn
SELECT cliente.codigo_cliente, pedido. codigo_cliente, num_pedido
FROM cliente , pedido AND
cliente.codigo_cliente =pedido.codigo_cliente
Recuperando Dados de Várias Tabelas
(JOINS)
Juntar a tabela cliente com pedido,
identificando os pedidos de cada cliente.
CLIENTE
CLIENTE
Código_cliente ⌫
Código_cliente ⌫
Nome_cliente
Nome_cliente
Endereço
Endereço
Cidade
Cidade
CEP
CEP
UF
UF
CGC
CGC
IE
IE
PEDIDO
PEDIDO
Núm_pedido ⌫
Núm_pedido ⌫
Prazo_entrega
Prazo_entrega
Código_cliente Código_cliente Código_vendedor
Código_vendedor
Recuperando Dados de Várias Tabelas
(JOINS)
Juntar a tabela cliente com pedido,
identificando os pedidos de cada cliente ?
NOME CLIENTE
PEDIDO.COD_CLIENTE
NÚMERPEDIDO
Ana
720
97
Ana
720
101
Ana
720
137
Ana
720
148
Flávio
870
189
Jorge
110
104
Maurício
830
203
Rodolfo
410
121
Rodolfo
410
98
Rodolfo
410
127
pedido. codigo_cliente, num_pedido
Beth
20
143
Lívio
180
105
cliente , pedido AND
Susana
260
111
Susana
260
103
Susana
260
91
Susana
260
138
Renato
290
108
Sebastião
390
119
CLIENTE
CLIENTE
Código_cliente ⌫
Código_cliente ⌫
Nome_cliente
Nome_cliente
Endereço
Endereço
Cidade
Cidade
CEP
CEP
UF
UF
CGC
CGC
IE
IE
PEDIDO
PEDIDO
Núm_pedido ⌫
Núm_pedido ⌫
Prazo_entrega
Prazo_entrega
Código_cliente Código_cliente Código_vendedor
Código_vendedor
SELECT cliente.codigo_cliente,
FROM
cliente.codigo_cliente=pedido.codigo_cliente
Problema:
Quais clientes que têm prazo de entrega
superior a 15 dias e que pertencem aos
estados de São Paulo (‘SP’) ou Rio de
Janeiro (RJ)?
Problema:
Select nome_cliente, UF , prazo_entrega
from
cliente, pedido
Where UF IN (‘SP’, RJ') AND prazo_entrega > 15
AND cliente.cod_cliente = pedido.cod_cliente;
NOME_CLIENTE
UF
PRAZO_ENTREGA
Ana
RJ
20
Maurício
SP
30
Rodolfo
RJ
20
Beth
SP
30
Susana
RJ
20
Exercício 7:
- Mostrar os clientes e seus respectivos
prazos de entrega, ordenados do maior
para o menor.
ALIASES (sinônimos):
Pode-se definir sinônimos, evitando escrever os nomes das tabelas
nas qualificações de nome.
A definição dos ALIASES é feita na clausula FROM.
É utilizada normalmente nas outras clausulas (Where, order by,
group by, having, select).
• Problema:
-
Apresentar os vendedores, ordenados por nome, que emitiram
pedidos com prazos de entrega superiores a 15 dias e que tenham
salários fixos igual ou superior a R$ 1.000,00.
nome_vendedor, prazo_entrega
vendedor V , pedido P
salário_fixo >= 1000.00 AND prazo_entrega > 15 AND
V. cod_vendedor = P. cod_vendedor
order by nome_vendedor;
Select
from
Where
Juntando mais de duas Tabelas
Exerc 8: Mostre os clientes (ordenados) que têm
prazo de entrega major que 15 dias para o
produto QUEIJO e que sejam do Rio de Janeiro.
Exerc 9:
Mostre todos os vendedores que
venderam chocolate em quantidade
superior a 10 Kg.
Exerc 10:
Quantos clientes fizeram pedido com o
vendedor João?
Problema:
Quantos clientes da cidade do Rio de
Janeiro, e Niterói tiveram seus pedidos
tirados com o vendedor João?
Problema:
Quantos clientes da cidade do Rio de Janeiro, e Niterói tiveram seus pedidos tirados com
o vendedor João?
Select cidade, número = COUNT (nome_cliente)
from cliente C , pedido P, vendedor V
Where nome_vendedor = 'João' AND
CIDADE IN ('Rio de Janeiro', 'Niterói') AND
V. cod_vendedor = P. cod_Vendedor AND
P. cod_cliente = V. cod cliente
Group by cidade;
Utilizando Consultas Encadeadas
(Subqueries)
Subquery é quando o resultado de uma consulta
é utilizado por outra consulta, de forma
encadeada e contida no mesmo comando SQL.
Sua forma geral:
SELECT col1, col2
FROM tab1
WHERE col1 , col2 IN
( SELECT col1, col2
FROM tab2
WHERE restrição);
Problema:
Que produtos participam em qualquer
pedido cuja quantidade seja 10?
Problema:
Que produtos participam em qualquer pedido cuja quantidade seja 10?
Select descrição
from produto
Where cod_produto IN
( Select cod_produto
from
item_pedido
Where quantidade = 10 );
Exerc 11:
Quais vendedores ganharam um salário
fixo abaixo da média?
Exerc 12:
Quais os produtos que não estão presentes
em nenhum pedido? ( código e descrição)
Select cód_produto, descrição
from
produto P
Where not exists
( Select *
from item_pedido
Where cod_produto = P. cod_produto ) ;
Problema:
Quais os vendedores que só venderam
produtos por grama ('G‘)?
Select
DISTINCT cod_vendedor, nome vendedor
from
vendedor V
Where
‘G’= ALL
( Select unidade
from
pedido P, item_pedido I , produto PR
Where P. num_pedido = I. num_pedido AND
I. cod_produto = PR. cod_produto AND
p. cod_vendedor = V. cod vendedor ) ;
Exerc 13:
Quais clientes estão presentes em mais
de três pedidos?
Exerc 13:
Quais clientes estão presentes em mais
de três pedidos?
Combinando Resultados de Pesquisas (
UNION)
Combina os resultados de duas ou mais colunas
feitas sobre tabelas.
Devem selecionar o mesmo número de colunas.
As colunas selecionadas devem ser do mesmo
tipo.
Problema:
- Listar os nomes e códigos dos vendedores que
têm salário fixo maior que RS 1.000,00 e nomes
e códigos de clientes que residem no Rio de
Janeiro.
Select codigo = cod_cliente, nome = nome_cliente
from
cliente
Where UF = ‘RJ’
UNION
Select cod_vendedor, nome_vendedor
from
vendedor
Where salário_fixo > 1000.00
Adicionando Registro à Tabela
Forma:
INSERT INTO <nome da tabela>
(<nome da(s) coluna(s)>)
VALUES (<valores>);
Adicionando Registro à Tabela
Adicionar a produto ‘parafuso’ a tabela
produto?
Insert into produto
values ( 108 , 'Parafuso', 'Kg' , 1.25 );
Adicionando Registros usando um
SELECT
Forma:
INSERT INTO <nome da tabela> (<nome da(s) coluna(s)>)
Select <nome da(s) coluna(s)>
from <nome da tabela>
Where <condição>;
Problema:
- Cadastrar como cliente os vendedores que emitiram mais de 50 pedidos.
Usar para código de cliente o mesmo código de vendedor
Insert into Cliente (cod_cliente, nome cliente)
Select cod_vendedor, nome_vendedor, COUNT(*)
from vendedor V, pedido p
Where V. cod_vendedor = P. cod_vendedor
having count ( * ) > 50 ;
Atualizando um Registro
Forma:
UPDATE <nome da tabela>
Set
<nome da(s) Coluna(s) > = valor
Where
<condição>;
Problema:
- Alterar o valor unitário do produto 'parafuso' de R$ 1.25 para R$
1.62.
update
set
Where
produto
val_unit = 1.62
descrição = 'Parafuso' ;
Problema:
Pr- Atualizar o salário fixo de todos os
vendedores em 27% mais uma bonificação
de R$ 100,00.
update vendedor
set
salário_fixo =
100.00;
(salario_fixo * 1.27) +
Problema:
- Acrescentar 2,5% ao preço unitário dos produtos
que estejam abaixo da média dos preços, para
aqueles comprados a Quilo.
update produto
set
val_unit = val_unit * 1.025
Where val_unit <
( Select AVG ( val_unit )
from produto
Where unidade = ‘Kg’ ) ;
Apagando Registros da Tabela
Forma:
DELETE FROM <nome da tabela>
WHERE <condição>;
Apagando Registros da Tabela
Problema:
- Apagar todos os vendedores com faixa de
comissão nula.
DELETE FROM vendedor
Where
faixa_ comissão IS NULL ;
Problema:
Apagar todos os registros de pedidos realizados por
vendedores fantasmas (operação caça-fantasma).
DELETE FROM
pedido P
Where
not exists
( Select cod_vendedor
from
vendedor
Where cod_vendedor = P. cod_vendedor )
;