Você está na página 1de 152

1 Conceitos bsicos em SQL

Revisao - SQL - Prof. George Hamilton

Linguagem SQL
A linguagem SQL prpria para a realizao de operaes como recuperar dados (consulta), atualizar ou eliminar dados, alterar colunas de tabelas, criar e eliminar tabelas e qualquer outras modificaes que se deseje fazer em um banco de dados relacional.
Revisao - SQL - Prof. George Hamilton

Comandos da SQL
Os comandos SQL podem ser divididos em quatro grupos:
1. 2. 3. 4. Seleo/Consulta; Definio de dados; Manipulao de dados; Controle de dados.

Revisao - SQL - Prof. George Hamilton

O Comando SELECT
 Recupera informaes do banco de dados;  Utilizado para realizar consultas.

Revisao - SQL - Prof. George Hamilton

Operaes usando o SELECT


SELEO PROJEO UNIO INTERSEO DIFERENA

JUNO

a1 b1 a2 b1 a3 b2

b1 c1 b2 c2 b3 c3

a1 b1 c1 a2 b1 c1 a3 b2 c2

Revisao - SQL - Prof. George Hamilton

Sintaxe bsica do SELECT


SELECT [DISTINCT] {*, coluna [apelido],} FROM tabela;

 SELECT identifica quais colunas sero recuperadas  FROM identifica as tabelas das quais as colunas sero recuperadas

Revisao - SQL - Prof. George Hamilton

Selecionando todas as colunas


SQL> SELECT * FROM dept;

DEPTNO --------10 20 30 40

DNAME -------------ACCOUNTING RESEARCHING SALES OPERATIONS

LOC --------------NEW YORK DALLAS CHICAGO BOSTON

Revisao - SQL - Prof. George Hamilton

Selecionando colunas especficas


SQL> SELECT deptno, dname FROM dept;

DEPTNO --------10 20 30 40

DNAME -------------ACCOUNTING RESEARCHING SALES OPERATIONS

Revisao - SQL - Prof. George Hamilton

Expresses Aritmticas
possvel criar expresses sobre os campos do tipo numrico e data utilizando os operadores aritmticos.
Operador + * / Descrio Soma Subtrao Multiplicao
Revisao - SQL - Prof. George Hamilton

Diviso

Usando Operadores Aritmticos


SQL> SELECT ename, sal, sal*12 FROM emp;
ENAME SAL SAL*12 --------------- --------- --------KING 5000 60000 BLAKE 2850 34200 CLARK 2450 29400 ALLEN 1600 19200 WARD 1250 15000

14 rows selected.
Revisao - SQL - Prof. George Hamilton

Precedncia dos Operadores


* / + -

 Multiplicao e diviso tm prioridade sobre soma e subtrao;  Operadores com a mesma prioridade so avaliados da esquerda para a direita;  Utilizar parntses para definir prioridades e tornar os comandos mais legveis.
Revisao - SQL - Prof. George Hamilton

Precedncia dos Operadores


SQL> SELECT ename, sal, 12*sal+10 FROM emp;
ENAME SAL 12*SAL+10 --------------- --------- --------KING 5000 60010 BLAKE 2850 34210 CLARK 2450 29410 ALLEN 1600 19210 WARD 1250 15010 14 rows selected.
Revisao - SQL - Prof. George Hamilton

Utilizando Parnteses
SQL> SELECT ename, sal, 12* (sal+10) FROM emp;
ENAME SAL 12*(SAL+10) --------------- --------- ----------KING 5000 60120 BLAKE 2850 34320 CLARK 2450 29520 ALLEN 1600 19320 WARD 1250 15120 14 rows selected.
Revisao - SQL - Prof. George Hamilton

Valores Nulos
Um valor nulo um atributo sem um valor. Quando um valor nulo pode ocorrer?
O valor no conhecido O valor ainda no foi preenchido O atributo no se aplica

Nulo diferente de zero ou espaos


Revisao - SQL - Prof. George Hamilton

Valores Nulos
SQL> SELECT ename, job, comm FROM emp;
ENAME JOB COMM --------------- --------------- --------KING PRESIDENT BLAKE MANAGER CLARK MANAGER ALLEN SALESMAN 300 WARD SALESMAN 50 MARTIN SALESMAN 1400 TURNER SALESMAN 0 MILLER CLERK 14 rows selected.
Revisao - SQL - Prof. George Hamilton

Valores Nulos em Expresses Aritmticas


Expresses aritimticas contendo nulos, retornam nulo.
SQL> SELECT ename, job, 10*sal+comm FROM emp;
ENAME JOB 10*SAL+COMM --------------- --------------- ----------KING PRESIDENT BLAKE MANAGER CLARK MANAGER ALLEN SALESMAN 16300 WARD SALESMAN 12550 14 rows selected.
Revisao - SQL - Prof. George Hamilton

Definindo Apelidos para Colunas


Renomeia o cabealho da coluna; Segue o nome da coluna. Pode ser precedido da palavra-chave AS; Deve estar entre aspas duplas se contiver espaos, caracteres especiais ou para diferenciar maisculas de minsculas.

Revisao - SQL - Prof. George Hamilton

Usando apelidos para colunas


SQL> SELECT empno as matricula, ename, mgr gerente FROM emp;
MATRICULA ENAME GERENTE --------- --------------- --------7839 KING 7698 BLAKE 7839 7782 CLARK 7839 14 rows selected.

Revisao - SQL - Prof. George Hamilton

Usando apelidos para colunas


SQL> SELECT ename, sal*12 Salario Annual FROM emp;
ENAME Salario Annual --------------- -------------KING 60000 BLAKE 34200 CLARK 29400 ALLEN 19200 14 rows selected.

Revisao - SQL - Prof. George Hamilton

Operador de Concatenao
Concatena colunas ou cadeias de caracteres a colunas; Representado por duas barras verticais : || Cria uma uma cadeia de caracteres como coluna resultante.

Revisao - SQL - Prof. George Hamilton

