Você está na página 1de 40

BANCO DE DADOS

Apostila SQL

Profª Graça Tomazela


Sumário
1. Introdução ........................................................................................................................... 1
1.1 Tabelas Utilizadas nos Exemplos ................................................................................ 2
2. Criação de Tabelas ............................................................................................................. 3
3. Consulta a Tabelas ............................................................................................................. 5
3.1 Selecionando Colunas da Tabela ................................................................................. 6
3.1.1 Selecionando Colunas Específicas da Tabela ...................................................... 6
3.1.2 Selecionando todas as colunas da Tabela ............................................................ 6
3.1.3 Usando Literais com a Lista de Atributos ............................................................. 6
3.1.4 Mudando o Cabeçalho das colunas ....................................................................... 7
3.1.5 Efetuando Operações Aritméticas nas Colunas ................................................... 8
3.2 Selecionando Linhas da Tabela ................................................................................... 8
3.2.1 Operações Relacionais ........................................................................................... 8
3.2.2 Operações baseada em faixas de valores ............................................................. 9
3.2.3 Comparações entre Cadeias de Caracteres ........................................................ 10
3.2.4 Operações de pertinência a Conjuntos (Listas).................................................. 11
3.2.5 Operações com Valores Desconhecidos ............................................................ 11
3.2.6 Combinação de Operações .................................................................................. 12
3.2.7 Valores Duplicados ............................................................................................... 12
3.2.8 Classificação dos Dados ...................................................................................... 13
3.3 Geração de Dados Sumarizados ................................................................................ 14
3.3.1 Funções Agregadas............................................................................................... 14
3.3.2 Utilizando as cláusulas GROUP BY e HAVING .................................................. 16
3.4 Recuperando Dados de Várias Tabelas (JOINS) ...................................................... 17
3.4.1 Efetuando Junção em uma Única Tabela ............................................................ 20
3.5 Executando sub-consultas ........................................................................................ 20
3.5.1 Sub-consulta utilizando IN .................................................................................... 21
3.5.2 Sub-consulta utilizando EXISTS........................................................................... 22
3.5.3 Sub-consultas utilizando operadores de comparação....................................... 23
4. Modificando o Banco de Dados ...................................................................................... 24
4.1 Inserindo Linhas na Tabela ........................................................................................ 24
4.1.1 Inserindo Todos os Valores de Uma Linha ......................................................... 24
4.1.2 Inserindo dados parciais ..................................................................................... 25
4.1.3 Utilizando as opções DEFAULT............................................................................ 25
4.1. 4 Inserindo Linhas através de um SELECT ........................................................... 26
4.2 Removendo linhas de uma tabela ............................................................................. 27
4.2.1 Removendo Linhas Baseado na Cláusula WHERE ............................................ 27
4.2.2 Removendo Todas as Linhas de Uma Tabela ..................................................... 27
4.2.3 Removendo linha baseado em dados de outras tabelas .................................. 28
4.3 Atualizando Dados na Tabela ..................................................................................... 28
4.3.1 Atualizando dados ................................................................................................ 28
4.3.2 Atualizando Dados Baseado em Dados de Outras Tabelas .............................. 29
5. Criação de Índices ............................................................................................................ 29
6. Utilizando Visões .............................................................................................................. 31
Exercícios .............................................................................................................................. 33
SQL 1

1. Introdução
Existem inúmeras versões de SQL. A versão original foi desenvolvida no
Laboratório de Pesquisa da IBM San Jose. Essa linguagem originalmente
chamada de Sequel, foi implementada como parte do projeto System R no
início dos anos 70. A linguagem Sequel evoluiu desde então, e seu nome foi
mudado para SQL (Structured Query Language). Numerosos produtos agora
suportam a linguagem SQL. Embora as versões do produto SQL difiram em
diversos detalhes de linguagem, as diferenças são, sem sua maioria,
secundárias.
Em 120086, o American National Standard Institute (ANSI) publicou um padrão
SQL. A SQL estabeleceu-se claramente como a linguagem padrão do banco de
dados relacional.
A linguagem SQL tem diversas partes:
• Data definition language (DDL) - (Linguagem de definição de dados).
A SQL DDL fornece comandos para definição de esquemas de relação,
remoção de relações, criação de índices e modificação de esquemas de
relação.

• Interactive data manipulation language (DML) - (Linguagem de


manipulação de dados interativa).
A SQL DML inclui uma linguagem de consulta baseada na álgebra
relacional e no cálculo relacional de tupla. Compreende também comandos
para inserir, remover e modificar tuplas num banco de dados.

• Embedded data manipulation language - (Linguagem de


manipulação de dados embutida).
A forma embutida da SQL é designada para dentro de linguagens de
programação de uso geral como PL/I, Cobol, Pascal, Fortran e C.

• View definition - (Definição de visões).


A SQL DDL inclui comandos para definição de visões.

• Authorization - (Autorização).
A SQL DDL inclui comandos para especificação de direitos de acesso a
relações e visões.

• Integrity - (Integridade).
A SQL, geralmente, inclui comandos para testar restrição de identidade,
restrição de integridade e restrição de domínio simples, diretamente nos
campos da tabela. Outros tipos de restrições mais complexas são
resolvidos através de triggers e storage procedures
SQL 2

• Transaction control - (Controle de transações).


A SQL inclui comandos para especificação do início das transações.
Diversas implementações, permitem o trancamento explícito de dados para
o controle de concorrência.

O sistema gerenciador de banco de dados SQL SERVER implementa os


comandos SQL através da linguagem Transaction-SQL, que será vista nas
próximas seções

1.1 Tabelas Utilizadas nos Exemplos

As tabelas apresentadas nesta seção serão utilizadas em todos os exemplos


contidos nesta apostila.

Cliente Pedido Item_pedido


@Cod_cliente @Num_pedido @ Num_pedido (E)
Nome_cliente Data_entrega @ Cod_produto (E)
Endereco Cod_cliente (E) Quantidade
Cidade Cod_vendedor (E)
Cep
UF Vendedor Produto
CGC @ Cod_vendedor @ Cod_produto
IE Nome_vendedor Descricao
Faixa_comissao Unidade
Salario_fixo Valor_unitario
Qtde_estoque

Observação:
@ - Chaves primárias
(E) - Chaves estrangeiras
SQL 3

2. Criação de Tabelas
A SQL DDL permite a especificação não apenas de um conjunto de relações,
mas também de informações sobre cada relação, incluindo:

• O esquema para cada relação


• O domínio de valores associados a cada atributo
• O conjunto de índices a ser mantido para cada relação
• Segurança e informação de autorização para cada relação
• Restrições de integridade
• A estrutura física de armazenamento de cada relação no disco.

Uma relação SQL é definida usando o comando create table:

Sintaxe create table [database.[proprietário].]nome_tabela


(
{nome_coluna tipo_dado [declaração de restrições]},....
)

Tipos de dados permitidos para o SQL Server:


