Você está na página 1de 165

Criando Instrues SQL Bsicas

Objetivos:
Listar os recursos das instrues SELECT SQL Executar uma instruo SELECT bsica Diferenciar instrues SQL e comandos SQL*Plus

Recursos das Instrues SELECT SQL

Seleo

Projeo

Tabela 1

Juno

Tabela 1

Tabela 1

Tabela 2

Instruo SELECT Bsica

SELECT SELECT FROM FROM

[DISTINCT] {*, coluna [apelido],...} [DISTINCT] {*, coluna [apelido],...} tabela; tabela;

SELECT identifica que colunas. FROM identifica qual tabela.

Criando Instrues SQL

Instrues SQL no fazem distino entre maisculas e minsculas. Instrues SQL podem estar em uma ou mais linhas. Palavras-chave no podem ser abreviadas ou divididas entre as linhas. Normalmente, as clusulas so colocadas em linhas separadas. Guias e endentaes so usadas para aperfeioar a legibilidade.

Selecionando Todas as Colunas

SQL> SELECT * 2 FROM dept; DEPTNO --------10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON

Selecionando Colunas Especficas

SQL> SELECT deptno, loc 2 FROM dept; DEPTNO --------10 20 30 40 LOC ------------NEW YORK DALLAS CHICAGO BOSTON

Defaults de Cabealho de Coluna

Justificada default Esquerda: Dados de caractere e data Direita: Dados numricos Exibio default: Letra maiscula

Expresses Aritmticas

Criar expresses com dados NUMBER e DATE usando operadores aritmticos

Operador + * /

Descrio Adicionar Subtrair Multiplicar Dividir

Usando Operadores Aritmticos

SQL> SELECT ename, sal, sal+300 2 FROM emp; ENAME SAL SAL+300 ---------- --------- --------KING 5000 5300 BLAKE 2850 3150 CLARK 2450 2750 JONES 2975 3275 MARTIN 1250 1550 ALLEN 1600 1900 ... 14 rows selected.

Precedncia do Operador

* / +

A multiplicao e a diviso tm prioridade sobre a adio e a subtrao. Os operadores com a mesma prioridade so avaliados da esquerda para a direita. Os parnteses so usados para forar a avaliao e para esclarecer as instrues.

10

Precedncia do Operador

SQL> SELECT ename, sal, 12*sal+100 2 FROM emp; ENAME SAL 12*SAL+100 ---------- --------- ---------KING 5000 60100 BLAKE 2850 34300 CLARK 2450 29500 JONES 2975 35800 MARTIN 1250 15100 ALLEN 1600 19300 ... 14 rows selected.

11

Usando Parnteses

SQL> SELECT ename, sal, 12*(sal+100) 2 FROM emp; ENAME SAL 12*(SAL+100) ---------- --------- ----------KING 5000 61200 BLAKE 2850 35400 CLARK 2450 30600 JONES 2975 36900 MARTIN 1250 16200 ... 14 rows selected.

12

Definindo um Valor Nulo

Um valor nulo no est disponvel, no atribudo, desconhecido ou no aplicvel. Um valor nulo no o mesmo que um zero ou um espao em branco. SQL> SELECT ename, job, sal, comm 2 FROM emp; ENAME JOB SAL COMM ---------- --------- --------- --------KING PRESIDENT 5000 BLAKE MANAGER 2850 ... TURNER SALESMAN 1500 0 ... 14 rows selected.

13

Valores Nulos nas Expresses Aritmticas

Expresses aritmticas contendo um valor nulo so avaliadas como nulo.

SQL> select ename, 12*sal+comm 2 from emp 3 WHERE ename='KING'; ENAME 12*SAL+COMM ---------- ----------KING

14

Definindo um Apelido de Coluna

Renomeia um cabealho de coluna til para clculos Segue imediatamente o nome da coluna Palavra-chave AS opcional entre o nome da coluna e o apelido Necessita de aspas duplas caso contenha espaos ou caracteres especiais ou faa distino entre maisculas e minsculas

15

Usando Apelidos de Coluna

SQL> SELECT ename AS name, sal salary 2 FROM emp; NAME SALARY ------------- --------... SQL> SELECT ename "Name", 2 sal*12 "Annual Salary" 3 FROM emp; Name Annual Salary ------------- ------------...

16

Operador de Concatenao

Concatena colunas ou strings de caractere a outras colunas representado por duas barras Verticais - || Cria uma coluna resultante que uma expresso de caracteres

17

Usando um Operador de Concatenao

SQL> SELECT 2 FROM

ename||job AS "Employees" emp;

Employees ------------------KINGPRESIDENT BLAKEMANAGER CLARKMANAGER JONESMANAGER MARTINSALESMAN ALLENSALESMAN ... 14 rows selected.

18

Strings Literais de Caracteres

Uma literal um caractere, um nmero ou uma data includa na lista SELECT. Os valores literais de caractere e data devem estar entre aspas simples. Cada string de caractere gerada uma vez para cada linha retornada.

19

Usando Strings Literais de Caracteres

SQL> SELECT ename ||' is a '||job 2 AS "Employee Details" 3 FROM emp; Employee Details Employee Details ------------------------------------------------KING is a PRESIDENT KING is a PRESIDENT BLAKE is a MANAGER BLAKE is a MANAGER CLARK is a MANAGER CLARK is a MANAGER JONES is a MANAGER JONES is a MANAGER MARTIN is a SALESMAN MARTIN is a SALESMAN ... ... 14 rows selected. 14 rows selected.

20

Linhas Duplicadas

A exibio default das consultas de todas as linhas, incluindo linhas duplicadas.

SQL> SQL> 2 2

SELECT SELECT FROM FROM

deptno deptno emp; emp;

DEPTNO --------10 30 10 20 ... 14 rows selected.

21

Eliminando Linhas Duplicadas

Elimine linhas duplicadas usando a palavra-chave DISTINCT na clusula SELECT.

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

22

Exibindo a Estrutura de Tabela

Use o comando DESCRIBE do SQL*Plus para exibir a estrutura de uma tabela.

DESC[RIBE] nome da tabela DESC[RIBE] nome da tabela

SQL> DESCRIBE dept SQL> DESCRIBE dept Name Name --------------------------------DEPTNO DEPTNO DNAME DNAME LOC LOC Null? Null? --------------NOT NULL NOT NULL Type Type ----------------------NUMBER(2) NUMBER(2) VARCHAR2(14) VARCHAR2(14) VARCHAR2(13) VARCHAR2(13)

23

Restringindo e Classificando Dados

Objetivos: Limitar linhas recuperadas por uma consulta Classificar linhas recuperadas por uma consulta

24

Limitando Linhas Usando uma Seleo

EMP EMPNO ENAME 7839 7698 7782 7566 ... KING BLAKE CLARK JONES JOB PRESIDENT MANAGER MANAGER MANAGER ... DEPTNO 10 30 10 20

"recuperar todos os funcionrios do departamento 10"

EMP EMPNO ENAME JOB ... DEPTNO 10 10 10

7839 KING PRESIDENT 7782 CLARK MANAGER 7934 MILLER CLERK

25

Limitando Linhas Selecionadas

Restringe as linhas retornadas usando a clusula WHERE. SELECT FROM [WHERE [DISTINCT] {*| coluna [apelido], ...} tabela condio(es)];

A clusula WHERE segue a clusula FROM.

26

Usando a Clusula WHERE

SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE job='CLERK'; ENAME ---------JAMES SMITH ADAMS MILLER JOB DEPTNO --------- --------CLERK 30 CLERK 20 CLERK 20 CLERK 10

27

Strings de Caractere e Datas