Usando o Operador de Concatenao


SQL> SELECT ename|| ||job AS Funcionarios FROM emp;
Funcionarios ------------------------------KING PRESIDENT BLAKE MANAGER CLARK MANAGER ALLEN SALESMAN WARD SALESMAN MARTIN SALESMAN 14 rows selected.
Revisao - SQL - Prof. George Hamilton

Literal
Literal um caracter, expresso ou nmero includo no SELECT Literais do tipo data e caracter devem aparecer entre aspas simples A cadeia de caracteres repetida para cada linha retornada pelo comando de seleo

Revisao - SQL - Prof. George Hamilton

Usando Literais
SQL> SELECT ename|| is a ||job as Funcionarios FROM emp;
Funcionarios -----------------------------------KING is a PRESIDENT BLAKE is a MANAGER CLARK is a MANAGER ALLEN is a SALESMAN WARD is a SALESMAN MARTIN is a SALESMAN 14 rows selected.
Revisao - SQL - Prof. George Hamilton

Linhas duplicadas
O resultado padro das consultas inclui todas as linhas, inclusive as duplicadas.
SQL> SELECT deptno FROM emp;
DEPTNO --------10 30 10 30 30 30 30 10 14 rows selected.

Revisao - SQL - Prof. George Hamilton

Eliminando linhas duplicadas


Clusula DISTINCT
SQL> SELECT distinct deptno FROM emp;
DEPTNO --------10 20 30

Revisao - SQL - Prof. George Hamilton

Apresentando a estrutura da tabela


DESC[RIBE] tabela

Revisao - SQL - Prof. George Hamilton

Apresentando a estrutura da tabela


SQL> DESCRIBE EMP

Name Null? Type ------------------- -------- -------------EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(15) JOB VARCHAR2(15) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)
Revisao - SQL - Prof. George Hamilton

2 Selees com Critrios Ordenao

Revisao - SQL - Prof. George Hamilton

Limitando as linhas retornadas pelo SELECT


Selecione todos os empregados cujo cargo SALESMAN
EMPNO --------7499 7521 7654 7844 ENAME --------------ALLEN WARD MARTIN TURNER JOB --------------SALESMAN SALESMAN SALESMAN SALESMAN

Revisao - SQL - Prof. George Hamilton

Limitando as linhas retornadas pelo SELECT


Clusula WHERE
SELECT [DISTINCT] {*, coluna [apelido],} FROM tabela WHERE condio(es);

Revisao - SQL - Prof. George Hamilton

Clusula WHERE
SQL> SELECT ename, job, deptno FROM emp WHERE job=PRESIDENT;

ENAME JOB DEPTNO --------------- --------------- --------KING PRESIDENT 10

Revisao - SQL - Prof. George Hamilton

Operadores de Comparao
Operador = > >= < <= <> Descrio Igual a Maior que Maior ou igual a Menor que Menor ou igual a
Revisao - SQL - Prof. George Hamilton

Diferente de

Usando os Operadores de Comparao


SQL> SELECT ename, sal, comm FROM emp WHERE sal<=comm;

ENAME SAL COMM --------------- --------- --------MARTIN 1250 1400

Revisao - SQL - Prof. George Hamilton

Outros Operadores de Comparao


Operador BETWEEN AND IN (lista) Descrio Valores entre um valor mnimo e um mximo (inclusive) valores que esto na lista de valores especificados pelo operador IN valores que sigam a um determinado padro valores que sejam nulos
Revisao - SQL - Prof. George Hamilton

LIKE

IS NULL

Usando o Operador BETWEEN


SQL> SELECT ename, sal Mnimo Mximo FROM emp WHERE sal BETWEEN 1000 and 2000;
ENAME SAL --------------- --------ALLEN 1600 WARD 1250 MARTIN 1250 TURNER 1500 MILLER 1300 ADAMS 1100 6 rows selected.
Revisao - SQL - Prof. George Hamilton

Usando o Operador IN
SQL> SELECT empno, ename, mgr FROM emp WHERE mgr IN (7902,7698,7782)
EMPNO ENAME MGR --------- --------------- --------7499 ALLEN 7698 7521 WARD 7698 7654 MARTIN 7698 7844 TURNER 7698 7934 MILLER 7782 7900 JAMES 7698 7369 SMITH 7902 7 rows selected.
Revisao - SQL - Prof. George Hamilton

Usando o Operador LIKE


As condies de busca podem conter letras ou nmeros % significa nenhum ou vrios caracteres quaisquer _ significa um caracter qualquer

Revisao - SQL - Prof. George Hamilton

Usando o Operador LIKE


SQL> SELECT ename FROM emp WHERE ename like W%

ENAME --------------WARD

Revisao - SQL - Prof. George Hamilton

Usando o Operador LIKE


possvel buscar por % ou _ utilizando o caracter de escape Para utlizar o caracter de escape preciso especific-lo na consulta Para selecionar todos os nomes de empregado comeando por S_% o comado seria:
SQL> SELECT ename FROM emp WHERE ename like S\_\%% ESCAPE \;
Revisao - SQL - Prof. George Hamilton

Usando o Operador IS NULL


SQL> SELECT ename, mgr FROM emp WHERE mgr IS NULL;

ENAME MGR --------------- --------KING

Revisao - SQL - Prof. George Hamilton

Operadores Lgicos
Operador AND Descrio Retorna VERDADEIRO se as duas condies forem satisfeitas

OR

Retorna VERDADEIRO se pelo menos Uma das condies for satisfeita Retorna VERDADEIRO se a condio For FALSA
Revisao - SQL - Prof. George Hamilton

NOT

Usando o Operador AND


SQL> SELECT ename, job, sal FROM emp WHERE sal>=1000 and job=SALESMAN;

ENAME --------------ALLEN WARD MARTIN TURNER

JOB SAL --------------- --------SALESMAN 1600 SALESMAN 1250 SALESMAN 1250 SALESMAN 1500

