0% acharam este documento útil (0 voto)
29 visualizações46 páginas

Aula1 SQL Revisao Select

O documento descreve comandos SQL como SELECT, WHERE, ORDER BY e funções como ROUND, TRUNC, SUBSTR. O documento lista tabelas EMP, DEPT e SALGRADE e fornece exemplos de consultas SQL.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
29 visualizações46 páginas

Aula1 SQL Revisao Select

O documento descreve comandos SQL como SELECT, WHERE, ORDER BY e funções como ROUND, TRUNC, SUBSTR. O documento lista tabelas EMP, DEPT e SALGRADE e fornece exemplos de consultas SQL.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 46

SISTEMAS DE INFORMAÇÃO

BANCO DE DADOS 2

SQL
(Select)

PROF: EDSON THIZON


DML
É a parte mais ampla da SQL. Permite
pesquisar, alterar, incluir e deletar dados da
base de dados. São quatro as sentenças mais
importantes da DML:
• SELECT: permite a pesquisa de dados;
• UPDATE: permite a atualização de dados;
• DELETE: permite a deleção de dados;
• INSERT: permite a inclusão de dados.
LIMITES DO ORACLE RDBMS

ITEM LIMITE
Tabela na Base de dados Não há limites.
Linhas por Tabelas Não há limites
Colunas por tabelas 254
Indices por tabelas Não há limites
Tebelas ou views joined em Não há limites
uma query
Niveis de ninho de subqueries 30
Caracteres em um nome 255
Colunas por índices 16
TIPOS DE DADOS(DATATYPES)
TIPO DESCRIÇÃO DO TIPO DE DADO
Char(n) Tamanho Fixo, pode conter uma seqüência de 1 a 255
bytes alfanuméricos;
Varchar2(n) Tamanho Variável, pode conter uma seqüência de 1 a
2000 bytes - alfanuméricos.
Long Tamanho Variável até 2 Gigabytes alfanuméricos
nota : só pode existir uma coluna long em cada tabela
Number(p,s) Numérico com sinal e ponto decimal,
sendo precisão de 1 a 38 dígitos
Raw Binário - Variável até 255 bytes
Long Raw Binário - Variável até 2 gigabytes - imagem
Date Data c/ hora, minuto e segundo
Tabelas utilizadas nos exemplos:

EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL,


COMM, DEPTNO);
EMPNO = Código do Empregado MGR = Código do Gerente
ENAME = Nome do Empregado SAL = Salário
JOB = Função do Empregado COMM = Comissão
HIREDATE= Data de Admissão\Nascimento DEPTNO = Código Departamento

DEPT (DEPTNO, DNAME)


DEPTNO = Código Departamento DNAME = Nome do Departamento

SALGRADE (GRADE, LOSAL, HISAL)


GRADE = Nível do Salário LOSAL = Menor Salário no Nível HISAL = Maior Salário no Nível
Verificando estrutura da tabela

Desc EMP;

Desc DEPT;

Desc SALGRADE;
SELECT
- Lista os atributos desejados como resultados de uma consulta;
- Corresponde a operação de projeção da álgebra relacional;
- Lista de atributos pode ser substituído por “*” (todos);

From
- Lista de relação (tabelas) a serem usados na execução da
expressão;

WHERE
-São definidos critérios de pesquisa envolvendo atributos das
relações (tabelas) definidas na cláusula from ;
-Corresponde ao predicado da operação de seleção da álgebra
relacional;
-Comando opcional;
Exemplos:

1- Selecionar todos os atributos de cada empregado:


SELECT *
FROM emp;

2- Selecionar todos os empregados com emprego de Gerente


(Manager) e ordenado por nome;

SELECT *
FROM emp
WHERE job = ‘MANAGER’;

Observe que o Oracle é sensitivo quanto a letras maiúsculas e


minúsculas, e veja como os nomes dos empregados foram
registrados.
Comparação de Valores
• = Igual
• > maior
• >= Maior ou igual
• < Menor
• <= Menor ou igual
• != Não Igual
• <> Diferente