As strings de caractere e valores de data aparecem entre aspas simples. Os valores de caractere fazem distino entre maisculas e minsculas e os valores de data diferenciam formatos. O formato de data default DD-MON-YY.

SQL> SQL> 2 2 3 3

SELECT SELECT FROM FROM WHERE WHERE

ename, job, deptno ename, job, deptno emp emp ename = 'JAMES' ; ename = ;

28

Operadores de Comparao

Operador = > >= < <= <>

Significado Igual a Maior do que Maior do que ou igual a Menor do que Menor ou igual a Diferente de

29

Usando Operadores de Comparao

SQL> SELECT ename, sal, comm 2 FROM emp 3 WHERE sal<=comm; ENAME SAL COMM ---------- --------- --------MARTIN 1250 1400

30

Outros Operadores de Comparao

Operador BETWEEN ...AND... IN(list)

Significado Entre dois valores (inclusive)

Vincula qualquer um de uma lista de valores Vincula um padro de caractere um valor nulo No um valor nulo

LIKE IS NULL IS NOT NULL

31

Usando o Operador BETWEEN

Use o operador BETWEEN para exibir linhas baseadas em uma faixa de valores.

SQL> SELECT 2 FROM 3 WHERE

ename, sal emp sal BETWEEN 1000 AND 1500;

ENAME SAL ---------- --------MARTIN 1250 TURNER 1500 WARD 1250 ADAMS 1100 MILLER 1300

Limite inferior

Limite superior

32

Usando o Operador IN

Use o operador IN para testar os valores de uma lista.

SQL> SELECT 2 FROM 3 WHERE EMPNO --------7902 7369 7788 7876

empno, ename, sal, mgr emp mgr IN (7902, 7566, 7788);

ENAME SAL MGR ---------- --------- --------FORD 3000 7566 SMITH 800 7902 SCOTT 3000 7566 ADAMS 1100 7788

33

Usando o Operador LIKE

Use o operador LIKE para executar pesquisas curinga de valores de string de pesquisa vlidos. As condies de pesquisa podem conter caracteres literais ou nmeros. % denota zero ou muitos caracteres. _ denota um caractere.

SQL> SELECT 2 FROM 3 WHERE

ename emp ename LIKE 'S%';

34

Usando o Operador LIKE

Voc pode combinar caracteres de vinculao de padro.

SQL> SELECT 2 FROM 3 WHERE ENAME ---------MARTIN JAMES WARD

ename emp ename LIKE '_A%';

possvel usar o identificador ESCAPE para procurar por "%" ou "_".

35

Usando o Operador IS NULL

Teste para valores nulos com o operador IS NULL.

SQL> SELECT 2 FROM 3 WHERE

ename, mgr emp mgr IS NULL;

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

36

Operadores Lgicos

Operador AND OR

Significado Retorna TRUE se as condies de componentes forem TRUE Retorna TRUE se uma condio de componente for TRUE Retorna TRUE se a condio seguinte for FALSE

NOT

37

Usando o Operador AND

AND exige que ambas as condies sejam TRUE.

SQL> 2 3 4

SELECT FROM WHERE AND

empno, ename, job, sal emp sal>=1100 job='CLERK'; JOB SAL --------- --------CLERK 1100 CLERK 1300

EMPNO --------7876 7934

ENAME ---------ADAMS MILLER

38

Usando o Operador OR

OR exige que uma condio seja TRUE.


SQL> 2 3 4 SELECT FROM WHERE OR empno, ename, job, sal emp sal>=1100 job='CLERK'; JOB SAL --------- --------PRESIDENT 5000 MANAGER 2850 MANAGER 2450 MANAGER 2975 SALESMAN 1250 CLERK 950

EMPNO ENAME --------- ---------7839 KING 7698 BLAKE 7782 CLARK 7566 JONES 7654 MARTIN ... 7900 JAMES ... 14 rows selected.

39

Usando o Operador NOT

SQL> SELECT ename, job 2 FROM emp 3 WHERE job NOT IN ('CLERK','MANAGER','ANALYST'); ENAME ---------KING MARTIN ALLEN TURNER WARD JOB --------PRESIDENT SALESMAN SALESMAN SALESMAN SALESMAN

40

Regras de Precedncia

Ordem de Avaliao 1 2 3 4

Operador Todos os operadores de comparao NOT AND OR

Sobreponha regras de precedncia usando parnteses.

41

Regras de Precedncia

SQL> 2 3 4 5

SELECT FROM WHERE OR AND

ename, job, sal emp job='SALESMAN' job='PRESIDENT' sal>1500; JOB SAL JOB SAL --------- ----------------- --------PRESIDENT 5000 PRESIDENT 5000 SALESMAN 1250 SALESMAN 1250 SALESMAN 1600 SALESMAN 1600 SALESMAN 1500 SALESMAN 1500 SALESMAN 1250 SALESMAN 1250

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

42

Regras de Precedncia

Use parnteses para forar a prioridade.


SQL> 2 3 4 5 SELECT FROM WHERE OR AND ename, job, sal emp (job='SALESMAN' job='PRESIDENT') sal>1500;

ENAME ENAME ------------------KING KING ALLEN ALLEN

JOB SAL JOB SAL --------- ----------------- --------PRESIDENT 5000 PRESIDENT 5000 SALESMAN 1600 SALESMAN 1600

43

Clusula ORDER BY

Classificar as linhas com a clusula ORDER BY ASC: ordem crescente, default DESC: ordem decrescente A clusula ORDER BY vem depois na instruo SELECT.

SQL> SELECT ename, job, deptno, hiredate 2 FROM emp 3 ORDER BY hiredate; ENAME JOB DEPTNO HIREDATE ---------- --------- --------- --------SMITH CLERK 20 17-DEC-80 ALLEN SALESMAN 30 20-FEB-81 ... 14 rows selected.

44

Classificando em Ordem Decrescente

SQL> SELECT ename, job, deptno, hiredate 2 FROM emp 3 ORDER BY hiredate DESC; ENAME JOB DEPTNO HIREDATE ---------- --------- --------- --------ADAMS CLERK 20 12-JAN-83 SCOTT ANALYST 20 09-DEC-82 MILLER CLERK 10 23-JAN-82 JAMES CLERK 30 03-DEC-81 FORD ANALYST 20 03-DEC-81 KING PRESIDENT 10 17-NOV-81 MARTIN SALESMAN 30 28-SEP-81 ... 14 rows selected.

45

Classificando por Apelido de Coluna

SQL> SELECT empno, ename, sal*12 annsal 2 FROM emp 3 ORDER BY annsal; EMPNO ENAME ANNSAL --------- ---------- --------7369 SMITH 9600 7900 JAMES 11400 7876 ADAMS 13200 7654 MARTIN 15000 7521 WARD 15000 7934 MILLER 15600 7844 TURNER 18000 ... 14 rows selected.

46

Classificando por Vrias Colunas

A ordem da lista ORDER BY a ordem de classificao.

SQL> SELECT ename, deptno, sal 2 FROM emp 3 ORDER BY deptno, sal DESC; ENAME DEPTNO SAL ---------- --------- --------KING 10 5000 CLARK 10 2450 MILLER 10 1300 FORD 20 3000 ... 14 rows selected.

Voc pode classificar por uma coluna que no esteja na lista SELECT. 47

Sumrio

SELECT FROM [WHERE [ORDER BY

[DISTINCT] {*| coluna [apelido], ...} tabela condio(es)] {coluna, expr, apelido} [ASC|DESC]];

48

Funes de Uma nica Linha

