Vous êtes sur la page 1sur 33

Apostila de SQL

III.1 - CONTEDO

1. Seleo de colunas

2. Uso de expresses

3. Ordenao de resultados

4. Agrupamento

5. Operaes de conjunto

6. Juno de tabelas

III.2 - SELEO DE COLUNAS

A sentena do comando SELECT recupera as informaes do Banco de Dados implementando todos os operadores da lgebra Relacional. Uma pesquisa simples deve conter:

A clusula SELECT que selecionar as colunas que sero


exibidas. Os nomes das colunas devem estar separados por vrgula.

A clusula FROM que especifica as tabelas envolvidas.


Para voc selecionar dados de uma tabela ou snapshot, a tabela ou o snapshot tem que ser sua ou voc tem que ter privilgios sobre ela. O privilgio de sistema SELECT ANY TABLE tambm permite a voc selecionar linhas em qualquer tabela de qualquer usurio.

Sintaxe:
SELECT DISTINCT ALL schema. expr c_alias AS , FROM schema. condio snapshot table View @dblink t_alias WHERE * , table View snapshot .*

CONNECT BY condio comando SELECT START WITH condio , GROUP BY expr HAVING condio

UNION

UNION ALL INTERSECT MINUS

, ORDER BY expr position c_alias ASC DESC

Onde: DISTINCT ALL * table.*, view.*, snapshot.* retorna somente uma cpia de cada linha selecionada que for duplicada. retorna todas as linhas selecionadas, incluindo as duplicadas. O default ALL. select todas as colunas de todas as tabelas. seleciona todas as colunas da tabela, viso ou snapshot. Voc pode usar o schema para selecionar de uma tabela, viso ou snapshot em um outro schema. seleciona uma expresso. prov um nome diferente para a coluna. o schema contendo a tabela, viso ou snapshot. Se voc omitir o schema, o Oracle assume a tabela, viso ou snapshot como seu prprio dono. o nome da tabela, viso ou snapshot no qual est sendo selecionado. o nome completo ou parcial para um link de banco de dados com um banco de dados remoto onde a tabela, viso ou snapshot est localizada. prov um nome diferente para a tabela, viso ou snapshot ou subconsulta. restringe as linhas selecionadas. Se voc omitir esta clusula, o Oracle retorna todas as linhas da tabela, viso ou snapshot. retorna linhas em uma ordem hierrquica. funo de grupo restringe os grupos de cada linha retornada no GROUP BY. combina as linhas retornadas por dois comandos SELECT usando uma operao de funo. ordena as linhas retornadas por um comando. Expr ordena linhas baseadas no valor de expr. A expresso baseada em colunas na lista selecionada ou

expr C_alias schema

table, view, snapshot dblink

T_alias WHERE

START WITH, CONNECT BY GROUP BY HAVING UNION, UNION ALL, INTERSECT, MINUS ORDER BY

colunas em tabelas, vises ou snapshots na clusula FROM. Position ordena linhas baseado em seus valores para a expresso na posio da lista selecionada. ASC, DESC especifica a ordenao ascendente ou descendente. O opo ASC default.
O comando abaixo mostra o nmero do departamento, nome e nmero do patro da tabela EMP. SELECT deptno, ename, mgr FROM emp; DEPTNO ----------10 30 30 20 30 10 20 10 30 20 30 20 10 ENAME ------------------------SMITH ALLEN WARD JONES BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER MGR -----------7902 7698 7698 7839 7839 7839 7566 7698 7788 7698 7566 7782

Para recuperar as informaes da tabela EMP:

SQL> SELECT * FROM emp; EMP 7369 7499 7521 7566 7654 7698 7782 7788 ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST MGR 7902 7698 7698 7839 7698 7839 7839 7566 HIREDATE 17-DEC-80 20-FEB-81 22-FEB-81 02-APR-81 28-SEP-81 01-MAY-81 09-JUN-81 19-APR-87 SAL 800 1600 1250 2975 1250 2850 2450 3000 COMM 300 500 1400 DEPTNO 20 30 30 20 30 30 10 20