Revisao - SQL - Prof. George Hamilton

Usando o Operador OR
SQL> SELECT ename, job, sal FROM emp WHERE sal>=2000 or job=MANAGER;
ENAME --------------KING BLAKE CLARK JONES SCOTT FORD JOB SAL --------------- --------PRESIDENT 5000 MANAGER 2850 MANAGER 2450 MANAGER 2975 ANALYST 3000 ANALYST 3000
Revisao - SQL - Prof. George Hamilton

6 rows selected.

Usando o Operador NOT


SQL> SELECT ename, job FROM emp WHERE job not in (SALESMAN, MANAGER)
ENAME --------------KING MILLER JAMES SCOTT FORD SMITH ADAMS JOB --------------PRESIDENT CLERK CLERK ANALYST ANALYST CLERK CLERK
Revisao - SQL - Prof. George Hamilton

7 rows selected.

AND e OR na mesma consulta


Usar parnteses para tornar a consulta mais clara; SQL> SELECT ename, job, hiredate, sal FROM emp WHERE sal > 500 AND job =SALESMAN' AND (hiredate>='03-DEC-83' OR hiredate <='17-DEC-84);

ENAME --------------ALLEN WARD MARTIN TURNER

JOB HIREDATE SAL --------------- --------- --------SALESMAN 15-AUG-83 1600 SALESMAN 26-MAR-83 1250 SALESMAN 05-DEC-83 1250 SALESMAN - SQL - Prof. George 04-JUN-84 1500 Revisao
Hamilton

ORDER BY
Ordena as linhas retornadas pela consulta;
ASC: ordem crescente DESC: ordem decrescente

Se nada for especificado o padro ser ASC

Revisao - SQL - Prof. George Hamilton

Selecionando em Ordem Crescente


SQL> SELECT ename, job, hiredate FROM emp ORDER By hiredate;
ENAME JOB HIREDATE --------------- --------------- --------WARD SALESMAN 26-MAR-83 SMITH CLERK 13-JUN-83 ALLEN SALESMAN 15-AUG-83 JONES MANAGER 31-OCT-83 MILLER CLERK 21-NOV-83 MARTIN SALESMAN 05-DEC-83 FORD ANALYST 05-DEC-83 SCOTT ANALYST 05-MAR-84 14 rows selected. Revisao - SQL - Prof. George
Hamilton

Selecionando em Ordem Decrescente


SQL> SELECT ename, job, hiredate FROM emp ORDER By hiredate DESC;
ENAME JOB HIREDATE --------------- --------------- --------JAMES CLERK 23-JUL-84 KING PRESIDENT 09-JUL-84 BLAKE MANAGER 11-JUN-84 TURNER SALESMAN 04-JUN-84 ADAMS CLERK 04-JUN-84 CLARK MANAGER 14-MAY-84 SCOTT ANALYST 05-MAR-84 MARTIN SALESMAN 05-DEC-83 14 rows selected. Revisao - SQL - Prof. George
Hamilton

Ordenando pelo apelido da coluna


SQL> SELECT empno, ename, sal*12 anual FROM emp ORDER BY anual;
EMPNO ENAME ANUAL --------- --------------- --------7369 SMITH 9600 7900 JAMES 11400 7876 ADAMS 13200 7521 WARD 15000 7654 MARTIN 15000 7934 MILLER 15600 7844 TURNER 18000 7499 ALLEN 19200 14 rows selected. Revisao - SQL - Prof. George
Hamilton

Ordenando por mltiplas colunas


SQL> SELECT ename, deptno, sal FROM emp ORDER BY deptno, sal DESC;
ENAME DEPTNO SAL --------------- --------- --------KING 10 5000 CLARK 10 2450 MILLER 10 1300 SCOTT 20 3000 FORD 20 3000 JONES 20 2975 ADAMS 20 1100 SMITH 20 800 BLAKE 30 2850 Revisao - SQL - Prof. George 14 rows selected. Hamilton

3 Funes SQL

Revisao - SQL - Prof. George Hamilton

Funes SQL
Sada

Entrada

FUNO

Valor Resultante

Revisao - SQL - Prof. George Hamilton

Tipos de Funes SQL


FUNO

Funo de 1 linha

Funo de Grupo

Revisao - SQL - Prof. George Hamilton

Funes de 1 linha
Caracter

Genricas

FUNO de 1 linha

Nmero

Converso

Data

Revisao - SQL - Prof. George Hamilton

Funes de Caracteres
Funes de Caracteres

Converso de Misculas/ Minsculas LOWER UPPER INITCAP

Manipulao de caracteres CONCAT SUBSTR LENGTH INSTR LPAD Revisao - SQL - Prof. George RPAD
Hamilton

LTRIM RTRIM REPLACE

Converso de Misculas/Minsculas
Funo Resultado

LOWER (Curso para PAP) UPPER (Curso para PAP) INITCAP (Curso para PAP)

curso para pap CURSO PARA PAP Curso Para Pap

Revisao - SQL - Prof. George Hamilton

Converso de Misculas/Minsculas
SQL> SELECT empno, ename, deptno FROM emp WHERE ename=martin; no rows selected SQL> SELECT empno, ename, deptno FROM emp WHERE LOWER(ename)=martin; EMPNO ENAME DEPTNO --------- --------------- --------7654 MARTIN 30

Revisao - SQL - Prof. George Hamilton

Manipulao de Caracteres
Funo CONCAT (Bom,Dia) SUBSTR (Oracle,1,3) LENGTH (Oracle) INSTR (Oracle,a) BomDia Ora 6 3 Resultado

Revisao - SQL - Prof. George Hamilton

Manipulao de Caracteres
SQL> SELECT ename, CONCAT (ename,job), LENGTH(ename) len, INSTR(ename,A) ins FROM emp WHERE substr(job,1,5)=SALES;

ENAME --------------ALLEN WARD MARTIN TURNER