Objetivos: Descrever vrios tipos de funes disponveis no SQL Usar funes de data, nmero e caractere nas instrues SELECT Descrever o uso das funes de converso

49

Funes SQL

Entrada arg 1 arg 2

Funo A funo executa a ao

Sada

Resultado valor

arg n

50

Dois Tipos de Funes SQL

Funes

Funes de Uma nica Linha

Funes de Vrias Linhas

51

Funes de Uma nica Linha

Manipulam itens de dados Aceitam argumentos e retornam um valor Agem em cada linha retornada Retornam um resultado por linha Podem modificar o tipo de dados Podem ser aninhadas

function_name (coluna|expresso, [arg1, arg2,...]) function_name (coluna|expresso, [arg1, arg2,...])

52

Funes de Uma nica Linha

Caractere

Geral

Funes de Uma nica Linha

Nmero

Converso

Data

53

Funes de Caractere

Funes de caractere

Funes de Converso de Maisculas e Minsculas


LOWER UPPER INITCAP

Funes de manipulao de caractere


CONCAT SUBSTR LENGTH INSTR LPAD TRIM

54

Exibindo Dados de Vrias Tabelas

Objetivos: Criar instrues SELECT para obter acesso aos dados a partir de mais de uma tabela usando as junes idnticas e no-idnticas Visualizar dados que, em geral, no correspondem a uma condio de juno usando junes externas Unindo uma tabela a ela mesma

55

Obtendo Dados de Vrias Tabelas

EMP EMPNO -----7839 7698 ... 7934 ENAME ----KING BLAKE ... DEPTNO ... -----... 10 ... 30 10

DEPT DEPTNO -----10 20 30 40 DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON

MILLER ...

EMPNO DEPTNO LOC EMPNO DEPTNO LOC ----- ------- ------------ ------- -------7839 10 NEW YORK 7839 10 NEW YORK 7698 30 CHICAGO 7698 30 CHICAGO 7782 10 NEW YORK 7782 10 NEW YORK 7566 20 DALLAS 7566 20 DALLAS 7654 30 CHICAGO 7654 30 CHICAGO 7499 30 CHICAGO 7499 30 CHICAGO ... ... 14 rows selected. 14 rows selected.

56

O Que uma Juno?

Use uma juno para consultar dados a partir de uma ou mais tabelas.

SELECT SELECT FROM FROM WHERE WHERE

tabela1.coluna, tabela2.coluna tabela1.coluna, tabela2.coluna tabela1, tabela2 tabela1, tabela2 tabela1.coluna1 = tabela2.coluna2; tabela1.coluna1 = tabela2.coluna2;

Criar uma condio de juno na clusula WHERE. Prefixar o nome da coluna com o nome da tabela quando o mesmo nome da coluna aparecer em mais de uma tabela.

57

Produto Cartesiano

Um produto cartesiano formado quando: Uma condio de juno estiver omitida Uma condio de juno estiver invlida Todas as linhas na primeira tabela esto unidas a todas as linhas da segunda tabela Para evitar um produto Cartesiano, sempre inclua uma condio de juno vlida em uma clusula WHERE.

58

Gerando Produto Cartesiano

EMP (14 linhas) EMPNO ENAME EMPNO ENAME ------ ---------- ----7839 KING 7839 KING 7698 BLAKE 7698 BLAKE ... ... 7934 MILLER 7934 MILLER ... ... ... ... ... ... ... ... ... ... DEPTNO DEPTNO ----------10 10 30 30 10 10

DEPT (4 linhas) DEPTNO DNAME LOC DEPTNO DNAME LOC ------ ---------- ------------- ---------- -------10 ACCOUNTING NEW YORK 10 ACCOUNTING NEW YORK 20 RESEARCH 20 RESEARCH DALLAS DALLAS 30 SALES CHICAGO 30 SALES CHICAGO 40 OPERATIONS BOSTON 40 OPERATIONS BOSTON

"Produto Cartesiano: 14*4=56 linhas"

ENAME DNAME ENAME DNAME ----------------------------KING ACCOUNTING KING ACCOUNTING BLAKE ACCOUNTING BLAKE ACCOUNTING ... ... KING RESEARCH KING RESEARCH BLAKE RESEARCH BLAKE RESEARCH ... ... 56 rows selected. 56 rows selected.

59

Tipos de Junes

Juno idntica

Juno no-idntica

Juno externa

Autojuno

60

O Que uma Juno Idntica?

EMP EMPNO ENAME DEPTNO ------ ------- ------7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20 ... 14 rows selected. Chave estrangeira

DEPT DEPTNO DNAME LOC ------- ---------- -------10 ACCOUNTING NEW YORK 30 SALES CHICAGO 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 20 RESEARCH DALLAS 20 RESEARCH DALLAS ... 14 rows selected. Chave primria

61

Recuperando Registros com Junes Idnticas

SQL> SELECT 2 3 FROM 4 WHERE

emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc emp, dept emp.deptno=dept.deptno;

EMPNO ENAME DEPTNO DEPTNO LOC ----- ------ ------ ------ --------7839 KING 10 10 NEW YORK 7698 BLAKE 30 30 CHICAGO 7782 CLARK 10 10 NEW YORK 7566 JONES 20 20 DALLAS ... 14 rows selected.

62

Qualificando Nomes de Coluna Ambguos

Use os prefixos de tabela para qualificar nomes de coluna que esto em vrias tabelas. Melhore o desempenho usando os prefixos de tabela. Diferencie colunas que possuem nomes idnticos, mas que residam em tabelas diferentes usando apelidos de coluna.

63

Condies de Pesquisa Adicional Usando o Operador AND

EMP EMPNO ENAME DEPTNO ------ ------- ------7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20 ... 14 rows selected.

DEPT DEPTNO DNAME ------ --------10 ACCOUNTING 30 SALES 10 ACCOUNTING 20 RESEARCH 30 SALES 30 SALES 30 SALES 30 SALES 30 SALES 20 RESEARCH 20 RESEARCH ... 14 rows selected. LOC -------NEW YORK CHICAGO NEW YORK DALLAS CHICAGO CHICAGO CHICAGO CHICAGO CHICAGO DALLAS DALLAS

64

Usando Apelidos de Tabela

Simplifique consultas usando apelidos de tabela.


SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno; SQL> SELECT e.empno, e.ename, e.deptno, 2 d.deptno, d.loc 3 FROM emp e, dept d 4 WHERE e.deptno= d.deptno;

65

Unindo Mais de Duas Tabelas

CUSTOMER NAME CUSTID NAME CUSTID ------------------------------JOCKSPORTS 100 JOCKSPORTS 100 TKB SPORT SHOP 101 TKB SPORT SHOP 101 VOLLYRITE 102 VOLLYRITE 102 JUST TENNIS 103 JUST TENNIS 103 K+T SPORTS 105 K+T SPORTS 105 SHAPE UP 106 SHAPE UP 106 WOMENS SPORTS 107 WOMENS SPORTS 107 ... ... ... ... 9 rows selected. 9 rows selected.

ORD CUSTID CUSTID ORDID ORDID ------- ------------- ------101 610 101 610 102 611 102 611 104 612 104 612 106 601 106 601 102 602 ITEM 102 602 106 604 106 604 ORDID ITEMID ORDID ITEMID 106 605 106 ------ ------605 ------ ------... ... 610 3 610 3 21 rows selected. 21 rows selected. 611 1 611 1 612 1 612 1 601 1 601 1 602 1 602 1 ... ... 64 rows selected. 64 rows selected.

66

Junes No-idnticas

