SlideShare uma empresa Scribd logo
1 de 9
Baixar para ler offline
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 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
uma query
Não há limites
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ãoNasc. 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 emp
WHERE 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 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
3
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” .
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
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
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
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
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,'FRID
AY')
NEXT_DAY
CALCULA O NÚMERO DE
MESES BETWEEN
ENTRE AS DATAS
MONTHS_BETWEEN(HIRED
ATE,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 branco
da 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 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
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 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;
7
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
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 DEPT
VALUES (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 EMP
SET 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 EMP
SET JOB='VENDEDOR'
WHERE JOB='SALESMAN';
Atualizando Dados em Tabelas
Apagar o empregado Martins:
DELETE FROM EMP
WHERE ENAME='MARTINS'; (Where é opcional)
Apagar todos os empregados que são do departamento 20:
DELETE FROM DEPT
WHERE 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.

Mais conteúdo relacionado

Mais procurados

Mais procurados (14)

Aula 7 sql - select
Aula 7   sql - selectAula 7   sql - select
Aula 7 sql - select
 
Principais instruções em sql
Principais instruções em sqlPrincipais instruções em sql
Principais instruções em sql
 
Apostila excel básico
Apostila excel básicoApostila excel básico
Apostila excel básico
 
Excelbsico 090720103048-phpapp02
Excelbsico 090720103048-phpapp02Excelbsico 090720103048-phpapp02
Excelbsico 090720103048-phpapp02
 
Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1
 
Excel Básico
Excel BásicoExcel Básico
Excel Básico
 
12 SQL - Junções / Join
12 SQL - Junções / Join12 SQL - Junções / Join
12 SQL - Junções / Join
 
Funções integradas no sql
Funções integradas no sql Funções integradas no sql
Funções integradas no sql
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
Formulas excel
Formulas excelFormulas excel
Formulas excel
 
Inner Join
Inner JoinInner Join
Inner Join
 
Consultas básicas em SQL
Consultas básicas em SQLConsultas básicas em SQL
Consultas básicas em SQL
 
Apostila excel-avancado-senac
Apostila excel-avancado-senacApostila excel-avancado-senac
Apostila excel-avancado-senac
 
07 Consultando os dados de uma tabela
07 Consultando os dados de uma tabela07 Consultando os dados de uma tabela
07 Consultando os dados de uma tabela
 

Destaque

Educación del siglo xxi a subir a a slideshare
Educación del siglo xxi a subir a a slideshareEducación del siglo xxi a subir a a slideshare
Educación del siglo xxi a subir a a slideshareLola Sarango
 
Lecture 06 transistorremodel
Lecture 06 transistorremodelLecture 06 transistorremodel
Lecture 06 transistorremodelIsmael Cayo Apaza
 
Contents page conventions
Contents page conventionsContents page conventions
Contents page conventionsJoe Hadfield
 
SmartBits - Soluciones de negocio - www.smartbits.es
SmartBits - Soluciones de negocio - www.smartbits.esSmartBits - Soluciones de negocio - www.smartbits.es
SmartBits - Soluciones de negocio - www.smartbits.essmartbits1
 
College magazine evaluation
College magazine evaluationCollege magazine evaluation
College magazine evaluationshakeira16
 
Q media pack2016
Q media pack2016Q media pack2016
Q media pack2016shakeira16
 
FIAA Training - Forensic Arson Analysis and Process
FIAA Training - Forensic Arson Analysis and ProcessFIAA Training - Forensic Arson Analysis and Process
FIAA Training - Forensic Arson Analysis and ProcessChemistry Matters Inc.
 
Lecture 07 transistor re model
Lecture 07 transistor re modelLecture 07 transistor re model
Lecture 07 transistor re modelIsmael Cayo Apaza
 

Destaque (13)

Software Libre
Software LibreSoftware Libre
Software Libre
 
3.0
3.03.0
3.0
 
Educación del siglo xxi a subir a a slideshare
Educación del siglo xxi a subir a a slideshareEducación del siglo xxi a subir a a slideshare
Educación del siglo xxi a subir a a slideshare
 
RESUME2016-marcie1
RESUME2016-marcie1RESUME2016-marcie1
RESUME2016-marcie1
 
Vigural
ViguralVigural
Vigural
 
Lecture 06 transistorremodel
Lecture 06 transistorremodelLecture 06 transistorremodel
Lecture 06 transistorremodel
 
Contents page conventions
Contents page conventionsContents page conventions
Contents page conventions
 
SmartBits - Soluciones de negocio - www.smartbits.es
SmartBits - Soluciones de negocio - www.smartbits.esSmartBits - Soluciones de negocio - www.smartbits.es
SmartBits - Soluciones de negocio - www.smartbits.es
 
College magazine evaluation
College magazine evaluationCollege magazine evaluation
College magazine evaluation
 
Q media pack2016
Q media pack2016Q media pack2016
Q media pack2016
 
FIAA Training - Forensic Arson Analysis and Process
FIAA Training - Forensic Arson Analysis and ProcessFIAA Training - Forensic Arson Analysis and Process
FIAA Training - Forensic Arson Analysis and Process
 
Lecture 07 transistor re model
Lecture 07 transistor re modelLecture 07 transistor re model
Lecture 07 transistor re model
 
Parcial2 paredes mariajose
Parcial2 paredes mariajoseParcial2 paredes mariajose
Parcial2 paredes mariajose
 

Semelhante a SQL DML, Funções e Consultas Avançadas

Apostila de sql oracle (pt br)
Apostila de sql   oracle (pt br)Apostila de sql   oracle (pt br)
Apostila de sql oracle (pt br)Sandro Freitas
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosMarcos Thomaz
 
LabMM4 (T08 - 12/13) - SQL continuação
LabMM4 (T08 - 12/13) - SQL continuaçãoLabMM4 (T08 - 12/13) - SQL continuação
LabMM4 (T08 - 12/13) - SQL continuaçãoCarlos Santos
 
BD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub SelectsBD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub SelectsRodrigo Kiyoshi Saito
 
BDI - Aula 09 - SQL e Algebra Relacional
BDI - Aula 09 - SQL e Algebra RelacionalBDI - Aula 09 - SQL e Algebra Relacional
BDI - Aula 09 - SQL e Algebra RelacionalRodrigo Kiyoshi Saito
 
3º Fast Show - SQL Analytics
3º Fast Show - SQL Analytics3º Fast Show - SQL Analytics
3º Fast Show - SQL Analyticsqualidatavix
 
A06_BD_Linguagem_SQL_SELECT.pdf
A06_BD_Linguagem_SQL_SELECT.pdfA06_BD_Linguagem_SQL_SELECT.pdf
A06_BD_Linguagem_SQL_SELECT.pdfssuser4051be1
 
Revisao_SQL_Parte_I.ppt
Revisao_SQL_Parte_I.pptRevisao_SQL_Parte_I.ppt
Revisao_SQL_Parte_I.ppta08008
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL BásicoIgor Alves
 
Introdução a Banco de Dados (Parte 3)
Introdução a Banco de Dados (Parte 3)Introdução a Banco de Dados (Parte 3)
Introdução a Banco de Dados (Parte 3)Mario Sergio
 

Semelhante a SQL DML, Funções e Consultas Avançadas (20)

BD I - Aula 10 A - Introducao a SQL
BD I - Aula 10 A - Introducao a SQLBD I - Aula 10 A - Introducao a SQL
BD I - Aula 10 A - Introducao a SQL
 
Aula 300309
Aula 300309Aula 300309
Aula 300309
 
Aula 12 banco de dados
Aula 12   banco de dadosAula 12   banco de dados
Aula 12 banco de dados
 
06 Trabalhando com registros
06 Trabalhando com registros06 Trabalhando com registros
06 Trabalhando com registros
 
Apostila de sql oracle (pt br)
Apostila de sql   oracle (pt br)Apostila de sql   oracle (pt br)
Apostila de sql oracle (pt br)
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos Comandos
 
Apostila de sql
Apostila de sqlApostila de sql
Apostila de sql
 
Apostila de sql_-_oracle__pt_br_
Apostila de sql_-_oracle__pt_br_Apostila de sql_-_oracle__pt_br_
Apostila de sql_-_oracle__pt_br_
 
Consultas SQL
Consultas SQLConsultas SQL
Consultas SQL
 
LabMM4 (T08 - 12/13) - SQL continuação
LabMM4 (T08 - 12/13) - SQL continuaçãoLabMM4 (T08 - 12/13) - SQL continuação
LabMM4 (T08 - 12/13) - SQL continuação
 
Agbd aula4 sql_ddl
Agbd aula4 sql_ddlAgbd aula4 sql_ddl
Agbd aula4 sql_ddl
 
BD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub SelectsBD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub Selects
 
BDI - Aula 09 - SQL e Algebra Relacional
BDI - Aula 09 - SQL e Algebra RelacionalBDI - Aula 09 - SQL e Algebra Relacional
BDI - Aula 09 - SQL e Algebra Relacional
 
3º Fast Show - SQL Analytics
3º Fast Show - SQL Analytics3º Fast Show - SQL Analytics
3º Fast Show - SQL Analytics
 
A06_BD_Linguagem_SQL_SELECT.pdf
A06_BD_Linguagem_SQL_SELECT.pdfA06_BD_Linguagem_SQL_SELECT.pdf
A06_BD_Linguagem_SQL_SELECT.pdf
 
Revisao_SQL_Parte_I.ppt
Revisao_SQL_Parte_I.pptRevisao_SQL_Parte_I.ppt
Revisao_SQL_Parte_I.ppt
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
 
08 sql - parte 02
08   sql - parte 0208   sql - parte 02
08 sql - parte 02
 
Introdução a Banco de Dados (Parte 3)
Introdução a Banco de Dados (Parte 3)Introdução a Banco de Dados (Parte 3)
Introdução a Banco de Dados (Parte 3)
 
MySQL Query Optimization
MySQL Query OptimizationMySQL Query Optimization
MySQL Query Optimization
 

SQL DML, Funções e Consultas Avançadas

  • 1. 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 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 uma query Não há limites 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ãoNasc. 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. 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 emp WHERE 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 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
  • 3. 3 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” .
  • 4. 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 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
  • 5. 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 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 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,'FRID AY') NEXT_DAY CALCULA O NÚMERO DE MESES BETWEEN ENTRE AS DATAS MONTHS_BETWEEN(HIRED ATE,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 branco da direita e esquerda
  • 6. 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 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 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 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;
  • 7. 7 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 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. 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 DEPT VALUES (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 EMP SET 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 EMP SET JOB='VENDEDOR' WHERE JOB='SALESMAN'; Atualizando Dados em Tabelas Apagar o empregado Martins: DELETE FROM EMP WHERE ENAME='MARTINS'; (Where é opcional) Apagar todos os empregados que são do departamento 20: DELETE FROM DEPT WHERE DEPTNO=20; Deletando Dados nas Tabelas
  • 9. 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.