A ULA 4
SQL
Prof: Rômulo Lima
Linguagem de Prog. de Banco de Dados
C LÁUSULAS
As cláusulas são condições de modificação utilizadas para definir os dados que deseja selecionar ou modificar em uma consulta.
FROM - Utilizada para especificar a tabela que se vai selecionar os registros
WHERE – Utilizada para especificar as condições que devem reunir os registros que serão
selecionados.
GROUP BY – Utilizada para separar os registros selecionados em grupos específicos. Normalmente a cláusula GROUP BY é utilizada junto com
expressões de agregação.
C LÁUSULAS
HAVING – Utilizada para expressar a condição que deve satisfazer cada grupo (GROUP BY).
ORDER BY – Utilizada para ordenar os registros selecionados com uma ordem especifica.
DISTINCT – Utilizada para selecionar dados sem
repetição.
MAIS EXEMPLOS...
create table empregado(
id integer,
cargo varchar(255), nome varchar(255), idade integer,
constraint pk_empregado primary key (id) );
OBTER A QUANTIDADE DE EMPREGADOS POR CARGO QUE TENHAM IDADE MAIOR QUE 25.
- select count(*), cargo from empregado group by cargo having idade > 25; VAI FUNCIONAR ? ERRO: coluna "empregado.idade" deve aparecer na cláusula GROUP BY ou ser utilizada em uma
função de agregação
LINE 1: ...nt(*), cargo from empregado group by cargo having idade > 25...
- select count(*), cargo from empregado where idade > 25 group by cargo; VAI FUNCIONAR ?
OBTER A QUANTIDADE DE EMPREGADOS POR CARGO QUE TENHAM IDADE MAIOR QUE 25, DESDE QUE EXISTA AO MENOS DOIS CARGOS IGUAIS.
- select count(*), cargo from empregado where idade > 25 group by cargo having count(*) >= 2;
id cargo nome idade
1 Desenvolvedor Jose 26
2 Desenvolvedor Maria 25
3 Testador Fabiana 26
4 Desenvolvedor Rafael 30
5 Analista Denise 35
ORDER BY
ORDER BY é opcional.
Entretanto, se você quiser exibir seus dados na ordem classificada, você deve utilizar ORDER BY.
O padrão ordem de classificação é ascendente (A a Z, 0 a 9)
SELECT Sobrenome, Nome FROM Funcionários ORDER BY Sobrenome;
SELECT Sobrenome, Nome FROM Funcionários
ORDER BY Sobrenome ASC;
ORDER BY
Para classificar em ordem descendente (Z a A, 9 a 0), adicione a palavra reservada DESC ao final de cada campo
SELECT Sobrenome, Salário FROM Funcionários ORDER BY Salário DESC, Sobrenome;
SELECT Sobrenome, Salário FROM Funcionários
ORDER BY 2 DESC, 1;
DISTINCT
Em uma tabela, algumas das colunas podem conter valores duplicados
A palavra chave DISTINCT pode ser usada para retornar apenas valores distintos (diferentes).
SELECT DISTINCT nome_coluna(s) FROM nome_tabela
id cargo nome idade
1 Desenvolvedor Jose 26
2 Desenvolvedor Maria 25
3 Testador Fabiana 26
4 Desenvolvedor Rafael 30
5 Analista Denise 35
6 Analista Jose 40
select distinct cargo from empregado
select distinct cargo, nome from empregado
O PERADORES R ELACIONAIS
BETWEEN – Utilizado para especificar um intervalo de valores.
LIKE – Utilizado na comparação de um modelo e para especificar registros de um banco de dados.
"Like" + extensão % significa buscar todos resultados com o mesmo início da extensão.
IN - Utilizado para verificar se o valor procurado
está dentro de uma lista. Ex.: valor IN (1,2,3,4).
O PERADOR BETWEEN
O operador BETWEEN serve para indicar um determinado intervalo de valores dentro de uma query.
SELECT *
FROM FUNCIONARIOS
WHERE CODIGO >= 8 AND CODIGO <= 9 *EQUIVALENTES
SELECT *
FROM FUNCIONARIOS
WHERE CODIGO BETWEEN 8 AND 9;
O PERADOR IN
O operador IN funciona como uma “sequência”de
“Or’s”.
Ou seja, o operador IN retorna os registros onde a condição/campo que está sendo comparado seja igual a algum dos parâmetros.
SELECT * FROM FUNCIONARIOS
WHERE CODIGO IN (1,2,3)
NOT BETWEEN/ NOT ... IN
SELECT * FROM empregado WHERE idade NOT BETWEEN 20 AND 25;
SELECT * FROM empregado WHERE (idade NOT BETWEEN 20 AND 25) AND NOT id IN (1,2,3);
id cargo nome idade
1 Desenvolvedor Jose 26
2 Desenvolvedor Maria 25
3 Testador Fabiana 26
4 Desenvolvedor Rafael 30
5 Analista Denise 35
6 Analista Jose 40
O PERADOR LIKE
Com este operador, podemos comparar cadeias de caracteres utilizando padrões de comparação
'ABC%': Todas as cadeias que começam por 'ABC'.
Por exemplo, 'ABCD' e 'ABCABC' iriam satisfazer a condição
'%XYZ': Todas as cadeias que terminam em 'XYZ'.
Por exemplo, 'WXYZ' e 'ZZXYZ' iriam satisfazer a condição.
'%AN%': Todas as cadeias que contêm o padrão 'AN'
em qualquer local. Por exemplo, 'LOS ANGELES' e
'SAN FRANCISCO' iriam satisfazer a condição.
O PERADOR LIKE
SELECT "nome_coluna"
FROM "nome_tabela"
WHERE "nome_coluna" LIKE {PATTERN}
SELECT *
FROM Store_Information
WHERE store_name LIKE '%AN%'
C LÁUSULAS X O PERADORES
As cláusulas LIKE, IN, IS NULL podem ser misturadas aos operadores AND, OR e NOT nas equações de junção (relacionamento entre tabelas).
Exemplo: Listar os departamentos que têm projetos com número superior a 99 e localizados em RJ ou SP ordenados por nome de departamento.
SELECT Departamento.Nome
FROM Departamento, Projeto
WHERE Projeto.Local IN (‘RJ’, ‘SP’) AND Projeto.Numero > 99
AND Projeto.Num_Dep = Departamento.Codigo
ORDER BY Departamento.Nome
C LÁUSULAS X O PERADORES
E como ficaria?
Listar os departamentos que têm projetos que o nome comece com software ou termine hardware e localizados em RJ ou SP ordenados por nome de departamento.
SELECT Departamento.Nome
FROM Departamento, Projeto
WHERE Projeto.Local IN (‘RJ’, ‘SP’)
AND Projeto.Nome like ‘software%’
OR Projeto.Nome like ‘%hardware’
AND Projeto.Num_Dep = Departamento.Codigo
ORDER BY Departamento.Nome
C ONSULTAS ENCADEADAS
O resultado de uma consulta é utilizado por outra consulta, de forma encadeada e no mesmo comando SQL
Como ficaria?
Listar os departamentos que tenham qualquer projeto no RJ.
SELECT Departamento.Nome
FROM Departamento, Projeto WHERE Projeto.Local = RJ
AND Projeto.Num_Dep = Departamento.Codigo
OU
SELECT Departamento.Nome
FROM Departamento
WHERE Departamento.Codigo IN (
Select Projeto.Num_Dep
FROM Projeto
WHERE Projeto.Local = ‘RJ’
)
F UNÇÕES DE CONVERSÃO
Converter maiúsculas em minúsculas para strings de caractere
LOWER (‘SQL Course’)
Resultado: sql course
UPPER (‘SQL Course’)
Resultado: SQL COURSE
Exemplo:
select cliente, compra from ComprasDoMes where
UPPER (cliente) = UPPER ('maria')
F UNÇÕES DE MANIPULAÇÃO
SUBSTR (‘String’, 1, 3)
Resultado: Str
LENGTH (‘String’)
Resultado: 6
Exemplos:
select LENGTH(cliente), cliente, compra from
ComprasDoMes WHERE SUBSTR(cliente,1,2) = 'Ma’