EMP EMPNO ENAME SAL ------ ------- -----7839 KING 5000 7698 BLAKE 2850 7782 CLARK 2450 7566 JONES 2975 7654 MARTIN 1250 7499 ALLEN 1600 7844 TURNER 1500 7900 JAMES 950 ... 14 rows selected.

SALGRADE GRADE LOSAL HISAL ----- ----- -----1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999

"o salrio na tabela EMP est entre salrio inferior e salrio superior na tabela SALGRADE"

67

Recuperando Registros com Junes No-idnticas

SQL> 2 3 4

SELECT FROM WHERE BETWEEN

e.ename, e.sal, s.grade emp e, salgrade s e.sal s.losal AND s.hisal;

ENAME SAL GRADE ---------- --------- --------JAMES 950 1 SMITH 800 1 ADAMS 1100 1 ... 14 rows selected.

68

Junes Externas

EMP ENAME ----KING BLAKE CLARK JONES ...

DEPTNO -----10 30 10 20

DEPT DEPTNO -----10 30 10 20 ... 40

DNAME ---------ACCOUNTING SALES ACCOUNTING RESEARCH OPERATIONS

Nenhum funcionrio do departamento OPERATIONS

69

Junes Externas

Use uma juno externa para consultar tambm todas as linhas que em geral no atendem condio de juno. O operador de juno externo um sinal de adio (+).

SELECT SELECT FROM FROM WHERE WHERE SELECT SELECT FROM FROM WHERE WHERE

tabela1.coluna, tabela2.coluna tabela1.coluna, tabela2.coluna tabela1, tabela2 tabela1, tabela2 tabela1.coluna(+) = tabela2.coluna; tabela1.coluna(+) = tabela2.coluna; tabela1.coluna , tabela1.coluna , tabela1, tabela2 tabela1, tabela2 tabela1.coluna = tabela1.coluna = tabela2.coluna tabela2.coluna tabela2.coluna(+); tabela2.coluna(+);

70

Usando Junes Externas

SQL> 2 3 4

SELECT FROM WHERE ORDER BY

e.ename, d.deptno, d.dname emp e, dept d e.deptno(+) = d.deptno e.deptno;

ENAME DEPTNO DNAME ---------- --------- ------------KING 10 ACCOUNTING CLARK 10 ACCOUNTING ... 40 OPERATIONS 15 rows selected.

71

Autojunes

EMP (WORKER) EMPNO ----7839 7698 7782 7566 7654 7499 ENAME -----KING BLAKE CLARK JONES MARTIN ALLEN MGR ---7839 7839 7839 7698 7698

EMP (MANAGER) EMPNO ENAME ----- -------7839 7839 7839 7698 7698 KING KING KING BLAKE BLAKE

"MGR na tabela WORKER igual a EMPNO na tabela MANAGER"

72

Unindo uma Tabela a Ela Mesma

SQL> SELECT worker.ename||' works for '||manager.ename 2 FROM emp worker, emp manager 3 WHERE worker.mgr = manager.empno; WORKER.ENAME||'WORKSFOR'||MANAG WORKER.ENAME||'WORKSFOR'||MANAG ------------------------------------------------------------BLAKE works for KING BLAKE works for KING CLARK works for KING CLARK works for KING JONES works for KING JONES works for KING MARTIN works for BLAKE MARTIN works for BLAKE ... ... 13 rows selected. 13 rows selected.

73

Sumrio

SELECT SELECT FROM FROM WHERE WHERE

tabela1.coluna, tabela2.coluna tabela1.coluna, tabela2.coluna tabela1, tabela2 tabela1, tabela2 tabela1.coluna1 = tabela2.coluna2; tabela1.coluna1 = tabela2.coluna2;

Juno idntica

Juno no-idntica

Juno externa

Autojuno

74

SQL: Lista de Exerccio


1. Escreva uma query para mostrar o nome do empregado, nmero e nome do departamento para todos os empregados 2. Crie uma nica lista de todos os cargos que esto no departamento 30. 3. Escreva uma query para mostrar o nome do empregado, nome e localizao do departamento de todos os empregados que ganham comisso 4. Mostre o nome do empregado e nome do departamento para todo os empregado que tenha um A em seu nome. Salve em p4q4.sql. 5. Escreva uma query para mostrar o nome, cargo, nmero e nome do departamento de todos os empregados que trabalham em DALLAS 6. Mostre o nome e nmero do empregado com o seu respectivo gerente, nome e nmero. Nomeie as colunas como Employee, emp#, Manager, and Mgr#, respectivamente. Salve em p4q6.sql 7. Modifique p4q6.sql para mostrar todos os empregados, incluindo King, que no tem gerente. Salve em p4q7.sql. Execute.

75

SQL: Lista de Exerccio

8. Crie uma query que mostre o nome do empregado, nmero do departamento e todos os empregados que trabalham no mesmo departamento. Nomeie cada coluna apropriadamente. 9. Mostre a estrutura da tabela SALGRADE. Crie uma query que mostre o nome, cargo, nome do departamento, salrio e a faixa salarial de todos os empregados. 10. Crie uma query para mostrar o nome e data de contratao de todos empregados contratado aps o Blake. 11. Mostre todos os nomes dos empregados com suas datas de contrataes, nome dos gerentes e datas de contrataes dos empregados que foram contratados antes dos seus gerentes. Nomeie as colunas como Employee, Emp Hiredate, Manager, and Mgr Hiredate, respectivamente. 12. Crie uma query que mostre o nome do empregado e salrio como um montante de asteriscos. Cada asterisco significa centenas de dlares. Ordene os dados em ordem descendente de salrio. Nomeie a coluna como EMPLOYEE_AND_THEIR_SALARIES.

76

Agregando Dados Usando Funes de Grupo

Objetivos: Identificar as funes de grupo disponveis Descrever o uso de funes de grupo Agrupar dados usando a clusula GROUP BY Incluir ou excluir linhas agrupadas usando a clusula HAVING

77

O Que So Funes de Grupo?


As funes de grupo operam em conjuntos de linhas para fornecer um resultado por grupo.

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

"salrio mximo na tabela EMP"

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

78

Tipos de Funes de Grupo

AVG COUNT MAX MIN STDDEV SUM VARIANCE


79

Usando Funes de Grupo

SELECT FROM [WHERE [GROUP BY [ORDER BY

[coluna,] group_function(coluna) tabela condio] coluna] coluna];

80

Usando Funes AVG e SUM

Voc pode usar AVG e SUM para dados numricos. SQL> SELECT 2 3 FROM 4 WHERE AVG(sal), MAX(sal), MIN(sal), SUM(sal) emp job LIKE 'SALES%';

AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) -------- --------- --------- --------1400 1600 1250 5600

81

Usando Funes MIN e MAX

Voc pode usar MIN e MAX para qualquer tipo de dados.

SQL> SELECT 2 FROM

MIN(hiredate), MAX(hiredate) emp;

