17/10/2009
SQL
COMANDOS DE
CONSULTA
SELECT
Seleção de todas os campos (ou
colunas) da tabela.
tabela.
SELECT * FROM [TABELA]
SELECT [lista de atributos] FROM [TABELA]
1
17/10/2009
Cláusula WHERE
A cláusula "where" corresponde ao
operador restrição da álgebra
relacional.
Contém a condição que as tuplas
devem obedecer a fim de serem
listadas.
Ela pode comparar valores em
colunas, literais, expressões
aritméticas ou funções.
Operadores lógicos
operador significado
= igual a
> maior que
>= maior que ou igual a
< menor que
<= menor que ou igual a
2
17/10/2009
Exemplos
SELECT NM_NOME, DS_CARGO
FROM EMPREGADO
WHERE ID_DEPTO > 10;
SELECT NM_NOME, DS_CARGO
FROM EMPREGADO
WHERE DS_CARGO = 'GERENTE';
Alias
Os nomes dos atributos podem ser
substituidos por alias para melhorar a
apresentação da consulta.
SELECT NM_NOME “NOME”, DS_CARGO “CARGO”
FROM EMPREGADO
WHERE ID_DEPTO > 10;
3
17/10/2009
DISTINCT
A cláusula Distinct elimina
duplicidades, significando que
somente relações distintas serão
apresentadas como resultado de
uma pesquisa.
SELECT DISTINCT DS_CARGO
FROM EMP;
ORDER BY
A cláusula Order By modificará a
ordem de apresentação do resultado
da pesquisa (ascendente ou
descendente).
SELECT NM_NOME, DS_CARGO
FROM EMPREGADO
ORDER BY NM_NOME;
4
17/10/2009
DEMAIS OPERADORES
Operador Significado
between...and ... entre dois valores ( inclusive )
in ( .... ) lista de valores
like com um padrão de caracteres
is null é um valor nulo
Exemplos
SELECT NM_NOME, VL_SALARIO
FROM EMPREGADO
WHERE VL_SALARIO BETWEEN 500 AND 1000;
SELECT NM_NOME, ID_DEPTO
FROM EMPREGADO
WHERE ID_DEPTO IN (10,30);
SELECT NM_NOME, DS_CARGO
FROM EMPREGADO
WHERE NM_NOME LIKE 'F%';
SELECT NM_NOME, DS_CARGO
FROM EMPREGADO
WHERE VL_COMISSAO IS NULL;
5
17/10/2009
OPERADORE NEGATIVOS
OPERADOR DESCRIÇÃO
<> diferente
not between não entre dois valores informados
not in não existente numa dada lista de valores
not like diferente do padrao de caracteres informado
is not null não é um valor nulo
OPERADORES LOGICOS
Operadores "AND" (E) e "OR" (OU)
SELECT NM_NOME, VL_SALARIO, DS_CARGO
FROM EMPREGADO
WHERE VL_SALARIO BETWEEN 700 AND 2000
AND DS_CARGO = 'VENDEDOR';
SELECT NM_NOME, VL_SALARIO, DS_CARGO
FROM EMPREGADO
WHERE VL_SALARIO BETWEEN 700 AND 2000
AND ( DS_CARGO = 'BALCONISTA' OR DS_CARGO =
'VENDEDOR' );
6
17/10/2009
FUNÇÕES DE AGRUPAMENTO
função retorno
avg(n) média do valor n, ignorando nulos
count(expr) vezes que o número da expr avalia para algo
não nulo
max(expr) maior valor da expr
min(expr) menor valor da expr
sum(n) soma dos valores de n, ignorando nulos
EXEMPLOS
SELECT AVG(VL_SALARIO) FROM EMPREGADO;
SELECT MIN(VL_SALARIO) FROM EMPREGADO;
SELECT MAX(VL_SALARIO) FROM EMPREGADO;
SELECT SUM(VL_SALARIO) FROM EMPREGADO;
7
17/10/2009
AGRUPAMENTOS
As funções de grupo operam sobre grupos
de tuplas(linhas). Retornam resultados
baseados em grupos de tuplas em vez de
resultados de funções por tupla
individual. A claúsula “GROUP BY" do
comando "select" é utilizada para dividir
tuplas em grupos menores.
A cláusula "GROUP BY" pode ser usada
para dividir as tuplas de uma tabela em
grupos menores. As funções de grupo
devolvem uma informação sumarizada
para cada grupo.
GROUP BY
SELECT ID_DEPTO, AVG(VL_SALARIO)
FROM EMPREGADO
GROUP BY ID_DEPTO;
8
17/10/2009
EXERCÍCIOS
1 – SELECIONAR TODOS OS ATORES E DIRETORES
2 – CRIAR UMA RELAÇÃO COM O NOME DO FILME, O TITULO
ORIGINAL E O ANO DE LANÇAMENTO DO CINEMA
3 – REPETIR A SELEÇÃO ANTERIOR SUBSTITUINDO O NOME DOS
ATRIBUTOS POR ALIAS
4 – SELECIONAR TODAS AS PRATELEIRAS QUE POSSUEM FILMES
5 – SELECIONAR TODOS OS FILMES DE AVENTURA
6 – VERIFICAR QUANTOS DIRETORES/ATORES EXISTEM POR
NACIONALIDADE
7 – CALCULAR A MEDIA DO VALOR DAS LOCAÇÕES
8 – CALCULAR A MEDIA DO VALOR DAS LOCAÇÕES POR CLIENTE
9 – VERIFICAR QUAL ATOR/DIRETOR MAIS VELHO
10 – VERIFICAR QUAL O ATOR/DIRETOR MAIS NOVO
11 – CONTAR AS CÓPIAS EXISTENTES PARA CADA FILME
12 – SELECIONAR TODOS OS FILMES ORDENADOS POR CATEGORIA
EXERCÍCIOS
13 – LISTAR OS PERSONAGENS POR FILME EM ORDEM ALFABÉTICA -
14 – LISTAR TODOS OS FILMES DE DRAMA E SUSPENSE EM ORDEM
ALFABÉTICA
15 – LISTAR TODOS OS FILMES QUE NÃO SÃO COMÉDIA E COMÉDIA
ROMÂNTICA
9
17/10/2009
Equi--Junção ( Junção por
Equi
igualdade )
O relacionamento existente entre tabelas
é chamado de equi-
equi-junção, pois os valores
de colunas das duas tabelas são iguais. A
Equi--junção é possível apenas quando
Equi
tivermos definido de forma adequada a
chave estrangeira de uma tabela e sua
referência a chave primária da tabela
precedente. Apesar de admitir-
admitir-se em
alguns casos, a equi-
equi-junção de tabelas,
sem a correspondência Chave Primária-
Primária-
Chave Estrangeira, esse tipo de
construção é totalmente desaconselhável.
Exemplo
SELECT A.NM_NOME, A.DS_CARGO, B.NM_DEPTO
FROM EMPREGADO A, DEPTO B
WHERE A.ID_DEPTO = B.ID_DEPTO;
10
17/10/2009
EXERCÍCIOS
1 – Listar todos os filmes ordenados pela descrição do gênero;
2 – Listar todos os personagens ordenados pelo nome do ator e
mostrando o nome do filme
3 – Listar o nome do filme e o nome do(s) diretor(es) para cada filme
4 – Totalizar todas as locações do mês de setembro ordenados pelo nome
do cliente;
5 – Listar todos os filmes ordenados pela descrição da categoria
6 – Listar todos os filmes que não são comedia e comédia romantica.
Usar para essa seleção a descrição do gênero.
INSERT
Comando responsável para adicionar
um mais registros na tabela de
Banco de Dados. Os campos que
forem omitidos recebem valores
NULOS “NULL”.
INSERT INTO CLIENTES (ID,NOME)
VALUES (1,’Nome do Cliente’);
11
17/10/2009
DELETE
Apaga um ou mais registros de uma
tabela. Se não for utilizado a cláusula
WHERE, será apagado todos os
registros da tabela.
DELETE FROM VENDAS WHERE
DATA_VENDA <= ‘1-JAN-2003’;
UPDATE
Comando responsável pela
atualização da tabela no Banco do
Dados. Se não for utilizada a
cláusula WHERE a coluna da tabela
será atualizada para todas tuplas.
UPDATE CLIENTE SET
DATA_INCLUSAO = CURRENT DATE;
12
17/10/2009
COMMIT/ROLLBACK
COMMIT - Grava as alterações de uma
transação permanente no Banco de
Dados.
ROLLBACK - Desfaz as mudanças
ocorridas até o exato momento no Banco
de Dados, sem que o comando COMMIT
tenha sido executado. Este comando e o
Commit fecham a transação aberta pela
aplicação e ou ferramenta de
gerenciamento as tabelas.
EXERCÍCIOS
1- Inserir os filmes abaixo:
– A Bússula de Ouro, New Line Cinema, 2007, Ingles,
aventura, lançamento.
– O Senhor dos Anéis – A Sociedade do Anel, New Line
Cinema, 2001, Ingles, Aventura, ouro.
2 – Alterar os registros criados inserindo o titulo
original.
- The Golden Compass
- The Lord of the Rings – The Fellowship of the Ring
3 – Excluir todos os filmes do estudio New Line
Cinema
13
17/10/2009
A Cláusula HAVING
Às vezes, é mais interessante definir condições e
aplicá-las a grupos de que aplicá-las a tuplas. Por
exemplo, encontrar quais ID_DEPTO possuem média
(avg) do atributo VL-SALARIO maior que a média de
todas as tuplas da relação EMPREGADO.
Essa condição não se aplica a uma única tupla, mas
em cada grupo determinado pela cláusula group by.
Para exprimir tal consulta, deve-se usar a cláusula
having da SQL. Os predicados da cláusula having são
aplicados depois da formação dos grupos, assim
poderão ser usadas funções agregadas.
Observação: a cláusula WHERE é usada somente para
restringir as linhas que serão selecionadas para a
formação dos grupos, enquanto a cláusula HAVING é
usada para restringir os grupos já formados.
A Cláusula HAVING
select ID_DEPTO, avg(VL_SALARIO)
from empregado
group by ID_DEPTO
having avg(VL_SALARIO) > (select
avg(VL_SALARIO) from EMPREGADO)
14
17/10/2009
SUBQUERIES
Comando SELECT aninhado dentro de
outro Comando SELECT.
Formato geral:
SELECT coluna1, coluna2,..
FROM tabela 1
WHERE colunaN = (SELECT colunaM
FROM tabela 2
WHERE condição)
SUBQUERIES
Exemplo
SELECT nm_nome, id_depto, vl_salario
FROM EMPREGADO
WHERE vl_salario = (SELECT
MIN(vl_salario) FROM empregado);
15