• And E
• Or OU
3- Selecionar os nomes de todos os empregados Gerentes com
salários maior que R$ 500,00

SELECT ename
FROM emp
Where job = ‘MANAGER’ and sal > 500;

4- Selecionar o nome dos empregados do departamento 10


com salario maior que 600.

SELECT ENAME
FROM EMP
WHERE DEPTNO=10 AND SAL>600;
Order By

- Especifica a seqüência de ordenação da tabela criada pela


consulta;
- Comando opcional;
- Qualificador opcional : asc / desc.

Select A1, A2,...,An


From r1,r2,...rm
Where P

Onde A são os campos a serem selecionados, R são as tabelas, e


P é uma condição.
5- Selecionar o nome do empregado em ordem alfabética:

SELECT ename
FROM emp
ORDER BY ename;

6- Selecionar para cada empregado o seu nome e a sua função


ordenado primeiramente por função e depois por empregado:

SELECT ename, job


FROM emp
ORDER BY job, ename
COMANDO DE COMPAÇÃO DE VALORES

Between

Faz uma pesquisa entre uma faixa de valores para um


campo da tabela.

Not Between
Faz uma pesquisa descartando uma faixa de valores.
Exemplo

Selecionar todos empregados que tem comissao entre 0 e 1000

Select *
from emp
where comm between 0 and 1000;

Selecionar o nome dos gerentes com salario entre 1000 e


3000.

SELECT ENAME
FROM EMP
WHERE JOB='MANAGER' AND SAL between 1000
AND 3000;
IN
Consulta a presença de um campo em um conjunto de
valores

NOT IN

Consulta a não presença de um campo em um conjunto


de valores
Exemplo

Selecionar o nome dos empregados com códigos 7499, 7566,


7788.
SELECT EMPNO, ENAME
FROM EMP
WHERE EMPNO IN (7566,7788, 7499);

Selecionar o nome dos empregados que não possuem os


códigos 7499, 7566, 7788.
SELECT EMPNO, ENAME
FROM EMP
WHERE EMPNO IN (7566,7788, 7499);
Like

Compara a existência de uma caracter em uma


determinada posição em uma string.
‘_‘ Testa a existência de um caracter não nulo na posição;
‘%’ representa qualquer seqüência de n caracteres.

Not Like

Compara a não existência de um caracter em uma


determinada posição em uma string.
Exemplo

Selecionar o nome e código dos empregados que o nome


inicia com a letra 'C'.
SELECT EMPNO,ENAME
FROM EMP
WHERE ENAME LIKE 'C%';

SELECT *
FROM EMP
WHERE ENAME NOT LIKE ‘%FORD%’

Neste caso localiza todos os empregados que não possuem


sobrenome “FORD” .
Is Null

Verifica se o valor do campo comparado é zero ou


vazio;

Is Not Null

Verifica se o valor do campo comparado não é


zero ou vazio;
Exemplo

Selecionar o nome, código e salario dos empregados que não


possuem comm.
SELECT EMPNO,ENAME,SAL
FROM EMP
WHERE COMM IS NULL;

E os que possuem:
SELECT EMPNO,ENAME,SAL
FROM EMP
WHERE COMM IS NOT NULL;
Operadores Aritméticos

+ adição
- Subtração
* Multiplicação
/ Divisão
Exemplo
Selecionar o nome dos empregados, seu salário e o
salário mais 300:
Select ename, sal, sal + 300
from emp

Selecionar o nome dos empregados, seu salário e 10 %


do salário:
Select ename, sal, sal *0.10
from emp
Usando Coluna Alias

Select ename As nome, sal salario


from emp;

Nome salario
------------------------- --------------
........
Usando o comando de
concatenação
Concatena colunas ou caracteres com outras colunas
(||)

Exemplo
Select ename ||job as “Empregado”
from emp
Eliminando Linhas Duplicadas
Para Eliminar as linhas duplicadas use a palavra DISTINCT na
cláusula SELECT.