7839 7844 7876 7900 7902 7934

KING TURNER ADAMS JAMES FORD MILLER

PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK

7698 7788 7698 7566 7782

17-NOV-81 08-SEP-81 23-MAY-87 03-DEC-81 03-DEC-81 23-JAN-82

5000 1500 1100 950 3000 1300

10 30 20 30 20 10

O comando abaixo seleciona linhas dos empregados que trabalham no departamento 30. SQL> SELECT * 2 FROM emp 3 WHERE deptno = 30; A ordem em que as colunas so especificadas muda a apresentao do resultado: SQL> SELECT ename, empno 2 FROM emp 3 WHERE empno < 7500; ENAME SMITH ALLEN EMPNO 7369 7499

Para indicar as colunas a serem recuperadas de uma tabela: SQL> SELECT empno, ename 2 FROM emp 3 WHERE empno < 7500;

EMPNO 7369 7499

ENAME SMITH ALLEN

III.3 - OPERADORES ARITMTICOS

Os operadores aritmticos so utilizados para somar, subtrair, multiplicar e dividir valores numricos. Os operadores de maior precedncia, os parnteses, conforme pode ser observado na tabela seguinte, permite alterar a ordem de avaliao dos operadores das expresses. Esta tabela lista os operadores aritmticos na ordem decrescente de precedncia:

( )

Alteram as regras de precedncia dos operadores. Os operadores entre os parnteses so avaliados em primeiro lugar. SELECT (2+2) / (2-1) from dual;

+ -

Assinalam uma expresso como positiva ou negativa. SELECT * FROM EMP WHERE COMM = -10 SELECT * FROM EMP WHERE SAL > 1000

* /

Multiplicam e dividem valores numricos. SELECT 2*X+10 ... WHERE X > Y / 2

+ -

Somam e subtraem valores numricos. SELECT 2 * X + 1 ... WHERE X > Y - Z

III.4 - USO DE EXPRESSES

Para saber o salrio anual dos empregados

ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK

SAL 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300

SQL> SELECT ename, 12 * sal FROM emp;

ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JANES FORD MILLER

12*SAL 9600 19200 15000 35700 15000 34200 29400 36000 60000 18000 13200 11400 36000 15600

Para saber o nmero total de caracteres nas colunas ENAME e JOB:

ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK

SAL 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300

sinnimo para a coluna

SQL> SELECT 2 length (ename) + 3 length(job) Comprimento Total 4 FROM emp;

Comprimento Total 10 13 12 12 14 12 12 12 13 14 10 10 11 11

III.5 - OPERADORES DE CARACTERES

Os operadores de caracteres so usados em expresses para manipular strings de caracter. A seguir o nico tipo de operador de caracter:

||

Faz a concatenao de strings de caracteres, ou seja, encadeiam ou ligam duas strings. SELECT O Nome || ename from emp

O resultado da concatenao um valor caracter. As strings de caracteres dos tipos de dados CHAR podem ter o mximo de 255 caracteres. Esta restrio aplica-se tambm s strings de caracteres formadas pela concatenao de duas outras strings. Para saber departamento 20. EMP 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 os nomes dos empregados que trabalham no

ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK

... ... ... ... ... ... ... ... ... ... ... ... ... ... ...

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

SQL> SELECT ename 2 FROM emp 3 WHERE deptno = 20; ENAME SMITH JONES SCOTT ADAMS FORD

Para saber o tempo de servio dos funcionrios cuja comisso maior que 50% do salrio: SQL> SELECT ename, 2 months_between(sysdate, hiredate) MESES 3 FROM emp 4 WHERE comm > sal * 0.50;

ENAME MARTIN

MESES 187.5371

III.6 - OPERADORES DE COMPARAO

Os operadores de comparao so usados em condies que comparam duas expresses. Assim como as condies, os resultados das comparaes entre expresses podem ser verdadeiro ou falso. A tabela a seguir lista os operadores de comparao:

()

Alteram as operadores.

regras

de

validao

das

precedncias

dos