CONCAT(ENAME,JOB) LEN INS ----------------- --------- --------ALLENSALESMAN 5 1 WARDSALESMAN 4 2 MARTINSALESMAN 6 2 TURNERSALESMAN 6 0

Revisao - SQL - Prof. George Hamilton

Funo NVL
Converte nulos para um valor especificado Pode ser usado com dados do tipo data, caracter e numrico O dado retornado deve ter o mesmo tipo que o dado comparado
NVL (comm,0) NVL(hiredate,01-JAN-97) NVL(job, Sem cargo)
Revisao - SQL - Prof. George Hamilton

TO_CHAR com Datas


SQL> SELECT ename, sal,comm, (sal*12)+NVL(comm,0) FROM emp; ENAME SAL COMM (SAL*12)+NVL(COMM,0) --------------- --------- --------- -------------------KING 5000 60000 BLAKE 2850 34200 CLARK 2450 29400 ALLEN 1600 300 19500 WARD 1250 50 15050 MARTIN 1250 1400 16400 TURNER 1500 0 18000 MILLER 1300 15600 JONES 2975 0 35700 14 rows selected.
Revisao - SQL - Prof. George Hamilton

4 Funes de Grupo

Revisao - SQL - Prof. George Hamilton

Funes de Grupo
Operam em um conjunto de linhas fornecendo um resultado para o grupo
DEPTNO SAL --------- --------10 5000 30 2850 10 2450 30 1600 30 1250 30 1250 30 1500 10 1300 20 2975 30 950 20 3000 20 3000 20 800 20 1100

Maior salrio na Tabela EMP

MAX(SAL) --------5000

Revisao - SQL - Prof. George Hamilton

Tipos de Funes de Grupo


Funo
AVG COUNT MAX MIN STDEV SUM VARIANCE Mdia aritmtica Contador de linhas retornadas Maior valor do grupo Menor valor do grupo Desvio padro Somatrio Varincia
Revisao - SQL - Prof. George Hamilton

Descrio

Funes de Grupo
SELECT FROM [WHERE [GROUP BY coluna, funo_de_grupo(coluna) tabela condio] coluna]

Revisao - SQL - Prof. George Hamilton

Funes AVG e SUM


SQL> SELECT AVG(sal), SUM(sal) FROM emp;

AVG(SAL) SUM(SAL) --------- --------2073.2143 29025

Revisao - SQL - Prof. George Hamilton

Funes MAX e MIN


SQL> SELECT MAX(hiredate), MIN(hiredate) FROM emp;

MAX(HIRED MIN(HIRED --------- --------23-JUL-84 26-MAR-83

Revisao - SQL - Prof. George Hamilton

Funo COUNT
SQL> SELECT COUNT(*) FROM emp WHERE deptno=30;

COUNT(*) --------6

Revisao - SQL - Prof. George Hamilton

Funo COUNT
COUNT(expr) retorna o nmero de linhas no nulas
SQL> SELECT COUNT(comm) FROM emp WHERE deptno=30;

COUNT(COMM) ----------4

Revisao - SQL - Prof. George Hamilton

Funo de Grupo e Valores Nulos


Funes de Grupo ignoram os valores nulos
SQL> SELECT AVG(comm) FROM emp;

AVG(COMM) --------350

Revisao - SQL - Prof. George Hamilton

Usando NVL com Funo de Grupo


NVL fora as funes de grupo a considerarem os nulos
SQL> SELECT AVG(NVL(comm,0)) FROM emp;

AVG(NVL(COMM,0)) ---------------125

Revisao - SQL - Prof. George Hamilton

Criando Grupos de Dados


DEPTNO SAL --------- --------10 5000 30 2850 10 2450 30 1600 30 1250 30 1250 30 1500 10 1300 20 2975 30 950 20 3000 20 3000 20 800 20 1100

Mdia de salrios Tabela EMP por departamento

DEPTNO --------10 20 30

AVG(SAL) --------2916.6667 2175 1566.6667

Revisao - SQL - Prof. George Hamilton

Criando Grupos de Dados: Clusula GROUP BY


SELECT FROM [WHERE [GROUP BY [ORDER BY coluna, funo_de_grupo(coluna) tabela condio] expresso_de_group_by] coluna];

Revisao - SQL - Prof. George Hamilton

Clusula GROUP BY
As colunas na clusula GROUP BY no precisam estar na Clusula SELECT
SQL> SELECT AVG(sal) FROM emp GROUP BY deptno;

AVG(SAL) --------2916.6667 2175 1566.6667

Revisao - SQL - Prof. George Hamilton

GROUP By com mais de uma coluna


DEPTNO SAL --------- --------10 5000 30 2850 10 2450 30 1600 30 1250 30 1250 30 1500 10 1300 20 2975 30 950 20 3000 20 3000 20 800 20 1100

DEPTNO JOB SUM(SAL) --------- --------------- --------10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600

Soma dos salrios Tabela EMP por departamento e cargo

Revisao - SQL - Prof. George Hamilton

Clusula GROUP BY
SQL> SELECT deptno, job, sum(sal) FROM emp GROUP BY deptno, job;
DEPTNO JOB SUM(SAL) --------- --------------- --------10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600 9 rows selected.
Revisao - SQL - Prof. George Hamilton

Uso Incorreto das Funes de Grupo


Qualquer coluna na clusula SELECT que no esteja em uma Funo de grupo, deve aparecer na clusula GROUP BY
SQL> SELECT deptno, COUNT(enam) FROM emp;

SELECT

deptno, COUNT(ename) * ERROR at line 1: ORA-00937: not a single-group group function

Revisao - SQL - Prof. George Hamilton

Uso Incorreto das Funes de Grupo


A clusula WHERE no pode ser usada para filtrar funes de grupo.
SQL> SELECT deptno, AVG(sal) FROM emp WHERE AVG(sal)>2000 GROUP BY deptno;
WHERE AVG(sal)>2000 * ERROR at line 3: ORA-00934: group function is not allowed here

Revisao - SQL - Prof. George Hamilton

Filtrando Resultados das Funes de Grupo


DEPTNO SAL --------- --------10 5000 30 2850 10 2450 30 1600 30 1250 30 1250 30 1500 10 1300 20 2975 30 950 20 3000 20 3000 20 800 20 1100

DEPTNO MAX(SAL) Maior salrio por --------- --------departamento que 10 5000 seja maior que 2900 20 3000

Revisao - SQL - Prof. George Hamilton

Filtrando Resultados das Funes de Grupo Clusula HAVING


SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY coluna, funo_de_grupo(coluna) tabela condio] expresso_de_group_by] condio_de_grupo] coluna];

