Escolar Documentos
Profissional Documentos
Cultura Documentos
Objetivos:
Listar os recursos das instrues SELECT SQL Executar uma instruo SELECT bsica Diferenciar instrues SQL e comandos SQL*Plus
Seleo
Projeo
Tabela 1
Juno
Tabela 1
Tabela 1
Tabela 2
[DISTINCT] {*, coluna [apelido],...} [DISTINCT] {*, coluna [apelido],...} tabela; tabela;
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.
SQL> SELECT * 2 FROM dept; DEPTNO --------10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON
SQL> SELECT deptno, loc 2 FROM dept; DEPTNO --------10 20 30 40 LOC ------------NEW YORK DALLAS CHICAGO BOSTON
Justificada default Esquerda: Dados de caractere e data Direita: Dados numricos Exibio default: Letra maiscula
Expresses Aritmticas
Operador + * /
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
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
SQL> select ename, 12*sal+comm 2 from emp 3 WHERE ename='KING'; ENAME 12*SAL+COMM ---------- ----------KING
14
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
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
Employees ------------------KINGPRESIDENT BLAKEMANAGER CLARKMANAGER JONESMANAGER MARTINSALESMAN ALLENSALESMAN ... 14 rows selected.
18
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
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
SQL> SQL> 2 2
21
22
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
Objetivos: Limitar linhas recuperadas por uma consulta Classificar linhas recuperadas por uma consulta
24
EMP EMPNO ENAME 7839 7698 7782 7566 ... KING BLAKE CLARK JONES JOB PRESIDENT MANAGER MANAGER MANAGER ... DEPTNO 10 30 10 20
25
Restringe as linhas retornadas usando a clusula WHERE. SELECT FROM [WHERE [DISTINCT] {*| coluna [apelido], ...} tabela condio(es)];
26
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
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
ename, job, deptno ename, job, deptno emp emp ename = 'JAMES' ; ename = ;
28
Operadores de Comparao
Significado Igual a Maior do que Maior do que ou igual a Menor do que Menor ou igual a Diferente de
29
SQL> SELECT ename, sal, comm 2 FROM emp 3 WHERE sal<=comm; ENAME SAL COMM ---------- --------- --------MARTIN 1250 1400
30
Vincula qualquer um de uma lista de valores Vincula um padro de caractere um valor nulo No um valor nulo
31
Use o operador BETWEEN para exibir linhas baseadas em uma faixa de valores.
ENAME SAL ---------- --------MARTIN 1250 TURNER 1500 WARD 1250 ADAMS 1100 MILLER 1300
Limite inferior
Limite superior
32
Usando o Operador IN
ENAME SAL MGR ---------- --------- --------FORD 3000 7566 SMITH 800 7902 SCOTT 3000 7566 ADAMS 1100 7788
33
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.
34
35
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
SQL> 2 3 4
empno, ename, job, sal emp sal>=1100 job='CLERK'; JOB SAL --------- --------CLERK 1100 CLERK 1300
38
Usando o Operador OR
EMPNO ENAME --------- ---------7839 KING 7698 BLAKE 7782 CLARK 7566 JONES 7654 MARTIN ... 7900 JAMES ... 14 rows selected.
39
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
41
Regras de Precedncia
SQL> 2 3 4 5
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
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
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
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
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
[DISTINCT] {*| coluna [apelido], ...} tabela condio(es)] {coluna, expr, apelido} [ASC|DESC]];
48
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
Sada
Resultado valor
arg n
50
Funes
51
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
52
Caractere
Geral
Nmero
Converso
Data
53
Funes de Caractere
Funes de caractere
54
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
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
Use uma juno para consultar dados a partir de uma ou mais tabelas.
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
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
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
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
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
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
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
65
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
SQL> 2 3 4
ENAME SAL GRADE ---------- --------- --------JAMES 950 1 SMITH 800 1 ADAMS 1100 1 ... 14 rows selected.
68
Junes Externas
DEPTNO -----10 30 10 20
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
SQL> 2 3 4
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
72
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
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
75
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
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
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
MAX(SAL) --------5000
78
80
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
82
83
84
85
86
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
Divida linhas de uma tabela em grupos menores usando a clusula GROUP BY.
88
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
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
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
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
Qualquer coluna ou expresso na lista SELECT que no seja uma funo agregada deve estar na clusula GROUP BY.
SQL> SQL> 2 2
BY
93
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
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
3000
2850
95
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
SQL> 2 3 4
97
SQL> 2 3 4 5 6
job, SUM(sal) PAYROLL emp job NOT LIKE 'SALES%' job SUM(sal)>5000 SUM(sal);
98
99
Sumrio
Ordem de avaliao das clusulas: clusula WHERE clusula GROUP BY clusula HAVING
100
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
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
Consulta principal
104
Subconsultas
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
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
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
CLERK
CLERK MANAGER
108
Retorne somente uma linha Use operadores de comparao de uma nica linha
Significado Igual a Maior do que Maior do que ou igual a Menor do que Menor ou igual a Diferente de
109
SQL> 2 3 4 5 6 7 8 9 10
AND
ename, job emp job = (SELECT FROM WHERE sal > (SELECT FROM emp WHERE empno JOB JOB ----------------CLERK CLERK
CLERK
sal = 7876);
110
ename, job, sal emp sal = (SELECT FROM JOB SAL JOB SAL --------- ----------------- --------CLERK 800 CLERK 800
800
MIN(sal) emp);
111
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
112
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
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
ALL
115
SQL> 2 3 4 5 6 7
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
116
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
118
119
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
Consulta principal
MANAGER 10
Subconsulta
SALESMAN MANAGER CLERK 30 10 20
121
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
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
124
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;
125
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
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
SQL> 2 3 4 5 6
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
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
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
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
50 DEVELOPMENT DETROIT
132
A Instruo INSERT
133
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');
134
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
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
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
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
139
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
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
141
A instruo UPDATE
tabela tabela coluna = valor [, coluna = valor, ...] coluna = valor [, coluna = valor, ...] condio]; condio];
142
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
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
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 =
145
SQL> SQL> 2 2 3 3
= = = =
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
DEPT DEPTNO -----10 20 30 40 50 60 ... DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON DEVELOPMENT DETROIT MIS
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
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';
SQL> DELETE FROM SQL> DELETE FROM 4 rows deleted. 4 rows deleted.
department; department;
149
Use subconsultas em instrues DELETE para remover linhas de uma tabela baseadas em valores de outra tabela.
150
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
Consistem de uma das seguintes instrues: Instrues DML que fazem uma alterao consistente nos dados Uma instruo DDL Uma instruo DCL
152
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
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
155
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
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
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.
158
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.
employee;
159
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
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
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
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