SELECT (SAL + COMM)/2 from emp; Testa a igualdade entre expresses. = SELECT * FROM EMP WHERE SAL = 1000; Testam a diferena entre expresses. != ^= <> SELECT * FROM EMP WHERE SAL <> 1000; Testa se uma expresso maior que outra. > SELECT * FROM EMP WHERE SAL > 1000 Testa se uma expresso menor que outra. < SELECT * FROM EMP WHERE SAL < 1000 Testa se uma expresso maior ou igual a outra. >= SELECT * FROM EMP WHERE SAL >= 1000 Testa se uma expresso menor ou igual a outra. <= SELECT * FROM EMP WHERE SAL <= 1000 Verifica se um expresso existe em um dos membros especificados entre parnteses logo aps o operador. Esses membros so strings de caracteres que devem aparecer entre aspas simples e separados por vrgula. O operador equivalente ao operador =ANY. SELECT * FROM EMP WHERE JOB IN (SALESMAN,CLERK) Valida a expresso como falsa se algum membro que segue o operador nulo. Esses membros so os valores retornados de uma pesquisa efetuada com SELECT, por exemplo. equivalente a != ALL. Todas as linhas sero avaliadas como falso se qualquer membro da lista de valores referenciada pelo operador NOT IN for nulo.

IN

NOT IN

SELECT * FROM EMP WHERE JOB NOT IN (SALESMAN,CLERK) NOT BETWEEN - AND Validam uma expresso como sendo maior ou igual ao valor que segue BETWEEN e menor ou igual ao valor que segue AND.

NOT LIKE

Este operador usado para comparar duas strings de caracteres e verificar se elas so parecidas. Podem ser utilizados caracteres % e _ . O caracter percentual (%) utilizado para comparar um ou mesmo nenhum caracter, entretanto no pode comparar um valor nulo. O caracter sublinhado (_) utilizado para comparar exatamente um caracter. Funo UPPER: utilizada para fazer com que as expresses sejam avaliadas corretamente comparando letras minsculas e maisculas. ... SELECT SAL FROM EMP

IS NOT NULL

Este operador deve ser usado quando for necessrio testar uma condio para verificar se ela nula ou no. ... WHERE X IS NOT NULL

III.7 - OPERADORES LGICOS

Os operadores lgicos so usados para afetar o resultado de mltiplas condies. O operador AND requer que a linha satisfaa todas as duas condies comparadas. Pr sua vez, o operador OR requer que a linha satisfaa pelo menos uma das duas condies comparadas. SELECT * FROM emp WHERE (hiredate < 01-JAN-93 ) AND (sal < 1000) O comando select abaixo mostra o nome, cargo, salrio e departamento de todos os empregados, exceto os que possuem cargo SALESMAN e trabalham no departamento 10. SELECT ename, job, sal, deptno

FROM EMP WHERE NOT(job = SALESMAN AND deptno = 30)

III.8 - OUTROS OPERADORES

(+)

Indica que a coluna precedida pelo sinal (+) est relacionada coluna anterior da declarao e faz parte de outra tabela. Este operador utilizado para especificar os relacionamentos entre as colunas. ...WHERE DEPT.DEPTNO = EMP.DEPTNO (+)

Seleciona todas as colunas das tabelas em uma pesquisa. SELECT * FROM EMP SELECT EMP.* FROM EMP

COUNT(X)

Retorna o nmero de linhas onde a expresso X no nula. SELECT COUNT(DEPTNO) FROM EMP

ALL

Retm os valores duplicados em pesquisas. SELECT ALL * ... COUNT( ALL DEPTNO)

DISTINCT

Elimina as linha duplicadas do resultado de uma pesquisa ou elimina os valores em duplicidade de uma expresso. SELECT DISTINCT * ... COUNT(DISTINCT DEPTNO)

PRIOR

Define a relao entre as colunas das tabelas em uma pesquisa. A expresso que segue o operador PRIOR representa a linha da tabela principal. A outra expresso que se segue anterior representa a linha com a qual se efetua o relacionamento. CONNECT BY PRIOR EMPNO = LEVEL_EBN

III.9 - SUBSTITUIO DE VARIVEIS