MIN(HIRED MAX(HIRED --------- --------17-DEC-80 12-JAN-83

82

Usando a Funo COUNT

COUNT(*) retorna o nmero de linhas em uma tabela.


SQL> SELECT 2 FROM 3 WHERE COUNT(*) --------6 COUNT(*) emp deptno = 30;

83

Usando a Funo COUNT

COUNT(expr) retorna o nmero de linhas no nulas.

SQL> SELECT 2 FROM 3 WHERE COUNT(COMM) ----------4

COUNT(comm) emp deptno = 30;

84

Funes de Grupo e Valores Nulos

As funes de grupo ignoram valores nulos na coluna.

SQL> SELECT AVG(comm) 2 FROM emp; AVG(COMM) --------550

85

Usando a Funo NVL com Funes de Grupo

A funo NVL fora as funes de grupo a inclurem valores nulos.


SQL> SELECT AVG(NVL(comm,0)) 2 FROM emp; AVG(NVL(COMM,0)) ---------------157.14286

86

Criando Grupos de Dados

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

2916.6667

DEPTNO AVG(SAL) "salrio mdio ------- --------na tabela 2175 10 2916.6667 EMP para cada 20 2175 departamento" 30 1566.6667
1566.6667

87

Criando Grupos de Dados: Clusula GROUP BY

SELECT FROM [WHERE [GROUP BY [ORDER BY

coluna, group_function(coluna) tabela condio] group_by_expression] coluna];

Divida linhas de uma tabela em grupos menores usando a clusula GROUP BY.

88

Usando a Clusula GROUP BY

Todas as colunas na lista SELECT que no estejam em funes de grupo devem estar na clusula GROUP BY

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 GROUP BY deptno; DEPTNO AVG(SAL) --------- --------10 2916.6667 20 2175 30 1566.6667

89

Usando a Clusula GROUP BY

A coluna GROUP BY no precisa estar na lista SELECT SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY deptno; AVG(SAL) --------2916.6667 2175 1566.6667

90

Agrupando por Mais de Uma Coluna

EMP
DEPTNO --------10 10 10 20 20 20 20 20 30 30 30 30 30 30 JOB SAL --------- --------MANAGER 2450 PRESIDENT 5000 CLERK 1300 CLERK 800 CLERK 1100 ANALYST 3000 ANALYST 3000 MANAGER 2975 SALESMAN 1600 MANAGER 2850 SALESMAN 1250 CLERK 950 SALESMAN 1500 SALESMAN 1250

"soma de salrios na tabela EMP para cada cargo, agrupados por departamento"

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

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

91

Usando a Clusula GROUP BY em Vrias Colunas

SQL> SELECT deptno, job, sum(sal) 2 FROM emp 3 GROUP BY deptno, job; DEPTNO JOB SUM(SAL) --------- --------- --------10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 ... 9 rows selected.

92

Consultas Ilegais Usando Funes de Grupo

Qualquer coluna ou expresso na lista SELECT que no seja uma funo agregada deve estar na clusula GROUP BY.

SQL> SQL> 2 2

a clusu l en a ausent Colun SELECT deptno, COUNT(ename) SELECT deptno, COUNT(ename)


* * ERROR at line 1: ERROR at line 1: ORA-00937: Nenhuma funo ORA-00937: Nenhuma funo (Not a single-group group (Not a single-group group

SELECT SELECT FROM FROM

deptno, COUNT(ename) deptno, COUNT(ename) emp; P emp; la GROU

BY

de grupo de grupo nico de grupo de grupo nico function) function)

93

Consultas Ilegais Usando Funes de Grupo

No possvel usar a clusula WHERE para restringir grupos. Use a clusula HAVING para restringir grupos. SQL> SQL> 2 2 3 3 4 4

ula s u pos cl u a ar i r g r s l u ring e WHERE AVG(sal) > 2000 sv rest WHERE AVG(sal) > 2000 s * po ara * o Ep ERROR at line 3: ERROR at line 3: N ORA-00934: A funo de ER ORA-00934: A funo de grupo no permitida aqui grupo no permitida aqui WH allowed here) (Group function is not allowed here) (Group function is not
SELECT SELECT FROM FROM WHERE WHERE GROUP BY GROUP BY deptno, AVG(sal) deptno, AVG(sal) emp emp AVG(sal) > 2000 AVG(sal) > 2000 deptno; deptno;

94

Excluindo Resultados do Grupo

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

5000 "salrio mximo por departamento maior do que US$ 2.900"

3000

DEPTNO MAX(SAL) --------- --------10 5000 20 3000

2850

95

Excluindo Resultados do Grupo: Clusula HAVING

Use a clusula HAVING para restringir grupos As linhas so agrupadas. A funo de grupo aplicada. Os grupos que correspondem clusula HAVING so exibidos. SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY coluna, group_function tabela condio] group_by_expression] group_condition] coluna];

96

Usando a Clusula HAVING

SQL> 2 3 4

SELECT FROM GROUP BY HAVING

deptno, max(sal) emp deptno max(sal)>2900;

DEPTNO MAX(SAL) --------- --------10 5000 20 3000

97

Usando a Clusula HAVING

SQL> 2 3 4 5 6

SELECT FROM WHERE GROUP BY HAVING ORDER BY

job, SUM(sal) PAYROLL emp job NOT LIKE 'SALES%' job SUM(sal)>5000 SUM(sal);

JOB PAYROLL --------- --------ANALYST 6000 MANAGER 8275

98

Aninhando Funes de Grupo

Exiba o salrio mdio mximo

SQL> SELECT max(avg(sal)) 2 FROM emp 3 GROUP BY deptno; MAX(AVG(SAL)) ------------2916.6667

99

Sumrio

SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY

coluna, group_function(coluna) tabela condio] group_by_expression] group_condition] coluna];

Ordem de avaliao das clusulas: clusula WHERE clusula GROUP BY clusula HAVING

100

SQL: Lista de Exerccio


Determine se verdadeiro(V) ou falso(F) as seguintes declaraes:

1. Funes de grupo trabalham em muitas linhas para produzir um resultado. 2. Funes de grupo usam nulls nos seus clculos. 3. A clusula WHERE restringe linhas antes de inclu-las em clculos de funes de grupos. 4. Mostre o maior, o menor, a soma e a mdia dos salrios de todos os empregados. Nomeie as colunas como Maximum, Minimum, Sum, and Average, respectivamente. Arredonde os resultados para inteiro. Salve em p5q4.sql. 5. Modifique p5q4.sql para mostrar o menor, o maior, a soma e a mdia dos salrios para cada tipo de cargo. Salve em p5q5.sql. 6. Escreva uma query para mostrar o nmero de empregados com o mesmo cargo. 7. Determine o nmero de gerentes sem list-los. Nomeie a coluna como Number of Managers.

101

SQL: Lista de Exerccio


Determine se verdadeiro(V) ou falso(F) as seguintes declaraes:

8. Escreva uma query que mostre a diferena entre o maior e menor salrio. Nomeie a coluna como DIFFERENCE. 9. Mostre o nmero do gerente e o salrio mais baixo pago aos funcionrios daquele gerente. Exclua o empregado que no possua gerente. Exclua qualquer grupo where o menor salrio seja menor que $1000. Ordene por salrio (descendente). 10. Escreva uma query para mostrar o nome do departamento, nome da localizao, nmero de empregados, e mdia de salrio para todos os empregados daquele departamento. Nomeie as colunas como dname, loc, Number of People, and Salary, respectivamente. 11. Crie uma query que mostre o nmero total de empregados e daquele total, o nmero que foram contratados em 1980, 1981, 1982, e 1983. Nomeie as colunas de forma apropriada.

102

Subconsultas

Objetivos: Descrever os tipos de problemas que as subconsultas podem resolver Definir as subconsultas Listar os tipos de subconsultas Criar subconsultas de uma nica linha e de vrias linhas

103

Usando uma Subconsulta para Resolver um Problema

"Quem tem um salrio maior que o de Jones?"

Consulta principal

"Que funcionrios tm um salrio maior que o salrio de Jones?"


Subconsulta

"Qual o salrio de Jones?"

104

Subconsultas

SELECT FROM WHERE

select_list tabela operador expr (SELECT FROM

select_list tabela);

A subconsulta (consulta interna) executada uma vez antes da consulta principal. O resultado da subconsulta usado pela consulta principal (consulta externa).

105

Usando uma Subconsulta