Exemplo:
Select Distinct deptno
form emp;
Lista de Exercícios 1
Funções Numéricas
Round ROUND(SAL,2) sal é arredondado para 2
casas apos o ponto
decimal
Trunc TRUNC(SAL,2) Sal é truncado para 2 dígitos
após o ponto decimal.
Mod Mod(sal,comm) Retorna o resto da divisão de
sal/comm
Power Power(sal,2) Retorna o sal elevado ao
quadrado.
Sign Sign(sal) Se SAL maior que O retorna
+1
Se SAL menor que 0 retorna
-1
Se SaL igual a 0 retorna 0.
SQRT SQRT(25) retorna a raiz quadrada de 25

NVL NVL(COMM,0) se o valor for nulo é substituído por 0


Exemplo
Selecionar o nome dos empregados, seu salário e o
salário mais 300 com duas casas decimais:
Select ename, round(sal,2), round(sal + 300,2)
from emp

Selecionar o nome dos empregados, seu salário e 10 %


do salário sem nenhuma casa decimal:
Select ename, sal, trunc(sal *0.10)
from emp
Funções de data
ADD_MONTHS ADD_MONTHS(HIREDATE,5) ADICIONA 5 MESES NA
DATA HIREDATE

MONTHS_BETWEEN MONTHS_BETWEEN(HIRED CALCULA O NÚMERO DE


ATE,SYSDATE) MESES BETWEEN
ENTRE AS DATAS