1. As linhas so agrupadas 2. A funo de grupo aplicada 3. Grupos que satisfaam a condio_de_grupo so selecionados
Revisao - SQL - Prof. George Hamilton

Clusula HAVING
SQL> SELECT deptno, max(sal) FROM emp GROUP BY deptno HAVING max(sal)>2900; DEPTNO MAX(SAL) --------- --------10 5000 20 3000

Revisao - SQL - Prof. George Hamilton

Clusula HAVING
SQL> SELECT job, sum(sal) FROM emp WHERE job <> SALESMAN GROUP BY job HAVING sum(sal)>5000 ORDER BY SUM(sal); JOB SUM(SAL) --------------- --------ANALYST 6000 MANAGER 8275

Revisao - SQL - Prof. George Hamilton

5 Extraindo Dados de Mais de Uma Tabela

Revisao - SQL - Prof. George Hamilton

Extraindo Dados de Mais de Uma Tabela


EMPNO ENAME DEPTNO --------- ------- --------7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7499 ALLEN 30 DEPTNO --------10 20 30 40 DNAME -------------ACCOUNTING RESEARCHING SALES OPERATIONS LOC --------NEW YORK DALLAS CHICAGO BOSTON

EMPNO DEPTNO LOC --------- --------- --------------7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7499 30 CHICAGO
Revisao - SQL - Prof. George Hamilton

Juno
Usada para obter dados de mais de uma tabela; A condio de juno de ser escrita na clusula WHERE Se a coluna aparecer com o mesmo nome em mais de uma tabela, ele deve ser prefixada pelo nome da tabela
SELECT tabela1.coluna, tabela2.coluna FROM tabela1, tabela2 WHERE tabela1.coluna = tabela2.coluna

Revisao - SQL - Prof. George Hamilton

Juno
SQL> SELECT emp.ename, dept.deptno, dept.dname FROM emp, dept WHERE emp.deptno=dept.deptno;
ENAME DEPTNO DNAME ------- --------- -------------KING 10 ACCOUNTING BLAKE 30 SALES CLARK 10 ACCOUNTING ALLEN 30 SALES WARD 30 SALES MARTIN 30 SALES TURNER 30 SALES
Revisao - SQL - Prof. George Hamilton

Produto Cartesiano
realizado quando:
A codio de juno omitida A condio de juno invlida Todas as linhas da primeira coluna so combinadas com todas as linhas da segunda coluna

Revisao - SQL - Prof. George Hamilton

Produto Cartesiano
SQL> SELECT emp.ename, dept.deptno, dept.dname FROM emp, dept;

ENAME DEPTNO DNAME ------- --------- -------------KING 10 ACCOUNTING BLAKE 10 ACCOUNTING CLARK 10 ACCOUNTING ALLEN 10 ACCOUNTING WARD 10 ACCOUNTING MARTIN 10 ACCOUNTING 56 rows selected.
Revisao - SQL - Prof. George Hamilton

Usando Apelidos para Tabelas


SQL> SELECT e.ename, d.deptno, d.dname FROM emp e, dept d WHERE e.deptno=d.deptno;
ENAME DEPTNO DNAME ------- --------- -------------KING 10 ACCOUNTING BLAKE 30 SALES CLARK 10 ACCOUNTING ALLEN 30 SALES WARD 30 SALES MARTIN 30 SALES TURNER 30 SALES
Revisao - SQL - Prof. George Hamilton

Junes Equivalentes
O operador utilizado o =
SQL> SELECT emp.ename, dept.deptno, dept.dname FROM emp, dept WHERE emp.deptno=dept.deptno;
ENAME DEPTNO DNAME ------- --------- -------------KING 10 ACCOUNTING BLAKE 30 SALES CLARK 10 ACCOUNTING ALLEN 30 SALES WARD 30 SALES MARTIN 30 SALES TURNER 30 SALES
Revisao - SQL - Prof. George Hamilton

Junes de uma tabela com ela mesma


SQL> SELECT funcionario.ename || trabalha para || gerente.ename FROM emp funcionario, emp gerente WHERE funcionario.mgr=gerente.empno;

FUNCIONARIO.ENAME||'TRABALHAPARA'||GERENTE.EN --------------------------------------------BLAKE trabalha para KING CLARK trabalha para KING ALLEN trabalha para BLAKE WARD trabalha para BLAKE MARTIN trabalha para BLAKE TURNER trabalha para BLAKE MILLER trabalha para CLARK
Revisao - SQL - Prof. George Hamilton

6 Consultas Aninhadas

Revisao - SQL - Prof. George Hamilton

Consulta Aninhada
aquela que est contida dentro de uma outra consulta, e que retorna valores intermedirios.
SELECT coluna1, coluna2 FROM tabela WHEREcoluna1 = (SELECT coluna FROM tabela WHERE condio)

Tambm conhecida como subconsulta


Revisao - SQL - Prof. George Hamilton

Tipos de Consulta Aninhada


Retornam apenas uma linha Retornam mais de uma linha

Revisao - SQL - Prof. George Hamilton

Subconsultas que retornam uma linha


Utilizar os operadores de comparao Operador
= > >= < <= <> Igual Maior Maior ou igual Menor Menor ou igual Diferente
Revisao - SQL - Prof. George Hamilton

Descrio

Subconsultas que retornam uma linha