SQL> SELECT ename 2 FROM emp 2975 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566); ENAME ENAME ------------------KING KING FORD FORD SCOTT SCOTT

106

Diretrizes para o Uso de Subconsultas

Coloque as subconsultas entre parnteses. Coloque as subconsultas no lado direito do operador de comparao. No adicione uma clusula ORDER BY a uma subconsulta. Use operadores de uma nica linha com subconsultas de uma nica linha. Use operadores de vrias linhas com subconsultas de vrias linhas. 107

Tipos de Subconsultas

Subconsulta de uma nica linha


Consulta principal Subconsulta retorna

CLERK

Subconsulta de vrias linhas


Consulta principal Subconsulta retorna

CLERK MANAGER

Subconsulta de vrias colunas


Consulta principal Main query Subconsulta Subquery retorna

CLERK 7900 MANAGER 7698

108

Subconsultas de uma nica Linha

Retorne somente uma linha Use operadores de comparao de uma nica linha

Operador = > >= < <= <>

Significado Igual a Maior do que Maior do que ou igual a Menor do que Menor ou igual a Diferente de

109

Executando Subconsultas de uma nica Linha

SQL> 2 3 4 5 6 7 8 9 10

SELECT FROM WHERE

AND

ename, job emp job = (SELECT FROM WHERE sal > (SELECT FROM emp WHERE empno JOB JOB ----------------CLERK CLERK

CLERK

job emp empno = 7369)


1100

sal = 7876);

ENAME ENAME ------------------MILLER MILLER

110

Usando Funes de Grupo em uma Subconsulta

SQL> SELECT 2 FROM 3 WHERE 4 5 ENAME ENAME ------------------SMITH SMITH

ename, job, sal emp sal = (SELECT FROM JOB SAL JOB SAL --------- ----------------- --------CLERK 800 CLERK 800

800

MIN(sal) emp);

111

Clusula HAVING com Subconsultas

O Oracle Server primeiro executa as subconsultas. O Oracle Server retorna os resultados para a clusula HAVING da consulta principal.
SQL> 2 3 4 5 6 7 SELECT FROM GROUP BY HAVING deptno, MIN(sal) emp deptno MIN(sal) > (SELECT FROM WHERE

800

MIN(sal) emp deptno = 20);

112

O que H de Errado com esta Instruo?

Ope nsulta o subc ERROR:

SQL> SELECT empno, ename 2 FROM emp com 3 WHERE sal = li n h a 4 (SELECTa MIN(sal) nic inhas uma rias l emp 5 de FROM GROUP BY deptno); a r de v r6 do ERROR: ORA-01427: A subconsulta de uma nica linha retorna ORA-01427: A subconsulta de uma nica linha retorna mais de uma linha (Single-row subquery returns mais de uma linha (Single-row subquery returns more than one row) more than one row) no rows selected no rows selected

113

Esta Instruo Ir Funcionar?

SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE ename='SMYTHE');

r alo v um h nen a orn no rows selected no rows selected ret no ul ta ons ubc As

114

Subconsultas de Vrias Linhas

Retorne mais de uma linha Use operadores de comparao de vrias linhas


Operador IN ANY Significado Igual a qualquer membro na lista Compare o valor a cada valor retornado pela subconsulta Compare o valor a todo valor retornado pela subconsulta

ALL

115

Usando o Operador ANY em Subconsultas de Vrias Linhas

SQL> 2 3 4 5 6 7

SELECT FROM WHERE

AND

empno, ename, job 1300 1100 emp 800 sal < ANY 950 (SELECT sal FROM emp WHERE job = 'CLERK') job <> 'CLERK'; JOB JOB ----------------SALESMAN SALESMAN SALESMAN SALESMAN

EMPNO EMPNO ----------------7654 7654 7521 7521

ENAME ENAME ------------------MARTIN MARTIN WARD WARD

116

Usando o Operador ALL em Subconsultas de Vrias Linhas

SQL> SELECT 2 FROM 3 WHERE 4 5 6 EMPNO EMPNO ----------------7839 7839 7566 7566 7902 7902 7788 7788

empno, ename, job 1566.6667 2175 emp 2916.6667 sal > ALL (SELECT avg(sal) FROM emp GROUP BY deptno); JOB JOB ----------------PRESIDENT PRESIDENT MANAGER MANAGER ANALYST ANALYST ANALYST ANALYST

ENAME ENAME ------------------KING KING JONES JONES FORD FORD SCOTT SCOTT

117

Sumrio

As subconsultas so teis quando uma consulta baseia-se em valores desconhecidos.

SELECT FROM WHERE

select_list tabela operador expr (SELECT select_list FROM tabela);

118

SQL: Lista de Exerccio


1. Escreva uma query para mostrar o nome do empregado e data de contratao para todos os empregados do departamento do Blake. Exclua o Blake. 2. Crie uma query para mostrar o nmero e nome dos empregados que ganham acima da meia salarial. Ordene os resultados por salrio (decrescente). 3. Escre uma query que mostre o nmero e nome dos empregados que trabalham em um departamento que tem um empregado cujo nome contem um T. salve em p6q3.sql. 4. Mostre o nome do empregado, nmero do departamento e cargo para todos eo empregados lotados em Dallas. 5. Mostre o nome do empregado e salrio de todos os empregados do King. 6. Mostre o nmero do departamento, nome do empregado e cargo de todos os empregados do departamento Sales. 7. Modifiique p6q3.sql para mostrar o nmero e nome do empregado, salrio de todos os empregados que ganham mais que mdia salarial e que trabalham em um departamento que possui um empregado com um T em seu nome. Salve como p6q7.sql. Execute.

119

Subconsultas de Vrias Colunas

Objetivos: Criar uma subconsulta de vrias colunas Descrever e explicar o comportamento de subconsultas quando valores nulos forem recuperados Criar uma subconsulta em uma clusula FROM

120

Subconsultas de Vrias Colunas

Consulta principal
MANAGER 10

Subconsulta
SALESMAN MANAGER CLERK 30 10 20

A consulta principal compara


MANAGER 10

Valores de uma subconsulta de vrias linhas e de vrias colunas


SALESMAN MANAGER CLERK 30 10 20

121

Usando Subconsultas de Vrias Colunas

Exiba a ID da ordem, a ID do produto e a quantidade de itens na tabela de itens que corresponde ID do produto e quantidade de um item na ordem 605.
SQL> 2 3 4 5 6 7 SELECT FROM WHERE ordid, prodid, qty item (prodid, qty) IN (SELECT prodid, qty FROM item WHERE ordid = 605) ordid <> 605;

AND

122

Usando Subconsultas de Vrias Colunas

Exiba o nmero da ordem, o nmero do produto e a quantidade de qualquer item em que o nmero do produto e a quantidade correspondam ao nmero do produto e quantidade de um item na ordem 605.
SQL> 2 3 4 5 6 7 SELECT FROM WHERE ordid, prodid, qty item (prodid, qty) IN (SELECT prodid, qty FROM item WHERE ordid = 605) ordid <> 605;

AND

123

Comparaes de Coluna

Aos pares
PRODID 101863 100861 102130 100890 100870 101860 QTY 100 100 10 5 500 50

Sem ser aos pares


PRODID 101863 100861 102130 100890 100870 101860 QTY 100 100 10 5 500 50

124

Subconsulta de Comparao que No Seja aos Pares

Exiba o nmero da ordem, o nmero do produto e a quantidade de qualquer item em que o nmero do produto e a quantidade correspondam a qualquer nmero do produto e quantidade de um item na ordem 605.
SQL> 2 3 4 5 6 7 8 9 SELECT FROM WHERE AND AND ordid, prodid, qty item prodid IN (SELECT FROM WHERE qty IN (SELECT FROM WHERE ordid <> 605;

prodid item ordid = 605) qty item ordid = 605)