Voc pode utilizar variveis nos arquivos de comandos ou nos comandos SQL para representar valores que sero entrados em tempo de execuo. Uma varivel comea sempre com o caracter & e sempre temporria. Para definir uma varivel permanente deve-se utilizar &&. Pegar o nmero do departamento em tempo de execuo. SELECT empno, ename, sal FROM emp WHERE deptno = &numero_departamento; Enter value from numero_departamento:

Se a varivel for do tipo caracter, deve-se entrar com a informao entre aspas simples. Exemplo: SELECT ename, sal FROM emp WHERE ename = &nome_do_funcionario;

III.10 - ORDENAO DE RESULTADOS Normalmente a ordem das colunas resultantes de uma pesquisa indefinida. A clusula ORDER BY pode ser utilizada para organizar as linhas. Se usada, ela sempre deve ser a ltima clusula da sentena do SELECT.

ASC

Parmetro default, ordena o resultado da pesquisa pelas colunas especificada na ordem ascendente.

DESC

Ordena o resultado da pesquisa especificada na ordem decrescente.

pelas

colunas

O comando abaixo retorna o nome, salrio multiplicado por 12 e nmero do departamento em ordem alfabtica. SELECT ename, job, sal * 12, deptno FROM emp ORDER BY ename; Para listar os funcionrios em ordem alfabtica: SQL> SELECT ename, job, sal 2 FROM emp 3 ORDER BY ename;

ENAME ADAMS ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN MILLER SCOTT SMITH TURNER WARD

JOB CLERK SALESMAN MANAGER MANAGER ANALYST CLERK MANAGER PRESIDENT SALESMAN CLERK ANALYST CLERK SALESMAN SALESMAN

SAL 1100 1600 2850 2450 3000 950 2975 5000 1250 1300 3000 800 1500 1250

Para listar os empregados em ordem descrescente de salrio, por cargo. SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE job in (ANALYST, SALESMAN, 4 MANAGER) 5 ORDER BY job, sal desc;

ENAME SCOTT FORD JONES BLAKE CLARK ALLEN TURNER WARD MARTIN

JOB ANALYST ANALYST MANAGER MANAGER MANAGER SALESMAN SALESMAN SALESMAN SALESMAN

SAL 3000 3000 2975 2850 2450 1600 1500 1250 1250

Pode-se usar expresses ou referncias posio de expresses no SELECT como argumentos do ORDER BY:

SQL> SELECT ename, job, length(job), sal 2 FROM emp 3 WHERE job in (ANALYST, SALESMAN, 4 MANAGER) 5 ORDER BY 3, sal + nvl(comm,0) desc;

III.11 - A CLUSULA WHERE

A clusula WHERE corresponde ao operador Restriction da lgebra Relacional. Ela contm a condio s quais efetuaro comparaes nas linhas para serem exibidas. A clusula WHERE quando utilizada, deve estar logo aps a clusula FROM. A clusula WHERE pode comparar valores s colunas, valores literais, expresses aritmticas ou funes utilizando os operadores mencionados. O comando abaixo mostra todos os empregados que trabalha no departamento 30. SELECT * FROM emp WHERE deptno = 30; O comando abaixo seleciona o nome, cargo, salrio e nmero do departamento dos empregados, exceto os vendedores que trabalham no departamento 30. SELECT ename, job, sal, deptno FROM emp WHERE not (job = SALESMAN and deptno = 30);

III.12 - CLUSULA GROUP BY

A clusula GROUP BY pode ser usada para dividir as linhas de uma tabela em pequenos grupos. Funes de grupos podem ser utilizadas para retornar uma informao sumarizada de cada grupo.

SELECT job, avg(sal) FROM emp GROUP BY job;

Com essa clusula pode-se tambm agrupar linhas dentro de grupos. SELECT job, deptno, avg(sal) FROM emp GROUP BY deptno, job;

O comando abaixo retorna o menor e maior salrio de cada departamento. SELECT deptno, min(sal), max(sal) FROM emp GROUP BY deptno;