SQL>SELECT ename, job FROM emp WHERE job= (SELECT job FROM emp WHERE empno=7369) AND sal > (SELECT sal FROM emp WHERE empno=7876); ENAME JOB ------- --------------MILLER CLERK

CLERK 1100

Revisao - SQL - Prof. George Hamilton

Erros nas subconsultas que retornam uma linha


SQL>SELECT ename FROM emp WHERE empno= (SELECT empno FROM emp WHERE job=SALESMAN);

WHERE empno= (SELECT empno FROM emp WHERE job='SALESMAN') * ERROR at line 3: ORA-01427: single-row subquery returns more than one row

Revisao - SQL - Prof. George Hamilton

Subconsultas que retornam mais de uma linha


Utilizar os operadores de comparao mltipla Operador
IN ANY ALL

Descrio
Igual a qualquer um dos elementos da lista Compara o valor com cada valor retornado pela subconsulta Compara o valor com todos os valores retornados Pela subconsulta

Revisao - SQL - Prof. George Hamilton

Operador IN
SQL>SELECT ename, job FROM emp WHERE empno IN (SELECT empno FROM emp WHERE job=SALESMAN);

ENAME ------ALLEN WARD MARTIN TURNER

JOB --------------SALESMAN SALESMAN SALESMAN SALESMAN

Revisao - SQL - Prof. George Hamilton

Operador ANY
SQL>SELECT empno, ename, job FROM emp WHERE sal < ANY (SELECT sal FROM emp WHERE job=CLERK) AND job<>CLERK;

EMPNO ENAME JOB --------- ------- --------------7521 WARD SALESMAN 7654 MARTIN SALESMAN

Revisao - SQL - Prof. George Hamilton

Operador ALL
SQL>SELECT empno, ename, job FROM emp WHERE sal > ALL (SELECT AVG(sal) from emp GROUP BY deptno);

EMPNO ENAME JOB --------- ------- --------------7839 KING PRESIDENT 7566 JONES MANAGER 7788 SCOTT ANALYST 7902 FORD ANALYST

Revisao - SQL - Prof. George Hamilton

Consulta interna correlacionada


executada para cada uma das linhas consideradas candidatas na consulta principal ; A execuo usa o valor da coluna da consulta principal; identificada pela presena de uma coluna da consulta principal na consulta interna.

Revisao - SQL - Prof. George Hamilton

Consulta interna correlacionada


Para encontrar os empregados que recebem mais do que o salrio mdio de seus departamentos:
SQL> SELECT empno, ename, sal, deptno FROM emp e WHERE sal > (SELECT AVG(sal) FROM emp WHERE deptno = e.deptno) ORDER BY deptno; EMPNO ENAME SAL DEPTNO --------- ------- --------- --------7839 KING 5000 10 7566 JONES 2975 20 7788 SCOTT 3000 20 7902 FORD 3000 20 7698 BLAKE 2850 30 7499 ALLEN 1600 30
Revisao - SQL - Prof. George Hamilton

Operador EXISTS
Usado com consultas aninhadas correlacionadas, testando se o valor existe. Se o valor existir, retorna verdadeiro, caso contrrio retorna falso. Para listar todas as empregados com ao menos um funcionrio subordinado:
SQL>SELECT empno, ename, job, deptno FROM emp e WHERE EXISTS (SELECT empno FROM emp p where p.mgr=e.empno) ORDER BY empno; EMPNO ENAME JOB DEPTNO --------- ------- --------------- --------7566 JONES MANAGER 20 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7788 SCOTT ANALYST 20 Revisao - SQL - Prof. George
Hamilton

6 Linguagem de Manipulao de Dados (DML)

Revisao - SQL - Prof. George Hamilton

Linguagem de Manipulao de Dados (DML)


Utilizada para:
Incluir novas linhas em uma tabela; Alterar linhas existentes na tabela; Excluir linhas da tabela.

Uma transao um conjunto de comandos da LMD que formam uma unidade lgica de trabalho.
Revisao - SQL - Prof. George Hamilton

Comando INSERT
Inclui linhas na tabela
INSERT INTO tabela [ (coluna, [,coluna])] VALUES (valor [,valor]);

SQL> INSERT INTO dept(deptno, dname, loc) 2 VALUES (50,'DEVELOPMENT', 'DETROIT'); 1 row created.

Revisao - SQL - Prof. George Hamilton

Incluindo linhas com valores nulos


Mtodo Implcito: omitir o nome da coluna
SQL> INSERT INTO dept(deptno, dname) 2 VALUES (60,'MIS'); 1 row created.

Mtodo Explcito: especificar a palavra-chave NULL


SQL> INSERT INTO dept 2 values (70,'FINANCE',NULL); 1 row created.

Revisao - SQL - Prof. George Hamilton

Incluindo linhas
SQL> INSERT INTO emp(empno, ename, job, mgr, hiredate, sal,comm,deptno) 2 VALUES (7196,'GREEN','SALESMAN',7782,SYSDATE,2000,NULL,10); 1 row created. SQL> INSERT INTO emp 2 VALUES (2296,'AROMANO','SALESMAN',7782, 3 TO_DATE ('FEB 3, 97', 'MON DD, YY'), 4 1300,null,10); 1 row created.

Revisao - SQL - Prof. George Hamilton

Copiando dados de outra tabela


O INSERT escrito como uma subconsulta; A clusula VALUES no deve ser utilizada; O Nmero de colunas na clusula INSERT deve ser compatvel Com o nmero de colunas da subconsulta.
SQL> INSERT INTO managers (id, name, salary,hiredate) 2 SELECT empno, ename, sal,hiredate 3 FROM emp 4 WHERE job=MANAGER; 3 rows created.

Revisao - SQL - Prof. George Hamilton

Comando UPDATE
Altera linhas existentes na tabela
UPDATE tabela SET coluna = valor [,coluna=valor] WHERE condio];

SQL> UPDATE emp 2 SET deptno = 20 3 WHERE empno = 7782; 1 row updated.