125

Subconsulta que No Seja aos Pares

ORDID PRODID QTY --------- --------- --------609 100870 5 616 100861 10 616 102130 10 621 100861 10 618 100870 10 618 100861 50 616 100870 50 617 100861 100 619 102130 100 615 100870 100 617 101860 100 621 100870 100 617 102130 100 . . . 16 rows selected.

126

Valores Nulos em uma Subconsulta

SQL> SELECT employee.ename 2 FROM emp employee 3 WHERE employee.empno NOT IN 4 (SELECT manager.mgr 5 FROM emp manager); no rows selected.

127

Usando uma Subconsulta na Clusula FROM

SQL> 2 3 4 5 6

SELECT FROM WHERE AND

a.ename, a.sal, a.deptno, b.salavg emp a, (SELECT deptno, avg(sal) salavg FROM emp GROUP BY deptno) b a.deptno = b.deptno a.sal > b.salavg;

ENAME SAL DEPTNO SALAVG ENAME SAL DEPTNO SALAVG ---------- --------- --------- ------------------- --------- --------- ---------KING 5000 10 2916.6667 KING 5000 10 2916.6667 JONES 2975 20 2175 JONES 2975 20 2175 SCOTT 3000 20 2175 SCOTT 3000 20 2175 ... ... 6 rows selected. 6 rows selected.

128

SQL: Lista de Exerccio

1. Escreva uma query para mostrar nome do empregado, nmero do departamento e salrio de qualquer empregado cujo nmero do departamento e salrio casam ambos com o nmero do departamento e salrio de qualquer empregado que ganha comisso. 2. Mostre o nome do empregado, nome do departamento e salrio de qualquer empregado cujo salrio e comisso casam ambos com com o salrio e comisso de qualquer empregado lotado em Dallas. 3. Crie uma query para mostrar o nome, data de contratao e salrio para todos os empregados que tenham o mesmo salrio e comisso do Scott. 4. Crie uma query para mostrar os empregados que ganham salrio maior que qualquer CLERKS. Ordene o resultado por salrio (decrescente).

129

Manipulao de Dados

Objetivos: Descrever cada instruo DML Inserir linhas em uma tabela Atualizar linhas em uma tabela Deletar linhas de uma tabela Controlar transaes

130

DML (Data Manipulation Language)

Uma instruo DML executada quando voc: Adiciona novas linhas a uma tabela Modifica linhas existentes em uma tabela Remove linhas existentes de uma tabela Uma transao consiste em um conjunto de instrues DML que formam uma unidade lgica de trabalho.

131

Adicionando uma Nova Linha em uma Tabela

50 DEVELOPMENT 50 DEVELOPMENT DETROIT DETROIT Nova linha DEPT DEPTNO -----10 20 30 40 DNAME LOC ---------- -------ACCOUNTING NEW YORK RESEARCH DALLAS SALES CHICAGO OPERATIONS BOSTON

" inserir uma nova linha na tabela DEPT"


DEPT DEPTNO -----10 20 30 40 DNAME LOC ---------- -------ACCOUNTING NEW YORK RESEARCH DALLAS SALES CHICAGO OPERATIONS BOSTON

50 DEVELOPMENT DETROIT

132

A Instruo INSERT

Adicione novas linhas em uma tabela usando a instruo INSERT.

INSERT INTO INSERT INTO VALUES VALUES

tabela tabela (valor (valor

[(coluna [, coluna...])] [(coluna [, coluna...])] [, valor...]); [, valor...]);

Somente uma linha inserida por vez com esta sintaxe.

133

Inserindo Novas Linhas

Insira uma nova linha contendo valores para cada coluna. Liste valores na ordem default das colunas na tabela. Liste opcionalmente as colunas na clusula INSERT. SQL> INSERT INTO 2 VALUES 1 row created. dept (deptno, dname, loc) (50, 'DEVELOPMENT', 'DETROIT');

Coloque os valores de data e caractere entre aspas simples.

134

Inserindo Linhas com Valores Nulos

Mtodo implcito: Omita a coluna da lista de colunas. SQL> INSERT INTO 2 VALUES 1 row created. dept (deptno, dname ) (60, 'MIS');

Mtodo explcito: Especifique a palavra-chave NULL. SQL> INSERT INTO 2 VALUES 1 row created. dept (70, 'FINANCE', NULL);

135

Inserindo Valores Especiais

A funo SYSDATE registra a data e hora atuais. SQL> INSERT INTO 2 3 4 VALUES 5 6 1 row created. emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) (7196, 'GREEN', 'SALESMAN', 7782, SYSDATE, 2000, NULL, 10);

136

Inserindo Valores Especficos de Data

Adicionar um novo funcionrio. SQL> INSERT INTO 2 VALUES 3 4 1 row created. emp (2296,'AROMANO','SALESMAN',7782, TO_DATE('FEB 3, 1997', 'MON DD, YYYY'), 1300, NULL, 10);

Verifique sua adio. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------- -------- ---- --------- ---- ---- -----2296 AROMANO SALESMAN 7782 03-FEB-97 1300 10

137

Inserindo Valores Usando Variveis de Substituio

Crie um script interativo usando parmetros de substituio do SQL*Plus SQL> INSERT INTO 2 VALUES 3 dept (deptno, dname, loc) (&department_id, '&department_name', '&location');

Enter value for department_id: 80 Enter value for department_name: EDUCATION Enter value for location: ATLANTA 1 row created.

138

Criando um Script com Prompts Personalizados

ACCEPT armazena o valor em uma varivel. PROMPT exibe o texto personalizado.


ACCEPT ACCEPT ACCEPT INSERT INTO VALUES department_id PROMPT 'Please enter the department number:' department_name PROMPT 'Please enter the department name:' location PROMPT 'Please enter the location:' dept (deptno, dname, loc) (&department_id, '&department_name', '&location');

139

Copiando Linhas a partir de Outra Tabela

Crie a instruo INSERT com uma 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.

No use a clusula VALUES. Faa a correspondncia do nmero de colunas na clusula INSERT com o nmero de colunas na subconsulta.

140

Alterando os Dados em uma Tabela

EMP EMPNO ENAME 7839 7698 7782 7566 ... KING BLAKE CLARK JONES JOB PRESIDENT MANAGER MANAGER MANAGER EMP EMPNO ENAME 7839 7698 7782 7566 ... KING BLAKE CLARK JONES JOB PRESIDENT MANAGER MANAGER MANAGER ... DEPTNO 10 30 20 10 20 ... DEPTNO

"atualize uma 10 linha em uma tabela EMP" 30


10 20

141

A instruo UPDATE

Modifique linhas existentes com a instruo UPDATE.

UPDATE UPDATE SET SET [WHERE [WHERE

tabela tabela coluna = valor [, coluna = valor, ...] coluna = valor [, coluna = valor, ...] condio]; condio];

Atualize mais de uma linha por vez, se necessrio.

142

Atualizando Linhas em uma Tabela

Uma linha ou linhas especficas so modificadas quando voc especifica a clusula WHERE. SQL> UPDATE emp 2 SET deptno = 20 3 WHERE empno = 7782; 1 row updated. Todas as linhas na tabela so modificadas quando voc omite a clusula WHERE. SQL> UPDATE employee SQL> UPDATE employee 2 SET deptno = 20; 2 SET deptno = 20; 14 rows updated. 14 rows updated.

143

Atualizando com Subconsulta de Vrias Colunas

