M03-Apostila SQL
M03-Apostila SQL
MINISTÉRIO DA EDUCAÇÃO
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
LEOPOLDINA - CAMPUS V
CRIANDO ESQUEMA
O conceito de um esquema SQL foi definido com o SQL2 para agrupar tabelas e outros
elementos que pertençam a mesma aplicação. Um esquema é identificado por um
nome, um identificador do usuário ou conta que possui o esquema e descritores de cada
elemento do esquema.
Sintaxe:
Exemplo(s):
Sintaxe:
Exemplo(s):
Tipos de restrições
[NOT] NULL - Indica se a coluna pode ou não receber valores nulos. O default
é NULL.
UNIQUE - Indica que a coluna ou combinação de colunas não pode ter valores
repetidos.
SET DEFAULT - o valor da FK recebe o valor definido com default para aquela
coluna.
CHECK - Não permite que valores que violem a condição estabelecida sejam
gravados na coluna.
Exemplo(s):
ALTERANDO DE TABELAS
Sintaxe:
Exemplo(s):
Para excluir uma chave estrangeira é necessário que ela tenha recebido um nome
quando da sua definição.
REMOVENDO TABELAS
Sintaxe:
Exemplo(s):
ÍNDICES
Observações:
• Índices não podem ser alterados; devem ser removidos (com DROP) e recriados;
• A decisão de se usar ou não um índice em resposta a uma solicitação específica
de dado não é tomada pelo usuário mas sim pelo sistema;
CRIANDO ÍNDICES
Sintaxe:
Exemplo(s):
REMOVENDO ÍNDICES
Sintaxe:
Exemplo(s):
INSERINDO REGISTROS
Sintaxe:
Exemplo(s):
Exemplo(s):
Exemplo(s):
REMOVENDO REGISTROS
Sintaxe:
Exemplo(s):
ATUALIZANDO REGISTROS
Sintaxe:
UPDATE nome_tabela
SET nome_coluna = <valor> [, nome_coluna = <valor>]
[WHERE <condição>]
Exemplo(s):
UPDATE Produto
SET PunitProd = (PunitProd * 1.1) where CodBarraProd='1122';
Obs.: Todas as linhas de uma tabela são atualizadas se for omitida a cláusula WHERE.
CONSULTANDO REGISTROS
Sintaxe:
Exemplo(s):
SELECT *
FROM Produto;
• Usando Pseudônimos
• Operador AS
Usada para filtrar um subconjunto de linhas de uma tabela, com base em uma
condição. A condição deve resultar em um valor booleano (Verdadeiro ou Falso).
Sintaxe:
• Operadores
= Igual a
<> Diferente de
Exemplo(s):
SELECT *
FROM Produto
WHERE PUnitProd > 10.00
SELECT *
FROM NotaVenda
WHERE NomeVendedor IS NULL;
Observações:
SELECT *
FROM PRODUTO
WHERE TipoProd LIKE '%ard%';
• Conjunção de Condições
Várias condições podem ser conectadas na cláusula WHERE usando o operador AND.
Exemplo(s):
• Disjunção de Condições
Exemplo(s):
Exemplo(s):
Sintaxe:
Exemplo(s):
SELECT IdProd, DescProd
FROM Produto
WHERE TipoProd = 'HARDWARE'
ORDER BY DescProd;
SELECT *
FROM NotaVenda
ORDER BY DataNV DESC;
As linhas de uma tabela podem ser combinadas às linhas de outra tabela através de
valores iguais em colunas correspondentes.
Sintaxe 1:
Sintaxe 2:
Exemplos Sintaxe 1:
Exemplo Sintaxe 2:
A operação Self JOIN (join reflexiva) é usada quando é necessário fazer um JOIN de
uma tabela com ela mesma, comparando linhas de dados dentro de uma única tabela.
PRODUTO CARTESIANO
Todas as linhas da primeira tabela são combinadas com todas as linhas da segunda
tabela. Ocorre quando são usadas duas tabelas na cláusula FROM e a cláusula
WHERE é omitida.
Exemplo(s):
SELECT IdNv,Idprod
FROM NotaVenda, Produto; {gera um resultado com 56 registros}
• Operadores aritméticos
+ Soma
- Subtração
* Multiplicação
/ Divisão
• Funções de conversão
• Funções de agregação
São funções do padrão SQL que trabalham sobre um grupos de linhas, retornando um
único valor com resultado.
AVG(coluna) Média dos valores da coluna
Sintaxe:
SELECT função_grupo(nome_coluna)
FROM nome_tabela
[WHERE condição]
[ORDER BY nome_coluna]
Exemplo(s):
Observações
Exemplo(s):
SELECT COUNT(IdProd)
FROM ItemNota; --->> Errado, pois conta produtos duplicados
Correto:
• Para contar todas as linhas de uma tabela pode ser usado COUNT(*) (linhas
com valores NULOS também serão consideradas).
Exemplo(s):
SELECT COUNT(IdNV)
FROM NotaVenda
WHERE VendedorNome = 'JOSE';
O SQL recupera cada grupo de linhas de acordo com os valores da(s) expressão(ões)
especificada(s) na cláusula GROUP BY.
Sintaxe:
A cláusula GROUP BY deverá vir sempre após a cláusula WHERE (ou após a cláusula
FROM quando não existir WHERE).
Exemplo(s):
Observações
• Quando usar GROUP BY todas as colunas que são usadas no SELECT mas não
são usadas na função de grupo devem ser incluídas na clausula GROUP BY.
Exemplo(s):
A cláusula WHERE não pode ser usada para restringir funções de grupo. Assim, o
exemplo seguinte não é válido:
SELECT num_depto, AVG(salario_emp)
FROM emp
WHERE AVG(salario_emp) > 2000
GROUP BY num_depto; ---->>> Errado: WHERE com função de grupo
Os grupos definidos pela cláusula GROUP BY podem ser filtrados pela cláusula
HAVING.
Exemplo(s):
SUBQUERIES
Uma subquery que retorna apenas uma linha como resultado é chamada "single-row
subquery". Caso mais de uma linha seja retornada, a subquery é chamada "multiple-
row subquery".
Os operadores = , > , >= , < , <= e <> podem ser usados em comparações com
"singlerow subqueries". Os operadores IN, ANY e ALL são usados em "multiple-row
subqueries".
Exemplo(s):
Listar a descrição dos produtos que têm o mesmo preço unitário que o produto '00010'.
SELECT DescProd
FROM Produto
WHERE PunitProd = (SELECT PUnitProd
FROM Produto
WHERE IdProd = '00010');
Listar o nome dos vendedores que emitiram tantas notas de venda quando a vendedora
'PAULO'.
SELECT NomeVendedor
FROM NotaVenda
GROUP BY NomeVendedor
HAVING COUNT(IdNv) = (SELECT COUNT(IdNv)
FROM NotaVenda
WHERE NomeVendedor = 'PAULO');
Quando a subquery retornar mais de um valor, os operadores ANY e ALL podem ser
utilizados para compatibilizar o resultado da subquery com o tipo do operador de
comparação.
Essa condição será verdadeira quando <campo> for maior que qualquer um dos
resultados da subquery.
Essa condição será verdadeira quando <campo> for menor que qualquer um dos
resultados da subquery.
Essa condição será verdadeira quando <campo> for maior que todos os
resultados da subquery.
Essa condição será verdadeira quando <campo> for menor que todos os
resultados da subquery.
Exemplo(s):
- Listar os produtos que tenham preço unitário superior ao preço unitário de todos os
produtos de hardware.
SELECT Descprod
FROM Produto
WHERE Punitprod > ALL ( SELECT Punitprod
FROM Produto
WHERE Tipoprod = 'HARDWARE');
• Operadores IN e NOT IN
Verifica se o dado faz parte ou não da lista fornecida. A lista pode ser formada por
valores retornados por uma subquery.
Exemplo(s):
• Operadores de Conjuntos
Exemplo(s):
Listar todas as Notas de venda que sejam do vendedor 'JUCA', ou em que conste o
produto '00014'.
EXIST: retorna “verdadeiro” se uma determinada subquery retornar ao menos uma linha
e “falso” caso contrário.
Exemplo(s):
SELECT DescProd
FROM Produto p
WHERE EXISTS ( SELECT IdProd FROM ItemNota i WHERE p.IdProd = i.IdProd
)