Tipo de Dado Tipo de Dado Suprido pelo Sistema
Binário Binary[(n)], varbinary[(n)]
Caracter Char[(n)], varchar[(n)]
Data e hora Datetime, smalldatetime
Numérico exato Decimal[(p[,s)], numeric[(p[,s])]
Numérico aproximado Float[(n)], real
Inteiro Int, smallint, tinyint
Monetário Money, smallmoney
Especial Bit, timestamp, tipos definidos pelo usuário
Texto e imagem Text, image

Restrições importantes:
Restrição Descrição
Primary Key Define chave primária
Foreign key Define chave estrangeira
Unique Define chaves candidatas
Null, not null Define se o campo permite ou não valores nulos
Identity Colunas preenchidas automaticamente
SQL 4

Exemplo:

CREATE TABLE PEDIDO


(
num_pedido int primary key,
cod_cliente smallint not null,
cod_vendedor smallint not null,
data_compra datetime not null,
data_entrega datetime not null,
foreign key (cod_cliente)
references cliente,
foreign key (cod_vendedor)
references vendedor
)

Regras (SQL Server):

• Nomes de colunas devem ser únicos dentro de uma determinada tabela,


mas um mesmo nome pode ser usado em diferentes tabelas dentro de um
mesmo database
• Toda coluna deve possuir um tipo de dado
• Se a coluna não tem a especificação de NULL ou NOT NULL o default é
NULL

A definição de uma tabela (e todos os seus dados) é apagada através do


comando DROP TABLE:

Sintaxe DROP TABLE nome_tabela


SQL 5

3. Consulta a Tabelas
A estrutura básica de uma expressão SQL consiste de três cláusulas: SELECT,
FROM e WHERE.

• A cláusula SELECT corresponde à operação projeção da álgebra relacional.


É usada para listar os atributos desejados no resultado de uma consulta.
• A cláusula FROM corresponde à operação produto cartesiano da álgebra
relacional. Ela lista as relações a ser examinadas na avaliação da
expressão.
• A cláusula WHERE corresponde a predicado de seleção da álgebra
relacional. Consiste em um predicado envolvendo atributos de relações que
aparecem na cláusula FROM .

Sintaxe SELECT nome_atributo1, nome_atributo2,...


FROM nome_tabela1, nome_tabela2...
WHERE condição

Caso a cláusula WHERE seja omitida, a é verdadeira. A lista de atributos pode


ser substituída por um asterisco (*) para selecionar todos os atributos de todas
as relações presentes na cláusula FROM.

A SQL forma o produto cartesiano das relações chamadas na cláusula FROM,


executa uma seleção da álgebra relacional usando o predicado da cláusula
WHERE e, então projeta o resultado para os atributos da cláusula SELECT.

O resultado de uma consulta SQL é, obviamente, uma relação.


• O comando SELECT seleciona linhas e colunas de tabelas
• SELECT : especifica colunas
• FROM – especifica tabelas
• WHERE – especifica as linhas
• SELECT * recupera todas as colunas
• SELECT sem a cláusula WHERE recupera todas as linhas
SQL 6

3.1 Selecionando Colunas da Tabela


3.1.1 Selecionando Colunas Específicas da Tabela

Sintaxe SELECT nome_atributo1, nome_atributo2,...


FROM nome_tabela

EXEMPLO
Listar todos os produtos com suas descrições, unidades e valores unitários

Select descricao, unidade, valor_unitario


From produto

Os nomes dos atributos podem ser descritos em qualquer ordem.

3.1.2 Selecionando todas as colunas da Tabela

Sintaxe SELECT *
FROM nome_tabela

Exemplo

Listar todos os dados do vendedor

Select *
From vendedor

3.1.3 Usando Literais com a Lista de Atributos


Sintaxe SELECT nome_atributo1, ‘literal’,....
FROM nome_tabela

Exemplo
Listar o código e o nome de cada cliente

Select ‘Código do Cliente’, cod_cliente, ‘ Nome do Cliente’, nome_cliente


From cliente
SQL 7

Em cada linha do resultado da consulta acima serão exibidos os literais


descritos da seguinte forma:
Código do Cliente 290 Nome do Cliente Gabriel
Código do Cliente 291 Nome do Cliente Renata
Código do Cliente 292 Nome do Cliente Priscila

3.1.4 Mudando o Cabeçalho das colunas

Sintaxe SELECT nome_atributo = nome_coluna


FROM nome_tabela

Exemplo

Listar o número do pedido e o código do cliente da tabela de pedidos

Select Pedido = num_pedido,


‘Código do Cliente’, Código = cod_cliente
from pedido

Pedido column Código

1 Código do Cliente 2
2 Código do Cliente 15

Select num_pedido as pedido, ‘Código do Cliente’, cod_cliente ‘Código do


Cliente’
From pedido

Pedido column Código do Cliente


1 Código do Cliente 10

Por default o cabeçalho da coluna que é exibido no resultado da consulta é o


nome do atributo designado quando a tabela foi criada, no formato apresentado
acima o cabeçalho da coluna é alterado de acordo com a especificação,
tornando o resultado mais legível.
SQL 8

3.1.5 Efetuando Operações Aritméticas nas Colunas

Sintaxe SELECT nome_atributo operador_aritmetico


constante/nome_atributo

Exemplo
Listar os preços dos produtos aumentados de 5%

Select nome_produto, valor_unitario * 1.05 from produto

3.2 Selecionando Linhas da Tabela


A cláusula WHERE especifica quais linhas devem ser recuperadas a partir das
condições de pesquisa.

Tipo de condições permitidas:


Operações Operadores
Relacionais = > < >= <= <> != !< !>
Faixa de valores BETWEEN e NOT BETWEEN
Comparação com cadeia de caracteres LIKE e NOT LIKE
Pertinência a conjuntos IN e NOT IN
Valores desconhecidos IS NULL e IS NOT NULL
Combinação de operações AND, OR
Negações NOT

3.2.1 Operações Relacionais

Sintaxe SELECT nome_atributo1, nome_atributo2....


FROM tabela
WHERE expressão operador_de_comparação expressão

EXEMPLO
Listar o número do pedido, o código do produto e a quantidade dos itens do
pedido com quantidade igual a 35

Select num_pedido, cod_produto, quantidade


From item_pedido
Where quantidade = 35
SQL 9

Listar o número do pedido, o código do produto e a quantidade dos itens do


pedido com quantidade igual a maior que 35 e menor do que 40

Select num_pedido, cod_produto, quantidade


From item_pedido
Where quantidade > 35 and quantidade < 40

As expressões podem conter constantes, nomes de colunas ou funções.


Campos do tipo char, varchar, text, datetime e smalldatetime devem sempre
ser usados entre apóstrofos.

3.2.2 Operações baseada em faixas de valores

Sintaxe SELECT nome_atributo1, nome_atributo2....


FROM tabela
WHERE expressão [NOT] BETWEEN expressão AND expressão

Exemplo

Listar o código e a descrição dos produtos que tenham o valor unitário na faixa
R$0,32 até R$2,00

Select cod_produto, descricao_produto


From produto
Where valor_unitario between $0.32 and $2.00

Select cod_produto, descricao_produto


From produto
Where valor_unitario >= $0.32 and valor_unitario <=$2.00

Este operador procura por valores que estão dentro da faixa informada
(inclusive).
Os valores informados devem ser do mesmo tipo da coluna que se está
pesquisando.
SQL 10

3.2.3 Comparações entre Cadeias de Caracteres

Sintaxe SELECT nome_atributo1, nome_atributo2....


FROM tabela
WHERE expressão [NOT] LIKE ‘cadeia de caracteres’
Exemplo

Listar todos os produtos que tenham a sua unidade começando por K

Select cod_produto, descricao_produto


From produto
Where unidade like ‘K%’

O operador LIKE é utilizado para comparações em cadeias de caracteres.


Os padrões são descritos usando os seguintes caracteres especiais:
• Por cento (%) - O caractere % substitui qualquer sub-cadeia.
• Sublinhado ( _ ) - O caractere _ substitui qualquer caractere.
• Caracteres entre colchetes ([]) - Qualquer caracter dentro da faixa ou
conjunto especificado. (SQL Server)
• [^] - Qualquer caracter que não esteja dentro da faixa ou conjunto
especificado. (SQL Server)

Exemplos de utilização de LIKE


Expressão Resultado
LIKE ‘BR%’ Nomes que comecem com BR
LIKE ‘%een’ Nomes que terminem com een
LIKE ‘%en%’ Nomes que tenham a sequência en em qualquer posição
LIKE ‘_en’ Nomes de 3 letras terminando por en
LIKE ‘[CK]%’ Nomes que comecem com C ou K
Nomes de 4 letras que terminem ing e comecem com uma letra
LIKE ‘[S-V]ing’
de S a V
Nomes que comecem com M e não tenham a letra c como
LIKE ‘M[^c]%’
segundo caracter

Select nome
From tabela
Where nome like ‘BR%’
SQL 11

3.2.4 Operações de pertinência a Conjuntos (Listas)

Sintaxe SELECT nome_atributo1, nome_atributo2....


FROM tabela
WHERE [NOT] expressão [NOT] IN (lista de valores)

Exemplo
Listar os vendedores que têm a faixa de comissão A ou B

Select nome_vendedor
From vendedor
Where faixa_comissao in (‘A’, ‘B’)

Select nome_vendedor
From vendedor
Where faixa_comissao = ‘A’OR faixa_comissao =‘B’

Estes operadores pesquisam por linhas que estejam ou não contidas no


conjunto de valores fornecidos.

3.2.5 Operações com Valores Desconhecidos

Sintaxe SELECT nome_atributo1, nome_atributo2....


FROM tabela
WHERE nome_atributo IS [NOT] NULL

Exemplo

Mostrar os clientes que não tenham inscrição estadual


Select *
From cliente
Where ie is null

Um nulo significa que o valor para aquela coluna é indisponível ou


desconhecido, ou seja, o usuário ou a aplicação não forneceram valor ao
campo.
Nulo é diferente de zero ou espaço em branco.
O resultado de qualquer comparação com campos que possuam nulos é falso.
Qualquer cálculo com campos que possuam nulos resulta em valores nulos.
SQL 12

3.2.6 Combinação de Operações

Sintaxe SELECT nome_atributo1, nome_atributo2....


FROM tabela
WHERE [NOT] EXPRESSÃO {AND/ OR} [NOT] expressão

Exemplo

Listar os produtos que tenham unidade igual a ‘M’ e valor unitário igual a R$
1,05

Select descricao_produto
From produto
Where unidade = ‘M’ and valor_unitario = $1.05

Os operadores lógicos AND e OR são usados para conectar expressões de


pesquisa na cláusula WHERE.
AND tem resultado verdadeiro somente quando todas as condições têm
resultado verdadeiro. OR retorna verdadeiro quando qualquer uma das
condições é verdadeira. OR retorna falso quando todas as condições são
falsas.
Quando mais de um operador lógico é utilizado o NOT é avaliado primeiro,
depois o AND e então o OR
Parênteses servem para alterar a ordem de avaliação e para tornar a
expressão mais legível.

3.2.7 Valores Duplicados

Sintaxe SELECT [ALL/DISTINCT] nome_atributo1, nome_atributo2....


FROM tabela
WHERE condições

Exemplo
Quais os tipos de unidades de produtos na tabela de produtos?

Select distinct unidade,


From produto
SQL 13

A SQL permite duplicações em relações. As consultas que resultam em linhas


duplicadas terão todas as linhas exibidas. Nos casos em que queremos forçar
a eliminação de duplicações (na exibição do resultado), inserimos a palavra-
chave DISTINCT depois de SELECT.
A SQL permite o uso da palavra-chave ALL para especificar explicitamente que
as duplicações não sejam removidas.
Uma vez que a detenção das duplicações é o padrão, podemos não usar ALL
em nossos exemplos. A fim de assegurar a eliminação de duplicações nos
resultados de nossos exemplos de consulta, devemos usar DISTINCT quando
necessário.

3.2.8 Classificação dos Dados

Sintaxe SELECT nome_atributo1, nome_atributo2....


FROM tabela
WHERE condições
[ORDER BY nome_atributon / número_da_coluna
[ASC / DESC] ]....

Exemplo

Listar em ordem alfabética a lista de vendedores e seus respectivos salários


fixos.

Select nome_vendedor, salario_fixo


From vendedor
Order by nome_vendedor

A cláusula ORDER BY ocasiona o aparecimento de linhas no resultado de uma


consulta em uma ordem determinada.
Como padrão, a SQL lista itens na ordem ascendente. Para especificar a
ordem de classificação, podemos especificar desc para ordem descendente ou
asc para a ordem ascendente
Pode ser utilizado o número relativo da coluna no lugar do nome da coluna.
Uma consulta pode ser ordenada por até 16 colunas (SQL SERVER).
A fim de preencher a requisição ORDER BY, a SQL precisa executar uma
classificação. Uma vez que a classificação de um grande número de tuplas
pode ser custoso, é desejável classificar apenas quando necessário.
SQL 14

3.3 Geração de Dados Sumarizados

As funções agregadas retornam valores resumo, para a tabela inteira ou para


grupo de colunas dentro da tabela. O resultado aparece como uma nova coluna
no resultado da consulta.
A SQL oferece a habilidade para computar funções em grupos de tuplas
(linhas) usando a cláusula GROUP BY . O atributo ou atributos dados na
cláusula GROUP BY são usados para formar grupos. Tuplas com o mesmo
valor em todos os atributos na cláusula GROUP BY são colocados em um
grupo. A SQL inclui funções para computar :
• média : avg
• mínimo : min
• máximo : max
• total : sum
• contar: count

Existem casos nos quais duplicações precisam ser eliminadas antes de uma
função agregada ser computada. Se desejamos eliminar duplicações, usamos
a palavra-chave DISTINCT na expressão agregada.
Às vezes é útil definir uma condição que se aplique a grupos em vez de tuplas.
Por exemplo, podemos estar interessados em saber quais os pedidos possuem
mais que 3 produtos. Esta condição não se aplica a tuplas simples. Pelo
contrário, aplica-se a cada grupo construído pela cláusula GROUP BY
(agrupamento por pedido). Para expressar tal consulta usamos a cláusula
HAVING. A cláusula HAVING habilita a aplicação de condições a grupos. Os
predicados na cláusula HAVING são aplicados depois da formação dos grupos,
para que funções agregadas possam ser usadas.
Resumindo as funções agregadas produzem um único valor baseado em uma
determinada coluna, a cláusula GROUP BY permite organizar em grupos estes
dados sumarizados e a cláusula HAVING aplica restrições aos grupos gerados.

3.3.1 Funções Agregadas

Sintaxe SELECT nome_atributo1,...,


função_agregada1 ([ALL/ DISTINCT] expressão)....
FROM nome_tabela
WHERE condição
Expressões incluem nomes de colunas, constantes ou funções conectadas por
operadores aritméticos.
SQL 15

Tabela das funções agregadas


Função Parâmetros Descrição
Média de valores na coluna
AVG ([ALL/ DISTINCT] expressão)
especificada, todos ou distintos
Número de valores na coluna, todos
COUNT ([ALL/ DISTINCT] expressão)
ou distintos
COUNT (*) Número de linhas selecionadas
MAX (expressão) Maior valor na coluna
MIN (expressão) Menor valor na coluna
Somatório de valores na coluna,
SUM ([ALL/ DISTINCT] expressão)
todos ou distintos

Exemplos

MAX, MIN
Listar o menor e o maior salário de vendedor

Select min (salario_fixo) AS ‘MENOR SALARIO’, max(salario_fixo) AS ‘MAIOR


SALARIO’
From vendedor

SUM
Mostrar a quantidade total pedida para o produto de código ‘78’

Select SUM (quantidade),


From item_pedido
Where cod_produto = 78

AVG
Qual a média dos salários fixos dos vendedores?

Select avg(salario_fixo) AS MEDIA_SALARIO


From vendedor

COUNT
Quantos vendedores ganham acima de R$ 2.500,00 de salário fixo

Select count (*) from vendedor


Where salario_fixo > $2500,00

As funções agregadas são utilizadas junto à lista de atributos do comando


SELECT e/ou na cláusula HAVING
SQL 16

3.3.2 Utilizando as cláusulas GROUP BY e HAVING

Sintaxe SELECT nome_atributo1, nome_atributo2,...


FROM nome_tabela1, nome_tabela2...
WHERE condição
[GROUP BY expressão,....]
[HAVING condição]

Exemplos

Listar QUANTOS produtos cada pedido contém

Select num_pedido, total_produtos = count (*)


From item_pedido
Group by num_pedido

Listar os pedidos que têm mais do que três produtos e que foram solicitados
em quantidade maior que 100

Select num_pedido, total_produtos = COUNT (*)


From item_pedido
Where qtde > 100
Group by num_pedido
Having count (*) > 3

A ordem de execução dos comandos em um select contendo as cláusulas


WHERE, GROUP BY e HAVING é a seguinte:
1. O predicado na cláusula WHERE é aplicado primeiro, excluindo linhas
que não satisfaçam as condições;
2. As linhas satisfazendo o predicado WHERE são então colocadas em
grupos pela cláusula GROUP BY.
3. A cláusula HAVING é então é aplicada a cada grupo. Os grupos que
satisfazem o predicado da cláusula HAVING são usados pela cláusula
SELECT para gerar linhas do resultado da consulta.

Uma consulta que possui uma cláusula HAVING deve, preferencialmente,


conter uma cláusula GROUP BY. Caso não haja GROUP BY as linhas não
excluídas pela cláusula WHERE são processadas como um único grupo.
Cada nome de atributo no SELECT deve ser mencionado na cláusula GROUP
BY.
SQL 17

3.4 Recuperando Dados de Várias Tabelas (JOINS)

Até agora, em nossos exemplos, utilizamos somente uma tabela. Entretanto


muitas vezes, para formular o resultado das consultas, precisamos de dados de
várias tabelas. Nestes casos é preciso realizar uma junção entre estas tabelas,
esta junção é efetivada através de colunas que são comparáveis,
representando dados similares em cada uma das tabelas incluídas na junção.
Quando realizando junções é comum que as tabelas possuam colunas com o
mesmo nome, neste caso devemos utilizar o qualificador de nomes, ou seja,
o nome da tabela antes do nome do atributo.
Podemos implementar junções utilizando duas sintaxes diferentes a seguir são
descritas as características dos dois formatos disponíveis.

Sintaxe 1 SELECT nome_tabela.nome_atributo1, ....


FROM {nome_tabela1 [tipo_join] JOIN nome_tabela2 ON
condições}
WHERE condições

Tipos de junção permitidos (tipo_join)


Tipo de junção Descrição
Somente linhas que satisfazem a condição de
INNER JOIN
junção
Combinação de todas as linhas entre as tabelas –
CROSS JOIN equivale ao produto cartesiano da álgebra
relacional
OUTER JOIN Inclui as linhas que satisfazem a condição de
(permitido somente junção e as linhas remanescentes de uma das
entre duas tabelas) tabelas conforme descrito abaixo:
Inclui todas as linhas da tabela do lado esquerdo
LEFT OUTER JOIN
da expressão
Inclui todas as linhas da tabela do lado direito da
RIGHT OUTER JOIN
expressão
Inclui todas as linhas de ambas as tabelas, mesmo
FULL OUTER JOIN
as que não tenham correspondentes

Sintaxe 2
SELECT nome_tabela1.nome_atributo1, ....
FROM nome_tabela1, nome_tabela2 ...
WHERE nome_tabela.nome_atributo1 operador_junção
nome_tabela2.nome_atributo2
SQL 18

Neste formato a cláusula FROM especifica as tabelas que serão utilizadas na


consulta e a cláusula WHERE especifica quais linhas serão incluídas no
resultado utilizando a equação de junção.
Os operadores de junção que podem ser usados são: =, >, <, >=, <=,
<>.

A tabela abaixo mostra a compatibilidade entre os formatos 1 e 2:

Sintaxe 1 Sintaxe 2
Condição de junção na cláusula WHERE com os
INNER JOIN
operadores descritos acima
CROSS JOIN Comando SELECT sem a cláusula WHERE
LEFT OUTER JOIN Operador *= na equação de junção
RIGHT OUTER JOIN Operador =* na equação de junção
FULL OUTER JOIN Não tem comando compatível

Para qualquer um dos formatos é possível fazer a junção de diversas tabelas


no mesmo comando SELECT.
LEFT e RIGHT OUTER JOIN podem retornar o mesmo resultado, dependendo
de qual lado do comando JOIN o nome da tabela é escrito.

Exemplo INNER JOIN

Listar o nome dos clientes que fizeram pedidos

Formato 1
Select nome_cliente, pedido.cod_cliente, num_pedido
From cliente inner join pedido on cliente.cod_cliente = pedido.cod_cliente

Formato 2
Select nome_cliente, pedido.cod_cliente, num_pedido
From cliente
Where cliente.cod_cliente = pedido.cod_cliente
SQL 19

Exemplo OUTER JOIN

Listar os produtos e seus respectivos pedidos, mesmo para os produtos que


não possuam pedidos

Formato 1
Select nome_produto, num_pedido
From produto P left outer join item_pedido I on
P.cod_produto = I.cod_produto

Formato 2
Select nome_produto, num_pedido
From produto P item_pedido I
Where P.cod_produto *= I.cod_produto

Exemplo Junção de várias tabelas

Listar os clientes (por ordem de nome) que têm prazo de entrega maior eu 15
dias para o produto ‘QUEIJO’ e que sejam do Rio de Janeiro

Formato 1
Select nome_cliente
From cliente C inner join pedido P
on C.cod_cliente = P. cod_cliente
Inner join item_pedido I
On P.num_pedido = I.num_pedido
Inner join produto PR
On I.cod_produto = Pr.cod_produto
Where prazo_entrega > 15 and
Descricao = ‘QUEIJO’ and
UF = ‘RJ’
Order by C.nome_cliente

Formato 2
Select nome_cliente
SQL 20

From cliente C, pedido P, item_pedido I, produto PR


Where C.cod_cliente = P. cod_cliente and
P.num_pedido = I.num_pedido and
I.cod_produto = Pr.cod_produto and
prazo_entrega > 15 and
Descricao = ‘QUEIJO’ and
UF = ‘RJ’ Order by C.nome_cliente
Order by C.nome_cliente

3.4.1 Efetuando Junção em uma Única Tabela

Junções em uma só tabela correlacionam linha de uma tabela com outras


linhas dentro da mesma tabela. É normalmente utilizado quando uma consulta
compara a mesma informação. Por exemplo, se quisermos saber quais clientes
moram na mesma cidade que um determinado cliente, precisamos comparar a
cidade de cada cliente com a cidade que mora o cliente especificado, estas
informações residem na mesma tabela.
As colunas comparadas devem ser a mesma ou ser de tipo de dados
compatíveis.
Para realizar este tipo de junção é necessário atribuir um sinônimo (“alias”) ao
nome da tabela para que elas possam ser referenciadas logicamente como se
fossem duas tabelas. Estes sinônimos são especificados na cláusula FROM da
seguinte forma:
FROM nome_tabela sinônimo...
Exemplos
Listar todos os clientes que moram na mesma cidade

Formato 1
Select X.nome_cliente , R.nome_cliente
From cliente X join cliente R on X.cidade = R.cidade
Where X_cod_cliente < R.cod_cliente

Formato 2
Select X.nome_cliente , R.nome_cliente
From cliente X, cliente R
Where X.cidade = R.cidade and X_cod_cliente < R.cod_cliente

3.5 Executando sub-consultas


SQL 21

Um comando SELECT pode ser encadeado dentro de outro SELECT formando


assim, uma sub-consulta. A consulta mais interna é avaliada primeiro, depois
então a consulta externa é avaliada.
Uma sub-consulta pode retornar um único valor, como uma função agregada,
neste caso ela pode ser usada em todo lugar onde uma expressão pode ser
usada (exceto na cláusula ORDER BY). Uma sub-consulta pode retornar
também uma coluna com diversos valores, neste caso a sub-consulta deve ser
usada somente na cláusula WHERE.
O comando SELECT de uma sub-consulta é sempre escrito entre parênteses.
Uma sub-consulta pode ser aninhada a um outro SELECT ou aos comandos de
modificação de dados (INSERT, UPDATE, DELETE). Não existe limite prático
para o nível de aninhamento.
A palavra-chave DISTINCT não pode ser usada com sub-consultas que
incluam a cláusula GROUP BY. Colunas do tipo text ou image não são
permitidas na lista de atributos da sub-consulta.
A sub-consulta pode fazer parte da lista de atributos de um comando SELECT
ou estar presente em uma cláusula WHERE. Neste caso a sub-consulta pode
ser implementada através de:
• IN, EXISTS, comandos de comparação, comandos de comparação
seguidos por ANY ou ALL.

3.5.1 Sub-consulta utilizando IN

Sintaxe WHERE expressão [NOT] IN

Exemplo
Que produtos participam em qualquer pedido cuja quantidade seja 10?

Select descricao
From produto
Where cod_produto in
(select cod_produto
from item_pedido
where quantidade = 10

O conectivo IN testa a pertinência a um conjunto, onde o conjunto é uma


coleção de valores produzidos por uma cláusula SELECT. O conectivo NOT IN
testa a não pertinência a um conjunto.
SQL 22

Uma sub-consulta com a utilização de IN é executada da seguinte forma:


1. A sub-consulta é executada gerando uma tabela;
2. Cada linha gerada pela consulta externa é testada em relação à tabela
gerada pela sub-consulta em relação a um ou mais atributos;
3. Se o atributo de comparação estiver contido no conjunto gerado pela sub-
consulta então esta linha vai para o resultado final da consulta.

É importante notar que a lista de atributos de comparação da consulta externa


(na cláusula WHERE) deve ser compatível em tipo e número à lista de atributos
do comando SELECT interno.
Se uma tabela é utilizada somente na sub-consulta as colunas desta tabela não
podem ser incluídas no resultado da consulta (lista dos atributos de saída).

3.5.2 Sub-consulta utilizando EXISTS

Sintaxe WHERE [NOT] EXISTS

Exemplos

Quais os produtos que não estão presentes em nenhum pedido?


Select cod_produto, descricao
From produto p
Where not exists
(select *
from item_pedido
where cod_produto = p.cod_produto)

Quais clientes estão presentes em mais de três pedidos?


Select nome_cliente
From cliente C
Where exists
(select count(*)
from pedido
where cod_cliente = C.cod_cliente
GROUP BY COD_CLIENTE
having count(*) > 3)
Este é um recurso para testar se uma sub-consulta tem alguma tupla em seus
resultados. Este tipo de sub-consulta não retorna dados. A construção EXISTS
retorna o valor true se o argumento sub-consulta está não-vazio e o valor false
SQL 23

caso contrário. A não-existência de tuplas em uma sub-consulta pode ser


testada usando a construção NOT EXISTS.
A palavra EXISTS não é precedida por nome de coluna, constante ou outra
expressão.
A lista de atributos de uma sub-consulta introduzida por EXISTS sempre
consiste de um asterisco.

3.5.3 Sub-consultas utilizando operadores de comparação

Sintaxe WHERE expressão operador_comparação [ANY/ ALL]

Exemplo
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);

Quais vendedores ganham um salário fixo abaixo da média

Select nome_vendedor
From vendedor
Where salario_fixo <
(select avg(salario_fixo)
from vendedor)

Os operadores de comparação permitidos são os seguintes: =, <>, >, >=, <=, <,
!>, !<.
As sub-consultas deste tipo sem a utilização de ANY ou ALL, devem retornar
um único valor e, não podem incluir as cláusulas GROUP BY e HAVING.
A lista de atributos neste tipo de sub-consulta pode incluir somente um único
nome de coluna ou uma expressão.
A utilização de ANY e ALL permite a comparação de um único valor (da
consulta externa) com um conjunto de elementos (gerados pela sub-consulta).
SQL 24

A construção ANY permite testar se um elemento é menor, ou maior, etc, que


qualquer um dos membros do conjunto da sub-consulta. A construção ALL
testa se o elemento é menor, ou maior, etc, que todos os elementos do
conjunto da sub-consulta.

4. Modificando o Banco de Dados

Temos restringido nossa atenção, até o momento, à extração de informações


do banco de dados. Mostramos agora, como adicionar, apagar ou alterar
informações usando a SQL.
⇒ Inserção - INSERT
Para inserir um dado em uma tabela, ou especificamos uma tupla para ser
inserida ou escrevemos uma consulta cujo resultado seja um conjunto de
tuplas a serem inseridas. Obviamente, os valores dos atributos para tuplas
inseridas precisam ser membros do domínio do atributo. Da mesma forma, as
tuplas inseridas precisam ser do mesmo tipo.
⇒ Remoção - DELETE
Uma remoção requisitada é expressa da mesma forma que uma consulta
(usando as cláusulas FROM e WHERE). Podemos remover apenas tuplas
inteiras; não podemos remover valores apenas em atributos particulares.

Um comando DELETE opera em apenas uma relação. Se desejamos remover


tuplas de diversas relações, devemos usar um comando DELETE para cada
relação. O predicado na cláusula WHERE pode ser tão complexo quanto uma
cláusula WHERE do comando SELECT. Podemos, também, ter uma cláusula
WHERE vazia.

⇒ Atualizações - UPDATE
Em certas situações, podemos desejar mudar um valor em uma tupla sem
mudar todos os valores na tupla. Para isto, a instrução UPDATE pode ser
usada. Como era o caso para INSERT e DELETE podemos escolher as tuplas
a serem atualizadas usando uma consulta.
4.1 Inserindo Linhas na Tabela

4.1.1 Inserindo Todos os Valores de Uma Linha

Sintaxe INSERT [INTO] nome_tabela


SQL 25

VALUES (lista de valores)

Exemplo
Adicionar o produto ‘parafuso’ à tabela produto

Insert produto
Values (108, ‘parafuso’,’KG’, 1.25)

Neste formato os atributos devem ser informados na mesma ordem em que a


tabela foi criada e devem existir valores para todos os atributos.
Dados do tipo caracter ou data devem estar entre apóstrofo. Itens de dado que
possuam a propriedade IDENTITY não devem ser discriminados na cláusula
VALUES.

4.1.2 Inserindo dados parciais

Sintaxe INSERT [INTO] nome_tabela (lista de atributos)


VALUES (lista de valores)

Exemplo
Insira na tabela de vendedores o vendedor Ednilson, com código 315

Insert into vendedor (cod_vendedor, nome_vendedor)


Values (315, ‘Ednilson’)

A lista de atributos pode ser descrita em qualquer ordem, os itens de dados na


cláusula VALUES devem seguir a mesma ordem da lista de atributos.
As colunas não especificadas serão preenchidas com seus valores default
(caso algum valor default tenha sido definido), ou serão preenchidas com nulo
(se um valor default não foi definido e a coluna permite nulo).
As colunas que não admitem nulo, não possuem um valor default, não
possuam a propriedade IDENTITY ou não são do tipo timestamp devem
obrigatoriamente constar da lista de atributos.
4.1.3 Utilizando as opções DEFAULT

• DEFAULT
Insere um valor default para uma coluna determinada
Sintaxe parcial VALUES (DEFAULT/ valor constante,...)
SQL 26

Exemplo

Insert vendedor
Values (315, Ednilson, DEFAULT, ‘A’)

A opção DEFAULT não é válida para uma coluna com a propriedade


IDENTITY. Colunas com a propriedade IDENTITY são incrementadas
automaticamente e não podem fazer parte de um comando INSERT.
As seguintes regras de preenchimento serão seguidas:
• Se a coluna foi definida com o tipo de dado timestamp, o próximo
valor será inserido.
• Um valor default é inserido se existir algum valor default definido para
a coluna ou tipo de dado.
• O campo será preenchido com nulo se o atributo permitir valores
nulos e não possuir um valor default
• Se valores nulos não são permitidos e valores default não foram
definidos, será exibida uma mensagem de erro e a linha não será
inserida.

• DEFAULT VALUES
Insere um valor default para todas a colunas da tabela
Sintaxe INSERT nome_tabela DEFAULT VALUES

Exemplo

Insert cliente default values

Se existirem colunas com a propriedade IDENTITY o próximo valor será


inserido.
As demais regras de preenchimento são as mesmas citadas acima para a
opção DEFAULT.

4.1. 4 Inserindo Linhas através de um SELECT

Sintaxe INSERT nome_tabela


SELECT lista_de_atributos
FROM lista_de_tabelas
WHERE condições
SQL 27

Exemplo
Cadastrar como cliente os vendedores que emitiram mais de 50 pedidos.

Insert cliente (nome_cliente)


Select nome_vendedor
From vendedor V, pedido P
Where V.cod_vendedor = P.cod_vendedor
Having count(*) > 50;

Usando uma cláusula SELECT diversas linhas de uma ou mais tabelas são
inseridas na tabela especificada na cláusula INSERT.
A tabela usada no INSERT e o resultado do SELECT devem ser compatíveis
em número de colunas, ordem das colunas e tipos de dados. No SQL Server os
tipos de dados são compatíveis quando são os mesmos ou podem ser
convertidos automaticamente.
Se um atributo é omitido na cláusula INSERT ele deve: possuir um valor default
ou permitir nulo.

4.2 Removendo linhas de uma tabela


4.2.1 Removendo Linhas Baseado na Cláusula WHERE

Sintaxe DELETE [FROM] nome_tabela


WHERE condições

Exemplo
Apagar todos os vendedores com faixa de comissão nula

Delete from vendedor


Where faixa_comissao is null

A cláusula DELETE remove uma ou mais linhas de uma única tabela, de


acordo com a condição especificada na cláusula WHERE. Se a cláusula
WHERE não for especificada todas as linhas serão removidas.
4.2.2 Removendo Todas as Linhas de Uma Tabela

Sintaxe TRUNCATE TABLE [[database.] proprietário.]nome_tabela


Exemplo
Remover todas as linhas da tabela de pedidos
SQL 28

Truncate table pedido

O comando TRUNCATE TABLE remove todas as linhas de uma tabela. Este


comando é quase sempre mais rápido que o comando DELETE porque não
mantém log.

4.2.3 Removendo linha baseado em dados de outras tabelas

Sintaxe DELETE [FROM] nome_tabela [FROM nome_tabela1,


[nome_tabela2]...
[WHERE condição]

Exemplo
Remover da tabela de pedidos os pedidos que contenham produtos que
custem menos de R$0,20

Versão ANSI
Delete from pedido
Where num_pedido in
(select num_pedido
from produto P, item_pedido I
where P.cod_produto = I.cod_produto and
valor_unitario < $0,20)

Versão Transaction SQL


Delete from pedido
from produto P, item_pedido I, pedido
Where I.num_pedido = pedido.num_pedido and
P.cod_produto = I.cod_produto and
valor_unitario < $0,20
Somente as linhas da tabela especificada após a cláusula DELETE serão
apagadas

4.3 Atualizando Dados na Tabela


4.3.1 Atualizando dados

Sintaxe UPDATE nome_tabela


SET {nome_atributo1 = expressão [nome_atributo2 = expressão]...}
WHERE condição
SQL 29

Exemplo
Alterar o valor unitário do produto ‘parafuso’ para R$ 1.62

Update produto
Set valor_unitario = 1.62
Where descricao = ‘parafuso’

O comando UPDATE opera somente em uma tabela. A cláusula SET especifica


as colunas a serem alteradas e os valores novos, a cláusula WHERE
especifica quais as linhas que serão atualizadas.
Se os novos valores violarem as restrições de integridade o comando UPDATE
não é efetivado.

4.3.2 Atualizando Dados Baseado em Dados de Outras Tabelas

Sintaxe UPDATE nome_tabela


SET { nome_atributo= ( cláusula SELECT)
WHERE condição

Exemplo
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 valor_unitario = valor_unitario * 1.025
Where valor_unitario <
(select avg(valor_unitario)
from produto
where unidade = ‘KG’)

A cláusula SELECT aninhada deverá retornar um único valor. É executada uma


vez para cada linha. O valor calculado pelo SELECT atualizará a linha
especificada. Somente linhas que satisfaçam a cláusula WHERE mais externa
serão atualizadas.
5. Criação de Índices

Índices são criados para aumentar a velocidade de recuperação dos dados.


Devem ser criados para os campos que são frequentemente pesquisados.
A criação de índices para chaves estrangeiras aumenta a velocidade na
execução das junções. A criação de índices facilita também a realização dos
comandos ORDER BY e GROUP BY.
SQL 30

Logicamente criar índices pode também trazer algumas desvantagens, como


por exemplo: o tempo para a construção do índice, o espaço em disco utilizado
para armazenar os índices e, o maior tempo levado nas operações de
modificação no banco de dados, pois todas as mudanças têm que ser
realizadas nos dados e nos índices.

As diretrizes abaixo descrevem que tipo de dado deve ou não ser indexado:
 Colunas que devem ser indexadas
• Chave primária
• Colunas frequentemente utilizadas em junção (chave estrangeira)
• Colunas frequentemente pesquisadas em faixas de valores
• Colunas frequentemente recuperadas de forma classificada

 Colunas que não devem ser indexadas


• Colunas que raramente são referenciadas em uma consulta
• Colunas que contêm poucos valores únicos
• Colunas definidas com os tipos de dados text, image ou bit
• Quando desempenho das atualizações é mais importante que o
desempenho das consultas

Sintaxe

CREATE [UNIQUE] [CLUSTERED / NONCLUSTERED] INDEX


nome_índice
ON [database] proprietário] nome_tabela (nome_coluna1 [,nome
coluna2...])

Exemplo

Criar a tabela de índices chamada ped_pro baseada na concatenação dos


campos num_pedido e cod_produto da tabela item_pedido

Create index ped_pro


On item_produto (num_pedido, cod_produto)
SQL 31

Criar índice para a tabela ciente baseada no código do cliente, não podendo
haver duplicidade de informação armazenada

Create unique index clientex


On cliente (cod_cliente)

6. Utilizando Visões

Uma visão é uma tabela virtual criada a partir de uma ou mais tabelas do banco
de dados. Uma visão pode selecionar apenas algumas colunas ou, apenas
algumas linhas da tabela original e pode também possuir campos que são
calculados ou derivados de outras informações.
Visões podem ser utilizadas como um dispositivo de segurança do banco de
dados (o usuário enxerga apenas as informações que lhe são permitidas).
Podem também ser utilizadas com a finalidade de simplificar a visualização dos
dados ou para simplificar a definição das consultas.
Na criação de uma visão não podem ser usados os comandos: SELECT INTO,
ORDER BY, COMPUTE, COMPUTE BY ou UNION.
Depois de criada a visão será utilizada como se fosse uma tabela, nos
comandos SELECT, INSERT, UPDATE ou DELETE.
Uma visão é definida na SQL usando o comando CREATE VIEW. Para definir
uma visão, precisamos dar à visão um nome e definir a consulta que a
processa. Uma visão pode também ser definida a partir de outra visão.
A forma do comando CREATE VIEW é :
Sintaxe CREATE VIEW [PROPRIETARIO.] nome_visão
[(nome_atributo1 [, nome_atributo2]...)
[WITH ENCRYPTION]
AS comando_select [WITH CHECK OPTION]

Com a opção WITH ENCRYPTION a definição da visão é encriptada.


Com a opção WITH CHECK OPTION para todos os comandos de modificação
de dados executados através da visão será verificado se a modificação está de
acordo com a definição da visão. O default é a não realização deste teste.

Exemplo
Crie uma VIEW que contenha só os produtos pedidos a metro
SQL 32

Create view pr_metro


Cod_pr_metro, descricao, unidade) As
Select cod_produto , descricao, unidade
From produto
Where unidade = ‘M’

Visões não podem ser alteradas, devem ser apagadas (DROP VIEW) e
recriadas.
Uma atualização em uma visão pode afetar somente um objeto subjacente, ou
seja, se a visão é resultado da junção de duas tabelas devem-se alterar os
campos de cada tabela em comandos de atualização separados.
Colunas que contém valores calculados, funções do sistema ou, funções de
agregação não podem ser modificadas.
Uma linha não pode ser inserida através de uma visão a menos que as colunas
que não aceitem nulos, no objeto subjacente tenha valores defaults. Esta regra
é relevante para as colunas que não fazem parte da definição da visão.
SQL 33

Exercícios

Criando tabelas
1. Criar uma tabela de alunos com seus dados pessoais - chave primária:
matrícula do aluno, permitir valores nulos para o campo CIC
2. Criar uma tabela com as informações sobre disciplinas - atributos: sigla
(chave primária), descrição, carga horária, semestre no curso. Permitir
valores nulos no campo semestre no curso
3. Criar uma tabela com informações relevantes para um banco de dados
contendo informações sobre CD's
4. Criar uma tabela de funcionários para o banco de dados de uma empresa,
definir uma chave primária, não aceitar valores nulos

Consulta a Tabelas Seção – 3.1


1. Listar número do pedido e prazo de entrega de todos os pedidos.
2. Listar a descrição e o valor unitário dos produtos.
3. Listar nome e endereço de todos os clientes.
4. Listar nome de todos os vendedores.
5. Listar todas as informações da tabela de clientes.
6. Listar todas as informações da tabela produtos.
7. Listar o código e nome dos produtos. Insira as literais "código do produto" e
"nome do produto" antes de cada atributo.
8. Listar o nome de todos os vendedores. Alterar o cabeçalho da coluna para
nome.
9. Listar o nome de todos os clientes. Alterar o cabeçalho da coluna para
nome.
10.Listar o preço dos produtos alimentados em 10%.
11.Listar o salário fixo dos vendedores aumentados em 5%.
SQL 34

Consulta a Tabelas Seção – 3.2 e 3.3


1. Listar o nome dos clientes que moram em Sorocaba.
2. Listar todos os dados dos vendedores com salário fixo <$400,00.
3. Listar o código do produto e a descrição para os produtos cuja unidade seja
igual a "Kg".
4. Listar o pedido e o prazo de entrega para os pedidos feitos entre 01/05/2010
a 01/06/2010.
5. Listar os dados dos produtos cujo valor unitário seja maior que $100,00 e
menor que $200,00.
6. Listar o número do pedido e o código do produto cuja quantidade esteja
entre 1000 e 1500.
7. Listar o nome dos vendedores cujo nome comece por "José".
8. Listar o nome de todos os clientes cujo último nome seja "Silvia".
9. Listar a descrição e o código dos produtos que tem a sequência "AC" em
qualquer parte da descrição.
10.Listar a descrição dos produtos cuja unidade, tenha três letras e termina por
"M".
11.Listar todos os dados dos produtos cuja unidade comece por "K" ou "Q".
12.Listar os dados dos clientes cujos nomes comecem por "A", "B" ou "C".
13.Listar os dados dos vendedores cujo nome não comece por "J".
14.Listar o código do produto que tenha quantidade 100, 200 ou 300.
15.Listar o nome e a faixa, de comissão para os vendedores com salário fixo
igual a $300,00, $400,00 ou $500,00.
16.Listar os nomes dos clientes que não tenham endereço cadastrado.
17.Listar nome dos clientes que não tenham CEP cadastrado.
18.Listar a descrição dos produtos com unidade igual a "Lt" e valor unitário
entre $100,00 e $150,00.
19.Listar os dados dos clientes que moram em "Itu" e não estão com o CEP
cadastrado.
20.Listar os nomes dos clientes que começam por "José" ou por "Maria".
21.Listar os tipos de faixa de comissão da tabela vendedor.
SQL 35

22.Listar as cidades onde moram os clientes (exibir cada cidade apenas uma
vez).
23.Listar dos dados dos clientes por ordem alfabética de nome.
24.Listar os dados dos clientes por ordem alfabética decrescente de cidade.
25.Listar os dados dos clientes por ordem de cidade e por ordem do nome dos
clientes.
26.Listar os códigos e a descrição dos produtos, cuja unidade igual o "Kg" por
ordem alfabética de descrição.
27.Listar os dados dos produtos por ordem decrescente de valor unitário.
28.Listar a maior quantidade que conste na tabela de item do pedido.
29.Listar o menor valor unitário da tabela de produtos.
30.Mostrar a somatória dos salários fixos pago aos vendedores.
31.Qual a medida de valor unitário para os produtos cuja unidade seja igual a
"Kg".
32.Mostrar quantos tipos de unidades diferentes existem na tabela de produtos.
33.Listar o número de produtos cuja unidade seja igual a "Lt".
34.Listar o número de clientes agrupados por cidade.
35.Listar quantos pedidos cada vendedor realizou.
36.Listar o maior e o menor valor unitário para cada tipo de unidade de produto.
37.Listar o número de clientes, agrupados por cidade para todas as cidades
que aparecem mais de 4 vezes na tabela de clientes.

Consulta a Tabelas Seção – 3.4


1. Listar o código e o nome dos vendedores que efetuaram vendas para o
cliente com código 10.
2. Listar o número do pedido, prazo de entrega, a quantidade e a descrição do
produto com código 100.
3. Listar o endereço dos clientes do estado do Rio de Janeiro (UF = 'RJ') que
têm prazo de entrega até 03-08-2010 ou fizeram pedido com o vendedor
com código 20.
4. Quais os vendedores (código e nome) fizeram pedidos para o cliente
'Ciclano da Silva'.
SQL 36

5. Quais produtos (código, descrição, unidade e quantidade) cuja quantidade


seja maior que 50 e menor que 100.
6. Listar o número do pedido, o código do produto, a descrição do produto, o
código do vendedor, o nome do vendedor , o nome do cliente, para todos os
clientes que moram em Sorocaba.
7. Listar todos os dados dos clientes cujo nome comece por maria e que tenha
o código do cliente entre 100 e 200, que morem em Sorocaba, por ordem
alfabetica de nome do cliente.
8. Listar o código e o nome dos clientes que tem prazo de entrega para
03/04/2010.
9. Listar o código do produto, a descrição, a quantidade pedida e o prazo de
entrega para o pedido número 123.
10.Listar o nome dos clientes do estado de São Paulo (UF ='SP') que têm
prazo de entrega até o dia 03-08-2010 e fizeram pedido com o vendedor
com código 20.
11.Quais os cliente ( nome e endereço) da cidade de Itu ou Sorocaba tiveram
seus pedidos tirados com o vendedor 'Alôncio Pimentão'.
12.Quais produtos (código, descrição, unidade e quantidade) cuja quantidade
seja maior que 50.
13.Listar o número do pedido, o código do produto, a descrição do produto, o
código do vendedor, o nome do vendedor , o nome do cliente, para todos os
clientes que moram em Itu.
14.Listar todos os clientes que moram na mesma cidade que 'João da Silva'.

Consulta a Tabelas Seção 3.5


1. Quais produtos tem valor unitário acima da média.
2. Quais os clientes que só compraram com o vendedor com codigo 10.
3. Quais os clientes que só compraram com o vendedor 'Fulado de Tal'.
4. Quais vendedores fizeram mais de 100 pedidos.
5. Quais os vendedores não fizeram nenhum pedido no mês de
novembro/2008.
6. Quais vendedores particiapam em qualquer pedido, cujo prazo de entrega
seja 01/12/2008
SQL 37

Modificando o Banco de dados


1. Insira uma linha, com todos os dados na tabela vendedores.
2. Insira uma linha com todos os dados na tabela de clientes.
3. Insira um novo pedido, com todos os dados nas tabelas pedido e item do
pedido.
4. Insira na tabela de produtos um produto com código 20, e descrição
'rebimboca da parafuseta'.
5. Insira na tabela de clientes um cliente com código 214 e nome 'Maria Costa'.
6. Insira um cliente na tabela de clientes, atribuindo valor ao campo código e,
ao campo nome, e atribuindo valor 'default' aos demais campos.
7. Insira um novo produto apenas com valores default.
8. Inserir como cliente os vendedores que emitiram mais de 30 pedidos com
prazo de entrega para dezembro/2008.
9. Remova todas as linhas da tabela item do pedido.
10.Remova da tabela de produtos os produtos com valor unitários > $ 600,00.
11.Remover da tabela de pedidos todos os pedidos do vendedor com código
30.
12.Remover da tabela vendedor os que não tem nenhum pedido emitido.
13.Remover da tabela item do pedido os produtos que tenham valor unitário >
$300,00.
14.Dar um aumento de 5% para todos os produtos.
15.Alterar a faixa de comissão de B para A do vendedor com código 32.
16.Reduzir o valor unitário em 0,5% dos produtos que estejam acima da média
dos preços.

Criando índices
1. Criar uma tabela de índices para a tabela cliente utilizando o campo
nome_cliente
2. Criar uma tabela de índices para a tabela vendedor utilizando o campo
nome_vendedor, não permitindo duplicidade de informações
3. Criar uma tabela de índices para a tabela pedidos utilizando o campo
prazo_entrega
SQL 38

Utilizando Visões

1. Criar uma view para os clientes que morem em Itu, utilizando todos os
campos da tabela de clientes
2. Criar uma view a partir da tabela de clientes, utilizando apenas os campos
cod_cliente e noeme_cliente
3. Criar uma view a partir da tabela de pedidos para os pedidos realizados em
fevereiro/1999
4. Criar uma view a partir da tabela de vendedores, para todos os vendedores
com faixa de comissão 'Ä' ,com todos os campos da tabela vendedor
5. Criar uma view com o nome do cliente e o nome do vendedor que atendeu
seus pedidos

Você também pode gostar