Atualize o cargo e o departamento do funcionrio 7698 para coincidir com o do funcionrio 7499.

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.

144

Atualizando Linhas Baseadas em Outra Tabela

Use subconsultas em instrues UPDATE para atualizar linhas em uma tabela baseada em valores de outra tabela.

SQL> UPDATE employee SQL> UPDATE employee 2 SET deptno = (SELECT 2 SET deptno = (SELECT 3 FROM 3 FROM 4 WHERE 4 WHERE 5 WHERE job = (SELECT 5 WHERE job = (SELECT 6 FROM 6 FROM 7 WHERE 7 WHERE 2 rows updated. 2 rows updated.

deptno deptno emp emp empno = empno = job job emp emp empno = empno =

7788) 7788) 7788); 7788);

145

Atualizando Linhas: Erro de Restrio de Integridade

SQL> SQL> 2 2 3 3

UPDATE UPDATE SET SET WHERE WHERE

emp emp deptno deptno deptno deptno

= = = =

55 55 10; 10;

UPDATE emp er UPDATE emp * * m n ERROR at line 1: ERROR at line 1: o econstraint (USR.EMP_DEPTNO_FK) ORA-02291: integrity tconstraint (USR.EMP_DEPTNO_FK) ORA-02291: integrity s violated - parent key not found xi violated - parent ekey not found

de

de

am t ar p

o nt e

55

o N

146

Removendo uma Linha de uma Tabela

DEPT DEPTNO -----10 20 30 40 50 60 ... DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON DEVELOPMENT DETROIT MIS

" remova uma linha da tabela DEPT"


DEPT DEPTNO -----10 20 30 40 60 ... DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS MIS LOC -------NEW YORK DALLAS CHICAGO BOSTON

147

A Instruo DELETE

Voc pode remover linhas existentes de uma tabela usando a instruo DELETE.
DELETE [FROM] DELETE [FROM] [WHERE [WHERE tabela tabela condio]; condio];

148

Deletando Linhas de uma Tabela

Linhas especficas so deletadas quando voc especifica a clusula WHERE. SQL> DELETE FROM SQL> DELETE FROM 2 WHERE 2 WHERE 1 row deleted. 1 row deleted. department department dname = 'DEVELOPMENT'; dname = 'DEVELOPMENT';

-Todas as linhas na tabela sero deletadas se voc omitir a clusula WHERE.

SQL> DELETE FROM SQL> DELETE FROM 4 rows deleted. 4 rows deleted.

department; department;

149

Deletando Linhas Baseadas em Outra Tabela

Use subconsultas em instrues DELETE para remover linhas de uma tabela baseadas em valores de outra tabela.

SQL> DELETE FROM 2 WHERE 3 4 5 6 rows deleted.

employee deptno = (SELECT FROM WHERE

deptno dept dname ='SALES');

150

Deletando Linhas: Erro de Restrio de Integridade

ha a lin ri SQL> DELETE FROM dept SQL> DELETE FROM dept a m 2 WHERE deptno = 10; m 2 WHERE deptno = 10; u ri a em tar ve p eir ele cha ang DELETE FROM dept e d a str DELETE FROM dept od um e e * * o p ha av ERROR at line 1: ERROR at line 1: nconstraint (USR.EMP_DEPTNO_FK) ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK) en o ch ORA-02292: integrity c ont found violated - child o record found . violated - child record om V ec c u da bela q a s ra ta u t ou
151

Transaes de Banco de Dados

Consistem de uma das seguintes instrues: Instrues DML que fazem uma alterao consistente nos dados Uma instruo DDL Uma instruo DCL

152

Transaes de Banco de Dados

Comea quando for executada a primeira instruo SQL executvel Termina com um dos seguintes eventos: COMMIT ou ROLLBACK emitida Instruo DDL ou DCL executada (commit automtico) O usurio sai O sistema cai

153

Vantagens das Instrues COMMIT e ROLLBACK

Garantir consistncia de dados Visualizar alteraes nos dados antes de fazer as alteraes permanentemente Agrupar operaes relacionadas logicamente

154

Controlando Transaes

Transao

INSERT
COMMIT Savepoint A

UPDATE

INSERT
Savepoint B

DELETE

ROLLBACK para Savepoint B

ROLLBACK para Savepoint A

ROLLBACK

155

Estado dos Dados Antes de COMMIT ou ROLLBACK

O estado anterior dos dados pode ser recuperado. O usurio atual pode revisar os resultados das operaes DML usando a instruo SELECT. Outros usurios no podero ver os resultados das instrues DML do usurio atual. As linhas afetadas so bloqueadas, outros usurios no podero alterar os dados dentro das linhas afetadas.

156

Estado dos Dados Aps COMMIT

As alteraes nos dados so feitas permanentemente no banco de dados. O estado anterior dos dados perdido permanentemente. Todos os usurios podem ver os resultados. As linhas afetadas so desbloqueadas, essas linhas esto disponveis para serem manipuladas por outros usurios. Todos os savepoints so apagados.

157

Submetendo Dados a Commit

Fazer as alteraes.
SQL> UPDATE emp SQL> UPDATE emp 2 SET deptno = 10 2 SET deptno = 10 3 WHERE empno = 7782; 3 WHERE empno = 7782; 1 row updated. 1 row updated.

Submeter alteraes a commit.


SQL> COMMIT; Commit complete.

158

Estado dos Dados Aps ROLLBACK

Descarte todas as alteraes pendentes usando a instruo ROLLBACK. As alteraes nos dados so desfeitas. O estado anterior dos dados restaurado. As linhas afetadas so desbloqueadas.

SQL> DELETE FROM 14 rows deleted. SQL> ROLLBACK; Rollback complete.

employee;

159

Fazendo Roll Back de Alteraes para um Marcador

Crie um marcador em uma transao atual usando a instruo SAVEPOINT. Faa roll back do marcador usando a instruo ROLLBACK TO SAVEPOINT.
SQL> UPDATE... SQL> SAVEPOINT update_done; Savepoint created. SQL> INSERT... SQL> ROLLBACK TO update_done; Rollback complete.

160

Rollback no Nvel da Instruo

Se uma nica instruo DML falhar durante a execuo, ser feito roll back somente dessa instruo. O Oracle Server implementa um savepoint implcito. Todas as outras alteraes so mantidas. O usurio deve finalizar as transaes explicitamente usando uma instruo COMMIT ou ROLLBACK.

161

Consistncia na Leitura

A consistncia na leitura garante sempre uma exibio consistente dos dados. As alteraes feitas por um usurio no entram em conflito com as alteraes feitas por outro usurio. A consistncia na leitura garante que nos mesmos dados: Os leitores no esperem pelos autores Os autores no esperem pelos leitores

162

Implementao da Consistncia na Leitura

UPDATE SET WHERE Usurio A

emp sal = 2000 ename = 'SCOTT';

Blocos de dados Segmentos de rollback


dados alterados e dados intactos antes de alterar dados "antigos"

SELECT * FROM emp;

Imagem da consistncia na leitura

Usurio B

163

Bloqueando

Bloqueios:: Impedem a interao destrutiva entre transaes simultneas No requerem ao do usurio Usam automaticamente o nvel mais baixo de restrio So mantidos durante a durao da transao H dois modos bsicos: Exclusivo Compartilhado

164

Sumrio

Instruo INSERT UPDATE DELETE COMMIT SAVEPOINT ROLLBACK

Descrio Adiciona uma nova linha tabela Modifica linhas existentes na tabela Remove linhas existentes da tabela Torna permanente todas as alteraes pendentes Permite um rollback no marcador do savepoint Descarta todas as alteraes nos dados pendentes

165

Você também pode gostar