NEXT_DAY NEXT_DAY(HIREDATE,'FRID PROCURA UMA SEXTA-


AY') FEIRA APÓS HIREDATE

LAST_DAY LAST_DAY(SYSDATE) RETORNA A DATA


TOMANDO COMO
PARAMETRO O 'FMT'

TRUNC TRUNC(SYSDATE,FMT) TRUNCA A DATA PARA A


PRIMEIRA DATA DO
'FMT'
Funções de caracteres
INITCAP(ENAME) RETORNA A STRING COM A
initcap PRIMEIRA LETRA EM
MAIÚSCULO
LENGTH(ENAME) RETORNA O NÚMERO DE
length CARACTERES QUE A
STRING POSSUI

LOWER(ENAME) RETORNA A STRING EM


Lower MINÚSCULO

UPPER(ENAME) RETORNA A STRING EM


Upper MAIÚSCULO

SUBSTR(JOB,1,3) RETORNA UMA PARTE DA


Substr STRING, PASSADO O
CARACTER INICIAL E A
QUANTIDADE A RETORNAR

TRIM TRIM(JOB) retira os espaços em branco


da direita e esquerda
Funções de conversão
Funções Exemplo Resultado

TO_CHAR TO_CHAR(SYSDADE,’YY’) CONVERTE COLUNAS DO TIPO


NUMBER E DATA PARA
CHAR.

TO_DATE TO_DATE(‘15/05/90’,’DD/MM/ CONVERTE COLUNAS DO TIPO


YY’) CHAR PARA O FORMATO DE
DATA.

TO_NUMBER TO_NUMBER(SUBSTR(‘$150’, CONVERTE AS 3 ULTIMAS (EM


2,3)) FORMATO CHAR) PARA
MUMBER.
FUNÇÕES
AVG ([DISTINCT | ALL] n) - valor médio de n, ignorando valores nulos.

COUNT ([DISTINCT | ALL] expr * ) - número de vezes que a expressão de


número EXPR avalia algo diferente de NULO. '*' faz com que COUNT conte todas
as linhas selecionadas, incluindo duplicadas e linhas com nulos.

MAX ([DISTINCT | ALL] expr) - valor máximo de expr


MIN ([DISTINCT | ALL] expr) - valor mínimo de min
SUM ([DISTINCT | ALL] n) - soma os valores de n ignorando valores nulos
NVL(expr, 0) - converte um valor nulo.

Exemplo

Select max(sal), Min(sal)


from emp;
Exemplo
Selecionar a média de Selecionar total de salário pago
salário. pela empresa.
SELECT AVG(SAL) SELECT SUM(SAL)
FROM EMP; FROM EMP;

Selecionar a quantidade de Selecionar o maior salario entre os


empregados. gerentes.
SELECT SELECT MAX(SAL)
COUNT(ENAME)
FROM EMP
FROM EMP;
WHERE JOB='MANAGER';
GROUP BY

Forma grupos com as tuplas da tabela especificada na


cláusula from, que possuem o mesmo valor no atributo
especificado na cláusula grupo by;
Para ter resultado em ordem, deve ser especificado
também a clausula order by(após a clausula group by).

Exemplo

Select deptno, count(empno)


from emp
group by deptno;

REGRA PARA UTILIZAR FUNÇÕES DE GRUPO: Se você incluir uma função de grupo em um
comando SELECT, você não pode selecionar resultados individuais a menos que a coluna
individual apareça na cláusula GROUP BY.
Exemplos
Selecionar a média salarial de cada departamento.
- SELECT AVG(SAL), DEPTNO
FROM EMP
GROUP BY DEPTNO;
Selecionar a média salarial de cada profissão.
- SELECT AVG(SAL), JOB
FROM EMP
GROUP BY JOB;
HAVING

Having é para os grupos o que o where é para as linhas.


Em outras palavras, é utilizado para eliminar grupos, onde
where é utilizado para eliminar linhas.

Exemplo:
Select curso_alu, avg(idade)
from alunos
group by curso_alu
having aveg(idade) > 18;
Exemplos
• Selecionar a mediA de salario dos departamentos
com media superiora 700.
SELECT AVG(SAL), DEPTNO
FROM EMP
GROUP BY DEPTNO
HAVING AVG(SAL)>700;
• Selecionar a media salarial das funções com
media inferior a 1550.
SELECT AVG(SAL), JOB
FROM EMP
GROUP BY JOB
HAVING AVG(SAL)<1550;
Lista de Exercícios 2
JUNÇÕES (JOIN)
EQUI-JOIN

O relacionamento entre a tabela EMP e a tabela DEPT é um EQUI-


JOIN, onde os valores na coluna DEPTNO em ambas as tabelas
são iguais. O operador de comparação ' = ' é utilizado.

A condição de Join é especificada na cláusula WHERE.


Para juntar as duas tabelas EMP e DEPT, digite:

SELECT ENAME, JOB, DNAME


FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
Cont...
Caso deseje-se listar colunas que são ambíguas para ambas as
tabelas, deve-se especificar no nome da tabela ANTES DO
nome da coluna desejada. Exemplo:

SELECT DEPT.DEPTNO, ENAME, JOB, DNAME


FROM EMP, DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
ORDER BY DEPT.DEPTNO;
Cont..
NON- EQUI-JOIN

O relacionamento entre EMP e SALGRADE caracteriza um


NON-EQUI-JOIN, onde nenhuma coluna em EMP
corresponde diretamente a uma coluna em SALGRADE.
Neste caso, um operador diferente do = precisa ser
utilizado. No caso abaixo utilizamos o BETWEEN. Para
determinar a qual faixa salarial um determinado
empregado se encaixa, usamos:

SELECT E.ENAME, E.SAL, S.GRADE


FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;
DICA:

o número de joins = número


de tabelas - 1
Subconsultas
Exemplos:

1- Empregados que possuem salário maior do que a média:

SELECT ENAME, SAL


FROM EMP
WHERE SAL > (SELECT AVG(SAL) FROM EMP);
Cont...
Exemplos:

2- Empregados que possuem salário menor do que a média


dos MANAGER com seu respectivo cargo:

SELECT ENAME, SOB, SAL


FROM EMP
WHERE SAL < (SELECT AVG(SAL) FROM EMP
WHERE JOB = ‘MANAGER’);
Lista de Exercícios 3
Referência Bibliográfica

• FERNANDES, Lúcia. Oracle 9i para


desenvolvedores : Oracle developer 6i curso
completo. Rio de Janeiro : Axcel Books, 2002.
1614 p.

Você também pode gostar