Revisao - SQL - Prof. George Hamilton

Comando UPDATE
Se a clusula WHERE no for especificada, todas as linhas da tabela sero alteradas
SQL> UPDATE emp 2 SET deptno = 20 14 rows updated.

Revisao - SQL - Prof. George Hamilton

Alterando linhas
SQL> UPDATE emp 2 SET (job, deptno) = 3 (SELECT job, deptno 4 FROM emp 5 WHERE empno = 7499) 6 WHERE empno = 7698; 1 row updated

Revisao - SQL - Prof. George Hamilton

Alterando linhas
SQL> UPDATE employee 2 SET deptno = 3 (SELECT deptno 4 FROM emp 5 WHERE empno = 7788) 6 WHERE job = 7 (SELECT job 8 FROM emp 9 WHERE empno=7788); 2 rows updated

Revisao - SQL - Prof. George Hamilton

Erro de Restrio de Integridade ao alterar linhas


SQL> UPDATE emp SET deptno = 55 WHERE deptno = 10;

UPDATE emp * ERROR at line 1: ORA-02291: integrity constraint (SCOTT.FK_EMPDPTO) violated - parent key not found

O departamento 55 no existe na tabela dept !


Revisao - SQL - Prof. George Hamilton

Comando DELETE
Exclui linhas da tabela
DELETE [FROM] tabela [WHERE condio]

SQL> DELETE FROM dept 2 WHERE dname='DEVELOPMENT'; 1 row deleted.

Revisao - SQL - Prof. George Hamilton

Excluindo linhas
SQL> DELETE FROM emp 2 WHERE deptno = 3 (SELECT deptno 4 FROM dept 5 WHERE dname=SALES) 6 rows deleted

Revisao - SQL - Prof. George Hamilton

Erro de Restrio de Integridade ao excluir linhas


SQL> DELETE FROM dept WHERE deptno=10;

DELETE FROM dept * ERROR at line 1: ORA-02292: integrity constraint (SCOTT.FK_EMPDPTO) violated child record found

No permitido excluir uma linha que contenha uma chave primria Que esteja sendo usada como chave estrangeira em outra tabela!
Revisao - SQL - Prof. George Hamilton

7 Linguagem de Definio de Dados (DDL)

Revisao - SQL - Prof. George Hamilton

Objetos do Banco de Dados

Objeto
Tabela Viso Sequncia ndice Sinnimo

Descrio
Unidade bsica de armazenamento. Composta de linhas e colunas. Subconjuntos de dados de uma ou mais tabelas Gerador de nmeros sequenciais Estrutura criada para melhorar a performance de Consultas em tabelas Nome alternativo para os objetos
Revisao - SQL - Prof. George Hamilton

Convenes para os nomes de objeto


Deve comear com uma letra Pode conter de 1 a 30 caracteres Deve conter apenas A-Z, a-z, 0-9, _ , $ e # No pode haver nomes duplicados No pode ser uma palavra reservada do SGBD Oracle
Revisao - SQL - Prof. George Hamilton

Comando CREATE TABLE


Cria uma tabela no banco de dados
CREATE TABLE [esquema.]tabela (coluna tipo_de_dado [DEFAULT expresso]);

A opo DEFAULT especifica o valor padro que a coluna receber caso nenhum valor seja especificado no momento do INSERT.

Revisao - SQL - Prof. George Hamilton

Criando Tabelas
CREATE TABLE (deptno dname loc dept number(2), varchar2(14), varchar2(15));

Revisao - SQL - Prof. George Hamilton

Tipos de Dados
Objeto VARCHAR2(tamanho) CHAR (tamanho) NUMBER DATE LONG CLOB RAW e LONG RAW BLOB BFILE

Descrio
Cadeia de caracteres de tamanho varivel Cadeia de caracteres de tamanho fixo Dados nmericos de tamanho varivel Data e hora Cadeias de caracteres de at 2Gb Cadeias de caracteres de at 4Gb Dados binrios Dados binrios de at 4Gb Dados binrios usados em arquivo externo. At 4 Gb. Hamilton
Revisao - SQL - Prof. George

Criando uma tabela usando uma subconsulta


CREATE TABLE tabela (coluna tipo_de_dado [DEFAULT expresso]) AS subconsulta; CREATE TABLE dept30 AS SELECT empno, ename, sal*12 ANNSAL, hiredate from emp WHERE deptno=30;

Revisao - SQL - Prof. George Hamilton

Comando ALTER TABLE


Usado para: Adicionar uma coluna tabela; Excluir uma coluna da tabela; Alterar uma coluna; Definir um valor DEFAULT para a coluna.
ALTER TABLE tabela ADD (coluna tipo_de_dado [DEFAULT expresso]); ALTER TABLE tabela MODIFY (coluna tipo_de_dado [DEFAULT expresso]); ALTER TABLE tabela DROP COLUMN (coluna);
Revisao - SQL - Prof. George Hamilton

Adicionando colunas
ALTER TABLE dept30 ADD (job VARCHAR2(9));

Revisao - SQL - Prof. George Hamilton

Alterando colunas
ALTER TABLE dept30 MODIFY (ename VARCHAR2(15));

Revisao - SQL - Prof. George Hamilton

Excluindo colunas
ALTER TABLE DROP COLUMN dept30 (job);

Revisao - SQL - Prof. George Hamilton

Excluindo uma Tabela


Dados eestrutura da tabela so eliminados; Transes pendentes so efetivadas; Todos os ndices da tabela so excludos; No possvel realizar ROLLBACK.
DROP TABLE DROP TABLE tabela; dept30;

Revisao - SQL - Prof. George Hamilton

Renomeando Objetos
Usado para alterar o nome de tabelas, vises, Sequncias, ou sinnimos.
RENAME nome_antigo TO nome_novo; RENAME dept TO departament;

Revisao - SQL - Prof. George Hamilton

Truncando uma Tabela


