Upload
anacri
View
5
Download
0
Embed Size (px)
Citation preview
1
BANCO DE DADOS
SQL(DML: SELECT, INSERT,
UPDATE, DELETE)
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 LIMITETabela na Base de dados Não há limites.Linhas por Tabelas Não há limitesColunas por tabelas 254Indices por tabelas Não há limitesTebelas ou views joined emuma query
Não há limites
Niveis de ninho de subqueries30Caracteres em um nome 255Colunas por índices 16
TIPOS DE DADOS(DATATYPES)
TIPO DESCRIÇÃO DO TIPO DE DADOChar(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 tabelaNumber(p,s) Numérico com sinal e ponto decimal,
sendo precisão de 1 a 38 dígitosRaw Binário - Variável até 255 bytesLong Raw Binário - Variável até 2 gigabytes - imagemDate 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 GerenteENAME = Nome do Empregado SAL = SalárioJOB = Função do Empregado COMM = ComissãoHIREDATE= Data de Admissão\Nasc. DEPTNO = Código Departamento
DEPT (DEPTNO, DNAME, LOC)DEPTNO = Código Departamento DNAME = Nome do Departamento LOC = Localização
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;
2
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 empWHERE job = ‘MANAGER’;
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 enameFROM empWhere 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,...,AnFrom r1,r2,...rmWhere 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 enameFROM empORDER 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, jobFROM empORDER BY job, ename
3
COMANDO DE COMPAÇÃO DE VALORES
Between
Faz uma pesquisa entre uma faixa de valores para um campo da tabela.
Not BetweenFaz uma pesquisa descartando uma faixa de valores.
Exemplo
Selecionar todos empregados que tem comissao entre 0 e 1000
Select * from empwhere comm between 0 and 1000;
Selecionar o nome dos gerentes com salario entre 1000 e 3000.
SELECT ENAME FROM EMPWHERE JOB='MANAGER' AND SAL between 1000
AND 3000;
INConsulta 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 EMPWHERE ENAME NOT LIKE ‘%FORD%’
Neste caso localiza todos os empregados que não possuem sobrenome “FORD” .
4
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
ExemploSelecionar 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
5
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
retorna a raiz quadrada de 25SQRT(25)SQRT
Se SAL maior que O retorna +1
Se SAL menor que 0 retorna -1
Se SaL igual a 0 retorna 0.
Sign(sal)Sign
Retorna o sal elevado ao quadrado.
Power(sal,2)Power
Retorna o resto da divisão de sal/comm
Mod(sal,comm)Mod
Sal é truncado para 2 dígitos após o ponto decimal.
TRUNC(SAL,2)Trunc
sal é arredondado para 2 casas apos o ponto decimal
ROUND(SAL,2)Round
NVL NVL(COMM,0) se o valor for nulo é substituído por 0
ExemploSelecionar 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
TRUNCA A DATA PARA A PRIMEIRA DATA DO 'FMT'
TRUNC(SYSDATE,FMT)TRUNC
RETORNA A DATA TOMANDO COMO PARAMETRO O 'FMT'
LAST_DAY(SYSDATE)LAST_DAY
PROCURA UMA SEXTA-FEIRA APÓS HIREDATE
NEXT_DAY(HIREDATE,'FRIDAY')
NEXT_DAY
CALCULA O NÚMERO DE MESES BETWEEN ENTRE AS DATAS
MONTHS_BETWEEN(HIREDATE,SYSDATE)
MONTHS_BETWEEN
ADICIONA 5 MESES NA DATA HIREDATE
ADD_MONTHS(HIREDATE,5)ADD_MONTHS
Funções de caracteres
RETORNA UMA PARTE DA STRING, PASSADO O CARACTER INICIAL E A QUANTIDADE A RETORNAR
SUBSTR(JOB,1,3)Substr
RETORNA A STRING EM MAIÚSCULO
UPPER(ENAME)Upper
RETORNA A STRING EM MINÚSCULO
LOWER(ENAME)Lower
RETORNA O NÚMERO DE CARACTERES QUE A STRING POSSUI
LENGTH(ENAME)length
RETORNA A STRING COM A PRIMEIRA LETRA EM MAIÚSCULO
INITCAP(ENAME)initcap
TRIM TRIM(JOB) retira os espaços em brancoda direita e esquerda
6
Funções de conversão
CONVERTE AS 3 ULTIMAS (EM FORMATO CHAR) PARA MUMBER.
TO_NUMBER(SUBSTR(‘$150’,2,3))
TO_NUMBER
CONVERTE COLUNAS DO TIPO CHAR PARA O FORMATO DE DATA.
TO_DATE(‘15/05/90’,’DD/MM/YY’)
TO_DATE
CONVERTE COLUNAS DO TIPO NUMBER E DATA PARA CHAR.
TO_CHAR(SYSDADE,’YY’)TO_CHAR
ResultadoExemploFunções
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 exprMIN ([DISTINCT | ALL] expr) - valor mínimo de minSUM ([DISTINCT | ALL] n) - soma os valores de n ignorando valores nulosNVL(expr, 0) - converte um valor nulo.
Exemplo
Select max(sal), Min(sal)from emp;
Exemplo
Selecionar a média de salário.
SELECT AVG(SAL)
FROM EMP;
Selecionar a quantidade de empregados.
SELECT COUNT(ENAME)
FROM EMP;
Selecionar total de salário pago pela empresa.
SELECT SUM(SAL)
FROM EMP;
Selecionar o maior salario entre os gerentes.
SELECT MAX(SAL)
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 empgroup 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 alunosgroup by curso_aluhaving aveg(idade) > 18;
7
Exemplos• Selecionar a mediA de salario dos departamentos
com media superiora 700.SELECT AVG(SAL), DEPTNO
FROM EMPGROUP BY DEPTNOHAVING AVG(SAL)>700;
• Selecionar a media salarial das funções com media inferior a 1550.
SELECT AVG(SAL), JOB FROM EMPGROUP BY JOB HAVING AVG(SAL)<1550;
Lista de Exercícios 2
Subconsultas (básica)
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’);
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;
8
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
Lista de Exercícios 3
SQL – Instruções de atualização
• SQL provê três instruções de atualização do conteúdo de tabelas previamente definidas e criadas pelo CREATE TABLE– INSERT
• serve para inserir uma ou mais linhas em uma tabela
– DELETE• serve para excluir uma ou mais linhas de uma tabela
– UPDATE• serve para alterar os dados de uma ou mais linhas de
uma tabela
INSERT INTO DEPTVALUES (50, ´TESOURARIA', 'TUBARAO',1000);
INSERT INTO DEPT(DNAME,DEPTNO)VALUES (´CAIXA',60);
Inserindo dados em Tabelas
ATUALIZANDO REGISTROS
Alterar o Cardo do empregado Martins para Manager:UPDATE EMPSET JOB='MANAGER'WHERE ENAME='MARTIN'; (Where é opcional)
ATUALIZANDO VÁRIOS REGISTROS
Alterar o nome da Função SALESMAN para VENDEDOR para todos os empregados:UPDATE EMPSET JOB='VENDEDOR'WHERE JOB='SALESMAN';
Atualizando Dados em Tabelas
Apagar o empregado Martins:
DELETE FROM EMPWHERE ENAME='MARTINS'; (Where é opcional)
Apagar todos os empregados que são do departamento 20:
DELETE FROM DEPTWHERE DEPTNO=20;
Deletando Dados nas Tabelas
9
Referências Bibliográficas
• KORTH, Henry F. & SILBERSCHATZ, Abraham. Sistemas de Bancos de Dados, São Paulo. Ed. Makron Books, 1999.
• HEUSER, Carlos Alberto. Projeto de Banco de Dados. 4ª Edição. Ed. Sagra, 2001.
• FERNANDES, Lúcia. Oracle 9i Para Desenvolvedores Oracle Developer 6i Curso Completo. Ed. Axcel. 2002.
• ABBEY, Michael. Oracle: guia do usuário. São Paulo: Markon Books, 1997.