O comando abaixo retorna o menor e maior salrio para os funcionrios que tem como profisso CLERK, por departamento. SELECT deptno, min(sal), max(sal) FROM emp WHERE job = CLERK GROUP BY deptno;

Para saber quantos funcionrios trabalham em cada departamento. EMP 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK MGR 7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782 HIREDATE 17-DEC-80 20-FEB-81 22-FEB-81 02-APR-81 28-SEP-81 01-MAY-81 09-JUN-81 19-APR-87 17-NOV-81 08-SEP-81 23-MAY-87 03-DEC-81 03-DEC-81 23-JAN-82 SAL 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300 COMM 300 500 1400 DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10

coluna do agrupamento

todas as linhas

SQL> SELECT deptno, count(*) 2 FROM emp 3 GROUP BY deptno;

funo de grupo

DEPTNO 10 20 30

COUNT(*) 3 5 6

Nota: Omitir a clusula GROUP BY significa agrupar toda a tabela.

III.13 - CLUSULA HAVING

Se quiser especificar quais grupos sero exibidos, utilize a clusula HAVING. SELECT deptno, avg(sal) FROM emp GROUP BY deptno HAVING count (*) > 3; recomendado que a clusula GROUP BY venha antes da clusula HAVING. O comando abaixo retorna o menor e maior salrio para os funcionrios que tem como profisso CLERK por departamento, tendo o menor salrio menor do que 1000. SELECT deptno, min(sal), max(sal) FROM emp WHERE job = CLERK GROUP BY deptno HAVING min(sal) < 1000;

Para saber a soma dos salrios para os cargos onde a mdia de salrios maior que 1500: EMPNO 7788 7902 7369 7876 7934 7900 7566 7782 7698 7839 7499 7654 7844 7521 ENAME SCOTT FORD SMITH ADAMS MILLER JAMES JONES CLARK BLAKE KING ALLEN MARTIN TURNER WARD JOB ANALYST ANALYST CLERK CLERK CLERK CLERK MANAGER MANAGER MANAGER PRESIDENT SALESMAN SALESMAN SALESMAN SALESMAN ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... SAL 3000 3000 800 1100 1300 950 2975 2450 2850 5000 1600 1250 1500 1250 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...

AVG AVG

= =

3000 1037.5

AVG

2758.3 333

AVG AVG

= =

5000 1400

SQL> SELECT job, sum(sal), max(sal) 2 FROM emp 3 GROUP BY job 4 HAVING avg(sal) > 1500;
selecione os grupos (where de grupo) funo de grupo

JOB ANALYST MANAGER PRESIDENT

SUM(SAL) 6000 8725 5000

MAX(SAL) 3000 2975 5000

III.14 - OPERAES DE CONJUNTO

Uma tabela pode ser encarada como um conjunto Os elementos do conjunto so as linhas da tabela:

Tabela

Col. 1 A B D

Col. 2 1 1 2

(A,1) (B,1) (D,2)


elementos do conjunto

Conjunto

Existem trs operaes bsicas de conjunto em SQL: Unio (UNION)

Interseco (INTERSECT)

Diferena (MINUS)

Unio TABELAS Col1 A B D Col2 1 1 2 Col1 A B E D Col2 2 1 2 2

colunas com tipo igual

select col1, col2 from tab1 union select col1, col2 from tab2
Col1 A A B D E Col2 1 2 1 2 2

Interseco

TABELAS Col1 A B D Col2 1 1 2 Col1 A B E D Col2 2 1 2 2

colunas com tipo igual

select col1, col2 from tab1 intersect select col1, col2 from tab2
Col1 B D Col2 1 2

Diferena

Col1 A B D

Col2 1 1 2

Col1 A B E D

Col2 2 1 2 2

colunas com tipo igual

select col1, col2 from tab1 minus select col1, col2 from tab2
Col1 A Col2 1

III.15 - JUNO DE TABELAS

Um Join uma consulta que combina linhas de duas ou mais tabelas, vises ou snapshots. O Oracle7 executa um join quando mltiplas tabelas aparecem na clusula FROM. A lista selecionada da coluna pode conter qualquer coluna de qualquer tabela. Caso haja colunas com o mesmo nome, voc tem que especificar de qual tabela a determinada coluna. A juno de tabelas corresponde operao de produto cartesiano entre conjuntos:

A, B, C

1,2

(A,1), (A,2), (B,1), (B,2), (C,1), (C,2)

tab1 col1 col2 A 3

col3 B

tab2 col4 col5 2 E

select col1, col2, col3, col4, col5 from tab1, tab2;

col1 A

col2 3

col3 B

col4 2

col5 E

Para saber o nome do departamento onde cada empregado trabalha:

produto cartesiano

SQL> SELECT ename, dname 2 FROM emp, dept 3 WHRE emp.deptno = dept.deptno;

critrio de seleo da juno para diferenciar colunas de mesmo nome usa-se o nome da tabela como prefixo

ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

DNAME RESEARCH SALES SALES RESEARCH SALES SALES ACCOUNTING RESEARCH ACCOUNTING SALES RESEARCH SALES RESEARCH ACCOUNTING

ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

DEPTNO ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH SALES SALES SALES SALES SALES SALES SALES SALES SALES SALES SALES SALES SALES SALES OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS

EMP.DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10 20 30 30 20 30 30 10 20 10 30 20 30 20 10 20 30 30 20 30 30 10 20 10 30 20 30 20 10 20 30 30 20 30 30 10 20 10 30 20 30 20 10

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

Dada a tabela salgrade, que classifica faixas de salrios:

GRADE 1 2 3 4 5

LOSAL 700 1201 1401 2001 3001

HISAL 1200 1400 2000 3000 9999

Para saber a faixa salarial de todos os empregados:

SQL> SELECT ename, sal, grade 2 FROM emp, salgrade 3 WHERE sal between losal and hisal;
especifica um tipo de juno

ENAME SMITH ADAMS JAMES WARD MARTIN MILLER ALLEN TURNER JONES BLAKE CLARK SCOTT FORD KING

SAL 800 1100 950 1250 1250 1300 1600 1500 2975 2850 2450 3000 3000 5000

GRADE 1 1 1 2 2 2 3 3 4 4 4 4 4 5

Pode-se combinar diversas opes no mesmo comando SQL:

SQL> SELECT dname, grade, count(*) 2 FROM emp, dept, salgrade 3 WHERE emp.deptno = dept.deptno and 4 sal between losal and hisal 5 GROUP BY dname, grade 6 HAVING sum(sal) > 1200 7 ORDER BY dname, count(*) DESC;

DNAME ACCOUNTING ACCOUNTING ACCOUNTING RESEARCH RESEARCH SALES SALES SALES

GRADE 2 4 5 4 1 2 3 4

COUNT(*) 1 1 1 3 2 2 2 1

O comando abaixo retorna o nome e cargo do empregado e o nmero do e nome do departamento SQL> SELECT ename, dept.deptno, dname 2 FROM emp, dept 3 WHERE emp.deptno = dept.deptno;

O comando abaixo retorna o nome, cargo e nmero do departamento dos empregados e nome do departamento de todos os funcionrios CLERKS. SQL> SELECT ename, job, dept.deptno, dname 2 FROM emp, dept 3 WHERE emp.deptno = dept.deptno 4 AND job = CLERK;

III.16 - EXERCCIOS

1. Consulte o nome, o local do departamento, o salrio por hora (assumindo 160 horas/ms) e o total mensal (salrio + comisso) dos vendedores da tabela EMP. Salve seu exerccio no arquivo ex31.sql.

2. Carregue o contedo do arquivo ex31.sql no buffer corrente e modifique-o de forma a ordenar o resultado em ordem descrescente do salrio por hora. Salve seu exerccio novamente, no mesmo arquivo.

3. Descubra o menor salrio de todos os empregados.

4. Obtenha a soma dos salrios dos empregados que no trabalham nos departamentos 10 ou 30.

5. Obtenha o nome e a mdia salarial dos departamentos (exceto o 10), cujo maior salrio seja inferior a 4000.

6. Obtenha a mdia de salrio para cada faixa salarial.

Vous aimerez peut-être aussi