Remove todas as linha da tabela; Mantm a estrutura da tabela; Disponibiliza o espao que estava sendo usado; No possvel realizar ROLLBACK

TRUNCATE TABLE tabela; TRUNCATE TABLE department;

Revisao - SQL - Prof. George Hamilton

Restries de Integridade
Implementam regras no nvel das tabelas; Previnem a excluso dos dados em uma tabela se houver dependncias. Resties de Integridade vlidas no Oracle:
NOT NULL UNIQUE Key PRIMARY Key FOREIGN Key CHECK

Revisao - SQL - Prof. George Hamilton

Restries de Integridade
Podem ser criadas:
No momento da criao da tabela Aps a criao da tabela

Podem ser definidas no nvel da tabela ou da coluna.

Revisao - SQL - Prof. George Hamilton

Definindo Restries de Integridade


CREATE TABLE [esquema.]tabela (coluna tipo_de_dado [DEFAULT expresso] [restrio_de_integridade], [restrio_de_integridade_da_tabela]); CREATE TABLE emp( empno NUMBER(4), ename VARCHAR2(10) deptno NUMBER(7,2) NOT NULL, CONSTRAINT emp_empno_pk PRIMARY KEY(empno));

Revisao - SQL - Prof. George Hamilton

Definindo Restries de Integridade


Restrio de integridade no nvel da coluna:
coluna [CONSTRAINT nome_da_restrio] tipo_da_restrio,

Restrio de integridade no nvel da tabela:


coluna, [CONSTRAINT nome_da_restrio] tipo_da_restrio (coluna,),

Revisao - SQL - Prof. George Hamilton

NOT NULL
No permite que seja includo nulo na coluna Definida no nvel da coluna
create table (EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO EMP number(4) not null, varchar2(15) , varchar2(15) , number(4) , date , number(7,2) , number(7,2) , number(2) )
Revisao - SQL - Prof. George Hamilton

UNIQUE Key
Definida no nvel da coluna ou da tabela Obriga que os valores para a coluna sejam nicos
CREATE TABLE dept( deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13), CONSTRAINT detp_dname_uk UNIQUE (dname))

Revisao - SQL - Prof. George Hamilton

PRIMARY Key
Definida no nvel da coluna ou da tabela Cria uma chave primria para a tabela
CREATE TABLE dept( deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13), CONSTRAINT detp_deptno_pk PRIMARY KEY (deptno));

Revisao - SQL - Prof. George Hamilton

Foreign Key
Definida no nvel da coluna ou da tabela Cria uma chave estrangeira em uma tabela que referencia uma chave primria em outra tabela
CREATE TABLE emp( empno NUMBER(4), ename VARCHAR2(10), job VARCHAR2(9), deptno NUMBER(7,2), CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno) REFERENCES dept(deptno));

Revisao - SQL - Prof. George Hamilton

Foreign Key
A opo ON DELETE CASCADE permite a excluso em tabelas pai que possuam registros associados em tabelas filhas e exclui automaticamente as linhas das tabelas filhas.
CREATE TABLE emp( empno NUMBER(4), ename VARCHAR2(10), job VARCHAR2(9), deptno NUMBER(7,2), CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno) REFERENCES dept(deptno) ON DELETE CASCADE);

Revisao - SQL - Prof. George Hamilton

CHECK
Definida no nvel da coluna ou da tabela Especifica uma codio que as linhas devem satisfazer
CREATE TABLE dept( deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13), CONSTRAINT dept_deptno_ck CHECK (deptno BETWEEN 10 and 00));

Revisao - SQL - Prof. George Hamilton

Adicionando uma Restrio de Integridade


ALTER TABLE tabela ADD [CONSTRAINT restrio] tipo_de_dado (coluna); ALTER TABLE emp ADD CONSTRAINT emp_mgr_fk FOREIGN KEY (mgr) REFERENCES emp(empno);

Restrio de Integridade NOT NULL deve ser adicionada usando a clusula MODIFY.
ALTER TABLE emp MODIFY job VARCHAR2(15) NOT NULL);

Revisao - SQL - Prof. George Hamilton

Removendo uma Restrio de Integridade


ALTER TABLE tabela DROP CONSTRAINT restrio; ALTER TABLE emp DROP CONSTRAINT emp_mgr_fk;

Para remover a PRIMARY KEY da tabela dept e a FOREIGN KEY associada da coluna deptno na tabela emp:
ALTER TABLE dept DROP PRIMARY KEY CASCADE;

Revisao - SQL - Prof. George Hamilton

Desabilitando Restries de Integridade


ALTER TABLE emp DISABLE CONSTRAINT emp_empno_pk;

Revisao - SQL - Prof. George Hamilton

Habilitando Restries de Integridade


ALTER TABLE emp ENABLE CONSTRAINT emp_empno_pk;

Revisao - SQL - Prof. George Hamilton

8 Vises

Revisao - SQL - Prof. George Hamilton

O que uma Viso?


como uma janela atravs da qual os dados das tabelas podem ser vistos e alterados; derivada de uma tabela ou de outra viso, a qual chamada de tabela ou viso base. uma tabela real com os dados fisicamente armazenados~; No tem dados prprios. Os dados so manipulados a partir das tabelas base.
Revisao - SQL - Prof. George Hamilton

Aplicabilidade
Restringir o acesso ao banco de dados; Simplificar consultas complexas; Prov independncia de dados

Revisao - SQL - Prof. George Hamilton

Vises Simples X Complexas


Caracterstica Nmero de tabelas Contm funes Contm grupos de dados Permite DML Sim Nem sempre

Simples
Uma No No

Complexa
Uma ou mais Sim Sim

Revisao - SQL - Prof. George Hamilton

Criando uma Viso


CREATE [OR REPLACE] VIEW nome_da_view AS subconsulta

A subquery no pode conter a clusula ORDER BY

Revisao - SQL - Prof. George Hamilton

Excluindo uma Viso


DROP VIEW viso;

DROP VIEW empvu10;;

Revisao - SQL - Prof. George Hamilton