253
1 Banco de Dados I (2019.1) Prof. Tiago Eugenio de Melo [email protected]

Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

1

Banco de Dados I (2019.1)Prof. Tiago Eugenio de [email protected]

Page 2: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

2

Objetivos:

–Listar os recursos das instruções SELECT SQL

–Executar uma instrução SELECT básica

–Diferenciar instruções SQL e comandos SQL*Plus

Criando Instruções SQL Básicas

Page 3: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

3

SeleçãoSeleção ProjeçãoProjeção

Tabela 1Tabela 1 Tabela 2Tabela 2

Tabela 1Tabela 1 Tabela 1Tabela 1JunçãoJunção

Recursos das Instruções SELECT SQL

Page 4: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

4

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

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

–SELECT identifica que colunas.

–FROM identifica qual tabela.

Instrução SELECT Básica

Page 5: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

5

–Instruções SQL não fazem distinção entre maiúsculas e minúsculas.

–Instruções SQL podem estar em uma ou mais linhas.

–Palavras-chave não podem ser abreviadas ou divididas entre as linhas.

–Normalmente, as cláusulas são colocadas em linhas separadas.

–Guias e endentações são usadas para aperfeiçoar a legibilidade.

Criando Instruções SQL

Page 6: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

6

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

SQL> SELECT * 2 FROM dept;

Selecionando Todas as Colunas

Page 7: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

7

DEPTNO LOC--------- ------------- 10 NEW YORK 20 DALLAS 30 CHICAGO 40 BOSTON

SQL> SELECT deptno, loc 2 FROM dept;

Selecionando Colunas Específicas

Page 8: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

8

–Justificada default

•Esquerda: Dados de caractere e data

•Direita: Dados numéricos

–Exibição default: Letra maiúscula

Defaults de Cabeçalho de Coluna

Page 9: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

9

Operador

+

-

*

/

Descrição

Adicionar

Subtrair

Multiplicar

Dividir

•Criar expressões com dados NUMBER e DATE usando operadores aritméticos

Expressões Aritméticas

Page 10: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

10

SQL> SELECT ename, sal, sal+300 2 FROM emp;

ENAME SAL SAL+300---------- --------- ---------KING 5000 5300BLAKE 2850 3150CLARK 2450 2750JONES 2975 3275MARTIN 1250 1550ALLEN 1600 1900...14 rows selected.

Usando Operadores Aritméticos

Page 11: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

11

** // ++ __

–A multiplicação e a divisão têm prioridade sobre a adição e a subtração.

–Os operadores com a mesma prioridade são avaliados da esquerda para a direita.

–Os parênteses são usados para forçar a avaliação e para esclarecer as instruções.

Precedência do Operador

Page 12: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

12

SQL> SELECT ename, sal, 12*sal+100 2 FROM emp;

ENAME SAL 12*SAL+100---------- --------- ----------KING 5000 60100BLAKE 2850 34300CLARK 2450 29500JONES 2975 35800MARTIN 1250 15100ALLEN 1600 19300...14 rows selected.

Precedência do Operador

Page 13: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

13

SQL> SELECT ename, sal, 12*(sal+100) 2 FROM emp;

ENAME SAL 12*(SAL+100)---------- --------- -----------KING 5000 61200BLAKE 2850 35400CLARK 2450 30600JONES 2975 36900MARTIN 1250 16200...14 rows selected.

Usando Parênteses

Page 14: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

14

ENAME JOB SAL COMM---------- --------- --------- ---------KING PRESIDENT 5000BLAKE MANAGER 2850...TURNER SALESMAN 1500 0...14 rows selected.

SQL> SELECT ename, job, sal, comm 2 FROM emp;

–Um valor nulo não está disponível, não é atribuído, é desconhecido ou não é aplicável.

–Um valor nulo não é o mesmo que um zero ou um espaço em branco.

Definindo um Valor Nulo

Page 15: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

15

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

ENAME 12*SAL+COMM ---------- -----------KING

Expressões aritméticas contendo um valor nulo são avaliadas como nulo.

Valores Nulos nas Expressões Aritméticas

Page 16: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

16

–Renomeia um cabeçalho de coluna

–É útil para cálculos

–Segue imediatamente o nome da coluna

–Palavra-chave AS opcional entre o nome da coluna e o apelido

–Necessita de aspas duplas caso contenha espaços ou caracteres especiais ou faça distinção entre maiúsculas e minúsculas

Definindo um Apelido de Coluna

Page 17: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

17

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

------------- -------------

...

Usando Apelidos de Coluna

Page 18: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

18

–Concatena colunas ou strings de caractere a outras colunas

–É representado por duas barras Verticais - ||

–Cria uma coluna resultante que é uma expressão de caracteres

Operador de Concatenação

Page 19: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

19

SQL> SELECT ename||job AS "Employees" 2 FROM emp;

Employees-------------------KINGPRESIDENTBLAKEMANAGERCLARKMANAGERJONESMANAGERMARTINSALESMANALLENSALESMAN...14 rows selected.

Usando um Operador de Concatenação

Page 20: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

20

–Uma literal é um caractere, um número ou uma data incluída 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.

Strings Literais de Caracteres

Page 21: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

21

Employee Details-------------------------KING is a PRESIDENTBLAKE is a MANAGERCLARK is a MANAGERJONES is a MANAGERMARTIN is a SALESMAN...14 rows selected.

Employee Details-------------------------KING is a PRESIDENTBLAKE is a MANAGERCLARK is a MANAGERJONES is a MANAGERMARTIN is a SALESMAN...14 rows selected.

SQL> SELECT ename ||' is a '||job 2 AS "Employee Details" 3 FROM emp;

Usando Strings Literais de Caracteres

Page 22: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

22

SQL> SELECT deptno 2 FROM emp;

SQL> SELECT deptno 2 FROM emp;

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

•A exibição default das consultas é de todas as linhas, incluindo linhas duplicadas.

Linhas Duplicadas

Page 23: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

23

SQL> SELECT DISTINCT deptno 2 FROM emp;

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

Elimine linhas duplicadas usando a palavra-chave DISTINCT na cláusula Elimine linhas duplicadas usando a palavra-chave DISTINCT na cláusula SELECT.SELECT.

Eliminando Linhas Duplicadas

Page 24: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

24

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

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

Exibindo a Estrutura de Tabela

SQL> DESCRIBE deptSQL> DESCRIBE dept

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

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

Page 25: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

25

Objetivos:

–Limitar linhas recuperadas por uma consulta

–Classificar linhas recuperadas por uma consulta

Restringindo e Classificando Dados

Page 26: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

26

"…recuperar todos os

funcionários do departamento 10"

EMPEMP

EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ...

EMPEMP

EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10 7782 CLARK MANAGER 10 7934 MILLER CLERK 10

Limitando Linhas Usando uma Seleção

Page 27: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

27

SELECT [DISTINCT] {*| coluna [apelido], ...}FROM tabela[WHERE condição(ões)];

–Restringe as linhas retornadas usando a cláusula WHERE.

–A cláusula WHERE segue a cláusula FROM.

Limitando Linhas Selecionadas

Page 28: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

28

SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE job='CLERK';

ENAME JOB DEPTNO---------- --------- ---------JAMES CLERK 30SMITH CLERK 20ADAMS CLERK 20MILLER CLERK 10

Usando a Cláusula WHERE

Page 29: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

29

SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE ename = ;

SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE ename = ;'JAMES'

–As strings de caractere e valores de data aparecem entre aspas simples.

–Os valores de caractere fazem distinção entre maiúsculas e minúsculas e os valores de data diferenciam formatos.

–O formato de data default é DD-MON-YY.

Strings de Caractere e Datas

Page 30: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

30

Operador

=

>

>=

<

<=

<>

Significado

Igual a

Maior do que

Maior do que ou igual a

Menor do que

Menor ou igual a

Diferente de

Operadores de Comparação

Page 31: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

31

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

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

Usando Operadores de Comparação

Page 32: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

32

Operador

BETWEEN

...AND...

IN(list)

LIKE

IS NULL

IS NOT NULL

Significado

Entre dois valores (inclusive)

Vincula qualquer um de uma

lista de valores

Vincula um padrão de caractere

É um valor nulo

Não é um valor nulo

Outros Operadores de Comparação

Page 33: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

33

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

SQL> SELECT ename, sal 2 FROM emp 3 WHERE sal BETWEEN 1000 AND 1500;

Limiteinferior

Limitesuperior

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

Usando o Operador BETWEEN

Page 34: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

34

SQL> SELECT empno, ename, sal, mgr 2 FROM emp 3 WHERE mgr IN (7902, 7566, 7788);

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

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

Usando o Operador IN

Page 35: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

35

SQL> SELECT ename 2 FROM emp 3 WHERE ename LIKE 'S%';

•Use o operador LIKE para executar pesquisas curinga de valores de string de pesquisa válidos.

•As condições de pesquisa podem conter caracteres literais ou números.

–% denota zero ou muitos caracteres.

– _ denota um caractere.

Usando o Operador LIKE

Page 36: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

36

SQL> SELECT ename 2 FROM emp 3 WHERE ename LIKE '_A%';

ENAME---------- MARTINJAMES WARD

–Você pode combinar caracteres de vinculação de padrão.

É possível usar o identificador ESCAPE para procurar por "%" ou "_".

Usando o Operador LIKE

Page 37: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

37

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

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

Teste para valores nulos com o operador IS NULL.

Usando o Operador IS NULL

Page 38: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

38

Operador

AND

OR

NOT

Significado

Retorna TRUE se as condições de

componentes forem TRUE

Retorna TRUE se uma condição de

componente for TRUE

Retorna TRUE se a condição seguinte for FALSE

Operadores Lógicos

Page 39: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

39

AND exige que ambas as condições sejam TRUE.AND exige que ambas as condições sejam TRUE.

SQL> SELECT empno, ename, job, sal 2 FROM emp 3 WHERE sal>=1100 4 AND job='CLERK';

EMPNO ENAME JOB SAL--------- ---------- --------- --------- 7876 ADAMS CLERK 1100 7934 MILLER CLERK 1300

Usando o Operador AND

Page 40: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

40

SQL> SELECT empno, ename, job, sal 2 FROM emp 3 WHERE sal>=1100 4 OR job='CLERK';

EMPNO ENAME JOB SAL--------- ---------- --------- --------- 7839 KING PRESIDENT 5000 7698 BLAKE MANAGER 2850 7782 CLARK MANAGER 2450 7566 JONES MANAGER 2975 7654 MARTIN SALESMAN 1250 ... 7900 JAMES CLERK 950 ...14 rows selected.

OR exige que uma condição seja TRUE.OR exige que uma condição seja TRUE.

Usando o Operador OR

Page 41: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

41

SQL> SELECT ename, job 2 FROM emp 3 WHERE job NOT IN ('CLERK','MANAGER','ANALYST');

ENAME JOB---------- ---------KING PRESIDENTMARTIN SALESMANALLEN SALESMANTURNER SALESMANWARD SALESMAN

Usando o Operador NOT

Page 42: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

42

Ordem de Avaliação Operador

1 Todos os operadores de comparação

2 NOT

3 AND

4 OR

Sobreponha regras de precedência usando parênteses.

Regras de Precedência

Page 43: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

43

ENAME JOB SAL---------- --------- ---------KING PRESIDENT 5000MARTIN SALESMAN 1250ALLEN SALESMAN 1600TURNER SALESMAN 1500WARD SALESMAN 1250

ENAME JOB SAL---------- --------- ---------KING PRESIDENT 5000MARTIN SALESMAN 1250ALLEN SALESMAN 1600TURNER SALESMAN 1500WARD SALESMAN 1250

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

Regras de Precedência

Page 44: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

44

ENAME JOB SAL---------- --------- ---------KING PRESIDENT 5000ALLEN SALESMAN 1600

ENAME JOB SAL---------- --------- ---------KING PRESIDENT 5000ALLEN SALESMAN 1600

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

Use parênteses para forçar a prioridade.Use parênteses para forçar a prioridade.

Regras de Precedência

Page 45: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

45

SQL> SELECT ename, job, deptno, hiredate 2 FROM emp 3 ORDER BY hiredate;

ENAME JOB DEPTNO HIREDATE---------- --------- --------- ---------SMITH CLERK 20 17-DEC-80ALLEN SALESMAN 30 20-FEB-81...14 rows selected.

–Classificar as linhas com a cláusula ORDER BY

•ASC: ordem crescente, default

•DESC: ordem decrescente

–A cláusula ORDER BY vem depois na instrução SELECT.

Cláusula ORDER BY

Page 46: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

46

SQL> SELECT ename, job, deptno, hiredate 2 FROM emp 3 ORDER BY hiredate DESC;

ENAME JOB DEPTNO HIREDATE---------- --------- --------- ---------ADAMS CLERK 20 12-JAN-83SCOTT ANALYST 20 09-DEC-82MILLER CLERK 10 23-JAN-82JAMES CLERK 30 03-DEC-81FORD ANALYST 20 03-DEC-81KING PRESIDENT 10 17-NOV-81MARTIN SALESMAN 30 28-SEP-81...14 rows selected.

Classificando em Ordem Decrescente

Page 47: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

47

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.

Classificando por Apelido de Coluna

Page 48: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

48

SQL> SELECT ename, deptno, sal 2 FROM emp 3 ORDER BY deptno, sal DESC;

ENAME DEPTNO SAL---------- --------- ---------KING 10 5000CLARK 10 2450MILLER 10 1300FORD 20 3000...14 rows selected.

Você pode classificar por uma coluna que não esteja na lista SELECT.

A ordem da lista ORDER BY é a ordem de classificação.

Classificando por Várias Colunas

Page 49: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

49

SELECT [DISTINCT] {*| coluna [apelido], ...}FROM tabela[WHERE condição(ões)][ORDER BY {coluna, expr, apelido} [ASC|DESC]];

Sumário

Page 50: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

50

Objetivos:

–Descrever vários tipos de funções disponíveis no SQL

–Usar funções de data, número e caractere nas instruções SELECT

–Descrever o uso das funções de conversão

Funções de Uma Única Linha

Page 51: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

51

FunçãoFunçãoEntradaEntrada

arg 1arg 1

arg 2arg 2

arg arg nn

A função executa A função executa a açãoa ação

SaídaSaída

ResultadoResultadovalorvalor

Funções SQL

Page 52: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

52

FunçõesFunções

Funções deFunções deVárias LinhasVárias Linhas

Funções deFunções deUma Única LinhaUma Única Linha

Dois Tipos de Funções SQL

Page 53: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

53

function_name (coluna|expressão, [arg1, arg2,...])function_name (coluna|expressão, [arg1, arg2,...])

–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

Funções de Uma Única Linha

Page 54: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

54

ConversãoConversão

CaractereCaractere

NúmeroNúmero

DataData

GeralGeralFunções deFunções de

Uma Única LinhaUma Única Linha

Funções de Uma Única Linha

Page 55: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

55

Funções de Funções de caracterecaractere

LOWERLOWER

UPPERUPPER

INITCAPINITCAP

CONCATCONCAT

SUBSTRSUBSTR

LENGTHLENGTH

INSTRINSTR

LPADLPAD

TRIMTRIM

Funções de Conversão deFunções de Conversão deMaiúsculas e MinúsculasMaiúsculas e Minúsculas

Funções de manipulaçãoFunções de manipulaçãode caracterede caractere

Funções de Caractere

Page 56: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

56

Objetivos:

–Criar instruções SELECT para obter acesso aos dados a partir de mais de uma tabela usando as junções idênticas e não-idênticas

–Visualizar dados que, em geral, não correspondem a uma condição de junção usando junções externas

–Unindo uma tabela a ela mesma

Exibindo Dados de Várias Tabelas

Page 57: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

57

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

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

EMPEMP DEPTDEPT

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

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

Obtendo Dados de Várias Tabelas

Page 58: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

58

SELECT tabela1.coluna, tabela2.colunaFROM tabela1, tabela2WHERE tabela1.coluna1 = tabela2.coluna2;

SELECT tabela1.coluna, tabela2.colunaFROM tabela1, tabela2WHERE tabela1.coluna1 = tabela2.coluna2;

•Use uma junção para consultar dados a partir de uma ou mais tabelas.

–Criar uma condição de junção na cláusula WHERE.

–Prefixar o nome da coluna com o nome da tabela quando o mesmo nome da coluna aparecer em mais de uma tabela.

O Que É uma Junção?

Page 59: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

59

–Um produto cartesiano é formado quando:

•Uma condição de junção estiver omitida

•Uma condição de junção estiver inválida

•Todas as linhas na primeira tabela estão unidas a todas as linhas da segunda tabela

–Para evitar um produto Cartesiano, sempre inclua uma condição de junção válida em uma cláusula WHERE.

Produto Cartesiano

Page 60: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

60

ENAME DNAME------ ----------KING ACCOUNTINGBLAKE ACCOUNTING ...KING RESEARCHBLAKE RESEARCH...56 rows selected.

ENAME DNAME------ ----------KING ACCOUNTINGBLAKE ACCOUNTING ...KING RESEARCHBLAKE RESEARCH...56 rows selected.

EMP (14 linhas) EMP (14 linhas) DEPT (4 linhas) DEPT (4 linhas)

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

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

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

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

"Produto "Produto Cartesiano: Cartesiano:

14*4=56 linhas"14*4=56 linhas"

Gerando Produto Cartesiano

Page 61: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

61

Junção

idêntica

Junção

não-idêntica

Junção

externa Autojunção

Tipos de Junções

Page 62: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

62

EMPEMP DEPTDEPT 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.

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 estrangeiraChave estrangeira Chave primáriaChave primária

O Que É uma Junção Idêntica?

Page 63: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

63

SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE 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.

Recuperando Registros com Junções Idênticas

Page 64: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

64

–Use os prefixos de tabela para qualificar nomes de coluna que estão em várias tabelas.

–Melhore o desempenho usando os prefixos de tabela.

–Diferencie colunas que possuem nomes idênticos, mas que residam em tabelas diferentes usando apelidos de coluna.

Qualificando Nomes de Coluna Ambíguos

Page 65: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

65

EMP DEPT

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.

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.

Condições de Pesquisa Adicional Usando o Operador AND

Page 66: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

66

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;

Simplifique consultas usando apelidos de tabela.

Usando Apelidos de Tabela

Page 67: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

67

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;

Simplifique consultas usando apelidos de tabela.

Usando Apelidos de Tabela

Page 68: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

68

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

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

CUSTOMERCUSTOMER

Unindo Mais de Duas Tabelas

Page 69: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

69

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

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

CUSTOMERCUSTOMER

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

ORDORD

Unindo Mais de Duas Tabelas

Page 70: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

70

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

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

CUSTOMERCUSTOMER

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

ORDORD

Unindo Mais de Duas Tabelas

Page 71: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

71

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

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

CUSTOMERCUSTOMER

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

ORDORD

ORDID ITEMID------ ------- 610 3 611 1 612 1 601 1 602 1...64 rows selected.

ORDID ITEMID------ ------- 610 3 611 1 612 1 601 1 602 1...64 rows selected.

ITEMITEM

Unindo Mais de Duas Tabelas

Page 72: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

72

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

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

CUSTOMERCUSTOMER

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

ORDORD

ORDID ITEMID------ ------- 610 3 611 1 612 1 601 1 602 1...64 rows selected.

ORDID ITEMID------ ------- 610 3 611 1 612 1 601 1 602 1...64 rows selected.

ITEMITEM

Unindo Mais de Duas Tabelas

Page 73: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

73

EMP SALGRADE

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.

GRADE LOSAL HISAL----- ----- ------1 700 12002 1201 14003 1401 20004 2001 30005 3001 9999

Junções Não-idênticas

Page 74: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

74

EMP SALGRADE

"o salário na tabela EMP está entre salário inferior e salário superior natabela SALGRADE"

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.

GRADE LOSAL HISAL----- ----- ------1 700 12002 1201 14003 1401 20004 2001 30005 3001 9999

Junções Não-idênticas

Page 75: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

75

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

SQL> SELECT e.ename, e.sal, s.grade

2 FROM emp e, salgrade s

3 WHERE e.sal

4 BETWEEN s.losal AND s.hisal;

Recuperando Registros com Junções Não-idênticas

Page 76: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

76

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

SQL> SELECT e.ename, e.sal, s.grade

2 FROM emp e, salgrade s

3 WHERE e.sal

4 BETWEEN s.losal AND s.hisal;

Recuperando Registros com Junções Não-idênticas

Page 77: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

77

EMPEMP DEPTDEPT ENAME DEPTNO----- ------KING 10BLAKE 30CLARK 10JONES 20...

DEPTNO DNAME------ ----------10 ACCOUNTING30 SALES10 ACCOUNTING20 RESEARCH...40 OPERATIONS

Junções Externas

Page 78: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

78

EMPEMP DEPTDEPT ENAME DEPTNO----- ------KING 10BLAKE 30CLARK 10JONES 20...

DEPTNO DNAME------ ----------10 ACCOUNTING30 SALES10 ACCOUNTING20 RESEARCH...40 OPERATIONS

Junções Externas

Page 79: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

79

EMPEMP DEPTDEPT

Nenhum funcionário do Nenhum funcionário do departamento OPERATIONSdepartamento OPERATIONS

ENAME DEPTNO----- ------KING 10BLAKE 30CLARK 10JONES 20...

DEPTNO DNAME------ ----------10 ACCOUNTING30 SALES10 ACCOUNTING20 RESEARCH...40 OPERATIONS

Junções Externas

Page 80: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

80

SELECT tabela1.coluna, tabela2.coluna

FROM tabela1, tabela2

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

SELECT tabela1.coluna, tabela2.coluna

FROM tabela1, tabela2

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

Use uma junção externa para consultar também todas as linhas que em geral não atendem à condição de junção.

O operador de junção externo é um sinal de adição (+).

Junções Externas

Page 81: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

81

SELECT tabela1.coluna, tabela2.coluna

FROM tabela1, tabela2

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

SELECT tabela1.coluna, tabela2.coluna

FROM tabela1, tabela2

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

SELECT tabela1.coluna , tabela2.coluna

FROM tabela1, tabela2

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

SELECT tabela1.coluna , tabela2.coluna

FROM tabela1, tabela2

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

Use uma junção externa para consultar também todas as linhas que em geral não atendem à condição de junção.

O operador de junção externo é um sinal de adição (+).

Junções Externas

Page 82: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

82

SQL> SELECT e.ename, d.deptno, d.dname

2 FROM emp e, dept d

3 WHERE e.deptno(+) = d.deptno

4 ORDER BY e.deptno;

ENAME DEPTNO DNAME---------- --------- -------------KING 10 ACCOUNTINGCLARK 10 ACCOUNTING... 40 OPERATIONS15 rows selected.

Usando Junções Externas

Page 83: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

83

SQL> SELECT e.ename, d.deptno, d.dname

2 FROM emp e, dept d

3 WHERE e.deptno(+) = d.deptno

4 ORDER BY e.deptno;

ENAME DEPTNO DNAME---------- --------- -------------KING 10 ACCOUNTINGCLARK 10 ACCOUNTING... 40 OPERATIONS15 rows selected.

Usando Junções Externas

Page 84: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

84

EMP (WORKER) EMP (MANAGER)

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

EMPNO ENAME----- --------

7839 KING 7839 KING 7839 KING 7698 BLAKE 7698 BLAKE

Autojunções

Page 85: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

85

EMP (WORKER) EMP (MANAGER)

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

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

EMPNO ENAME----- --------

7839 KING 7839 KING 7839 KING 7698 BLAKE 7698 BLAKE

Autojunções

Page 86: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

86

WORKER.ENAME||'WORKSFOR'||MANAG-------------------------------BLAKE works for KINGCLARK works for KINGJONES works for KINGMARTIN works for BLAKE...13 rows selected.

WORKER.ENAME||'WORKSFOR'||MANAG-------------------------------BLAKE works for KINGCLARK works for KINGJONES works for KINGMARTIN works for BLAKE...13 rows selected.

SQL> SELECT worker.ename||' works for '||manager.ename

2 FROM emp worker, emp manager

3 WHERE worker.mgr = manager.empno;

Unindo uma Tabela a Ela Mesma

Page 87: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

87

WORKER.ENAME||'WORKSFOR'||MANAG-------------------------------BLAKE works for KINGCLARK works for KINGJONES works for KINGMARTIN works for BLAKE...13 rows selected.

WORKER.ENAME||'WORKSFOR'||MANAG-------------------------------BLAKE works for KINGCLARK works for KINGJONES works for KINGMARTIN works for BLAKE...13 rows selected.

SQL> SELECT worker.ename||' works for '||manager.ename

2 FROM emp worker, emp manager

3 WHERE worker.mgr = manager.empno;

Unindo uma Tabela a Ela Mesma

Page 88: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

88

SELECT tabela1.coluna, tabela2.colunaFROM tabela1, tabela2WHERE tabela1.coluna1 = tabela2.coluna2;

SELECT tabela1.coluna, tabela2.colunaFROM tabela1, tabela2WHERE tabela1.coluna1 = tabela2.coluna2;

Junção

idêntica

Junção

não-idêntica

Junção

externa Autojunção

Sumário

Page 89: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

89

SQL: Lista de Exercício

1. Escreva uma query para mostrar o nome do empregado, número e nome do departamento para todos os empregados

2. Crie uma única lista de todos os cargos que estão no departamento 30.

3. Escreva uma query para mostrar o nome do empregado, nome e localização do departamento de todos os empregados que ganham comissão

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, número e nome do departamento de todos os empregados que trabalham em DALLAS

6. Mostre o nome e número do empregado com o seu respectivo gerente, nome e número. 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 não tem gerente. Salve em p4q7.sql. Execute.

Page 90: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

90

SQL: Lista de Exercício

8. Crie uma query que mostre o nome do empregado, número 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, salário e a faixa salarial de todos os empregados.

10. Crie uma query para mostrar o nome e data de contratação de todos empregados contratado após o Blake.

11. Mostre todos os nomes dos empregados com suas datas de contratações, nome dos gerentes e datas de contratações 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 salário como um montante de asteriscos. Cada asterisco significa centenas de dólares. Ordene os dados em ordem descendente de salário. Nomeie a coluna como EMPLOYEE_AND_THEIR_SALARIES.

Page 91: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

91

Objetivos:

–Identificar as funções de grupo disponíveis

–Descrever o uso de funções de grupo

–Agrupar dados usando a cláusula GROUP BY

–Incluir ou excluir linhas agrupadas usando a cláusula HAVING

Agregando Dados Usando Funções de Grupo

Page 92: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

92

EMPEMP

"salário"saláriomáximo namáximo na

tabela EMP"tabela 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

As funções de grupo operam em conjuntos de linhas para fornecer um resultado por grupo.

O Que São Funções de Grupo?

Page 93: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

93

EMPEMP

"salário"saláriomáximo namáximo na

tabela EMP"tabela 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

As funções de grupo operam em conjuntos de linhas para fornecer um resultado por grupo.

O Que São Funções de Grupo?

Page 94: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

94

–AVG

–COUNT

–MAX

–MIN

–STDDEV

–SUM

–VARIANCE

Tipos de Funções de Grupo

Page 95: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

95

SELECT [coluna,] group_function(coluna)FROM tabela[WHERE condição][GROUP BY coluna][ORDER BY coluna];

Usando Funções de Grupo

Page 96: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

96

SELECT [coluna,] group_function(coluna)FROM tabela[WHERE condição][GROUP BY coluna][ORDER BY coluna];

Usando Funções de Grupo

Page 97: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

97

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

SQL> SELECT AVG(sal), MAX(sal), 2 MIN(sal), SUM(sal) 3 FROM emp 4 WHERE job LIKE 'SALES%';

Você pode usar AVG e SUM para dados numéricos.

Usando Funções AVG e SUM

Page 98: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

98

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

SQL> SELECT AVG(sal), MAX(sal), 2 MIN(sal), SUM(sal) 3 FROM emp 4 WHERE job LIKE 'SALES%';

Você pode usar AVG e SUM para dados numéricos.

Usando Funções AVG e SUM

Page 99: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

99

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

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

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

Usando Funções MIN e MAX

Page 100: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

100

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

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

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

Usando Funções MIN e MAX

Page 101: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

101

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

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

COUNT(*) retorna o número de linhas em uma tabela.

Usando a Função COUNT

Page 102: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

102

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

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

COUNT(*) retorna o número de linhas em uma tabela.

Usando a Função COUNT

Page 103: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

103

SQL> SELECT COUNT(comm) 2 FROM emp 3 WHERE deptno = 30;

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

COUNT(expr) retorna o número de linhas não nulas.

Usando a Função COUNT

Page 104: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

104

SQL> SELECT COUNT(comm) 2 FROM emp 3 WHERE deptno = 30;

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

COUNT(expr) retorna o número de linhas não nulas.

Usando a Função COUNT

Page 105: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

105

SQL> SELECT AVG(comm) 2 FROM emp;

AVG(COMM)--------- 550

As funções de grupo ignoram valores nulos na coluna.

Funções de Grupo e Valores Nulos

Page 106: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

106

SQL> SELECT AVG(comm) 2 FROM emp;

AVG(COMM)--------- 550

As funções de grupo ignoram valores nulos na coluna.

Funções de Grupo e Valores Nulos

Page 107: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

107

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

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

A função NVL força as funções de grupo a incluírem valores nulos.

Usando a Função NVL com Funções de Grupo

Page 108: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

108

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

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

A função NVL força as funções de grupo a incluírem valores nulos.

Usando a Função NVL com Funções de Grupo

Page 109: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

109

EMPEMP

"salário"saláriomédiomédio

na tabela na tabela EMP EMP

para cada para cada departamento"departamento"

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

DEPTNO AVG(SAL)

------- ---------

10 2916.6667

20 2175

30 1566.6667

Criando Grupos de Dados

Page 110: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

110

EMPEMP

"salário"saláriomédiomédio

na tabela na tabela EMP EMP

para cada para cada departamento"departamento"

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

DEPTNO AVG(SAL)

------- ---------

10 2916.6667

20 2175

30 1566.6667

Criando Grupos de Dados

Page 111: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

111

EMPEMP

"salário"saláriomédiomédio

na tabela na tabela EMP EMP

para cada para cada departamento"departamento"

2916.66672916.6667

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

DEPTNO AVG(SAL)

------- ---------

10 2916.6667

20 2175

30 1566.6667

Criando Grupos de Dados

Page 112: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

112

EMPEMP

"salário"saláriomédiomédio

na tabela na tabela EMP EMP

para cada para cada departamento"departamento"

2916.66672916.6667

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

DEPTNO AVG(SAL)

------- ---------

10 2916.6667

20 2175

30 1566.6667

Criando Grupos de Dados

Page 113: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

113

EMPEMP

"salário"saláriomédiomédio

na tabela na tabela EMP EMP

para cada para cada departamento"departamento"

2916.66672916.6667

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

DEPTNO AVG(SAL)

------- ---------

10 2916.6667

20 2175

30 1566.6667

Criando Grupos de Dados

Page 114: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

114

EMPEMP

"salário"saláriomédiomédio

na tabela na tabela EMP EMP

para cada para cada departamento"departamento"

2916.66672916.6667

21752175

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

DEPTNO AVG(SAL)

------- ---------

10 2916.6667

20 2175

30 1566.6667

Criando Grupos de Dados

Page 115: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

115

EMPEMP

"salário"saláriomédiomédio

na tabela na tabela EMP EMP

para cada para cada departamento"departamento"

2916.66672916.6667

21752175

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

DEPTNO AVG(SAL)

------- ---------

10 2916.6667

20 2175

30 1566.6667

Criando Grupos de Dados

Page 116: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

116

EMPEMP

"salário"saláriomédiomédio

na tabela na tabela EMP EMP

para cada para cada departamento"departamento"

2916.66672916.6667

21752175

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

DEPTNO AVG(SAL)

------- ---------

10 2916.6667

20 2175

30 1566.6667

Criando Grupos de Dados

Page 117: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

117

EMPEMP

"salário"saláriomédiomédio

na tabela na tabela EMP EMP

para cada para cada departamento"departamento"

2916.66672916.6667

21752175

1566.66671566.6667

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

DEPTNO AVG(SAL)

------- ---------

10 2916.6667

20 2175

30 1566.6667

Criando Grupos de Dados

Page 118: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

118

EMPEMP

"salário"saláriomédiomédio

na tabela na tabela EMP EMP

para cada para cada departamento"departamento"

2916.66672916.6667

21752175

1566.66671566.6667

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

DEPTNO AVG(SAL)

------- ---------

10 2916.6667

20 2175

30 1566.6667

Criando Grupos de Dados

Page 119: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

119

SELECT coluna, group_function(coluna)FROM tabela[WHERE condição][GROUP BY group_by_expression][ORDER BY coluna];

Divida linhas de uma tabela em grupos menores usando a cláusula GROUP BY.

Criando Grupos de Dados: Cláusula GROUP BY

Page 120: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

120

SELECT coluna, group_function(coluna)FROM tabela[WHERE condição][GROUP BY group_by_expression][ORDER BY coluna];

Divida linhas de uma tabela em grupos menores usando a cláusula GROUP BY.

Criando Grupos de Dados: Cláusula GROUP BY

Page 121: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

121

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 GROUP BY deptno;

DEPTNO AVG(SAL)--------- --------- 10 2916.6667 20 2175 30 1566.6667

Todas as colunas na lista SELECT que não estejam em funções de grupo devem estar na cláusula GROUP BY

Usando a Cláusula GROUP BY

Page 122: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

122

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 GROUP BY deptno;

DEPTNO AVG(SAL)--------- --------- 10 2916.6667 20 2175 30 1566.6667

Todas as colunas na lista SELECT que não estejam em funções de grupo devem estar na cláusula GROUP BY

Usando a Cláusula GROUP BY

Page 123: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

123

SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY deptno;

AVG(SAL)--------- 2916.6667 21751566.6667

A coluna GROUP BY não precisa estar na lista SELECT

Usando a Cláusula GROUP BY

Page 124: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

124

SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY deptno;

AVG(SAL)--------- 2916.6667 21751566.6667

A coluna GROUP BY não precisa estar na lista SELECT

Usando a Cláusula GROUP BY

Page 125: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

125

EMPEMP

"soma de"soma desalários nasalários natabela EMPtabela EMPpara cadapara cada

cargo,cargo,agrupados por agrupados por departamento"departamento"

DEPTNO JOB SAL

--------- --------- ---------

10 MANAGER 2450

10 PRESIDENT 5000

10 CLERK 1300

20 CLERK 800

20 CLERK 1100

20 ANALYST 3000

20 ANALYST 3000

20 MANAGER 2975

30 SALESMAN 1600

30 MANAGER 2850

30 SALESMAN 1250

30 CLERK 950

30 SALESMAN 1500

30 SALESMAN 1250

JOB SUM(SAL)

--------- ---------

CLERK 1300

MANAGER 2450

PRESIDENT 5000

ANALYST 6000

CLERK 1900

MANAGER 2975

CLERK 950

MANAGER 2850

SALESMAN 5600

DEPTNO

--------

10

10

10

20

20

20

30

30

30

Agrupando por Mais de Uma Coluna

Page 126: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

126

EMPEMP

"soma de"soma desalários nasalários natabela EMPtabela EMPpara cadapara cada

cargo,cargo,agrupados por agrupados por departamento"departamento"

DEPTNO JOB SAL

--------- --------- ---------

10 MANAGER 2450

10 PRESIDENT 5000

10 CLERK 1300

20 CLERK 800

20 CLERK 1100

20 ANALYST 3000

20 ANALYST 3000

20 MANAGER 2975

30 SALESMAN 1600

30 MANAGER 2850

30 SALESMAN 1250

30 CLERK 950

30 SALESMAN 1500

30 SALESMAN 1250

JOB SUM(SAL)

--------- ---------

CLERK 1300

MANAGER 2450

PRESIDENT 5000

ANALYST 6000

CLERK 1900

MANAGER 2975

CLERK 950

MANAGER 2850

SALESMAN 5600

DEPTNO

--------

10

10

10

20

20

20

30

30

30

Agrupando por Mais de Uma Coluna

Page 127: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

127

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.

Usando a Cláusula GROUP BY em Várias Colunas

Page 128: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

128

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.

Usando a Cláusula GROUP BY em Várias Colunas

Page 129: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

129

SQL> SELECT deptno, COUNT(ename) 2 FROM emp;

SQL> SELECT deptno, COUNT(ename) 2 FROM emp;

SELECT deptno, COUNT(ename) *ERROR at line 1:ORA-00937: Nenhuma função de grupo de grupo único (Not a single-group group function)

SELECT deptno, COUNT(ename) *ERROR at line 1:ORA-00937: Nenhuma função de grupo de grupo único (Not a single-group group function)

• Qualquer coluna ou expressão na lista SELECT que não seja uma função agregada deve estar na cláusula GROUP BY.

Consultas Ilegais Usando Funções de Grupo

Page 130: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

130

SQL> SELECT deptno, COUNT(ename) 2 FROM emp;

SQL> SELECT deptno, COUNT(ename) 2 FROM emp;

SELECT deptno, COUNT(ename) *ERROR at line 1:ORA-00937: Nenhuma função de grupo de grupo único (Not a single-group group function)

SELECT deptno, COUNT(ename) *ERROR at line 1:ORA-00937: Nenhuma função de grupo de grupo único (Not a single-group group function)

ColunaColuna ausenteausente nana cláusulacláusula GROUP BYGROUP BY

• Qualquer coluna ou expressão na lista SELECT que não seja uma função agregada deve estar na cláusula GROUP BY.

Consultas Ilegais Usando Funções de Grupo

Page 131: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

131

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > 2000 4 GROUP BY deptno;

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > 2000 4 GROUP BY deptno;

WHERE AVG(sal) > 2000 *ERROR at line 3:ORA-00934: A função de grupo não é permitida aqui (Group function is not allowed here)

WHERE AVG(sal) > 2000 *ERROR at line 3:ORA-00934: A função de grupo não é permitida aqui (Group function is not allowed here)

–Não é possível usar a cláusula WHERE para restringir grupos.

–Use a cláusula HAVING para restringir grupos.

Consultas Ilegais Usando Funções de Grupo

Page 132: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

132

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > 2000 4 GROUP BY deptno;

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > 2000 4 GROUP BY deptno;

WHERE AVG(sal) > 2000 *ERROR at line 3:ORA-00934: A função de grupo não é permitida aqui (Group function is not allowed here)

WHERE AVG(sal) > 2000 *ERROR at line 3:ORA-00934: A função de grupo não é permitida aqui (Group function is not allowed here)

NãoNão é possível usar a cláusula

é possível usar a cláusula

WHERE para restringir g

rupos

WHERE para restringir g

rupos

–Não é possível usar a cláusula WHERE para restringir grupos.

–Use a cláusula HAVING para restringir grupos.

Consultas Ilegais Usando Funções de Grupo

Page 133: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

133

"salário"saláriomáximo pormáximo por

departamentodepartamentomaior do quemaior do queUS$ 2.900"US$ 2.900"

EMPEMP 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

DEPTNO MAX(SAL)

--------- ---------

10 5000

20 3000

Excluindo Resultados do Grupo

Page 134: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

134

"salário"saláriomáximo pormáximo por

departamentodepartamentomaior do quemaior do queUS$ 2.900"US$ 2.900"

EMPEMP 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

50005000

30003000

28502850

DEPTNO MAX(SAL)

--------- ---------

10 5000

20 3000

Excluindo Resultados do Grupo

Page 135: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

135

SELECT coluna, group_functionFROM tabela[WHERE condição][GROUP BY group_by_expression][HAVING group_condition][ORDER BY coluna];

• Use a cláusula HAVING para restringir grupos

–As linhas são agrupadas.

–A função de grupo é aplicada.

–Os grupos que correspondem à cláusula HAVING são exibidos.

Excluindo Resultados do Grupo: Cláusula HAVING

Page 136: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

136

SELECT coluna, group_functionFROM tabela[WHERE condição][GROUP BY group_by_expression][HAVING group_condition][ORDER BY coluna];

• Use a cláusula HAVING para restringir grupos

–As linhas são agrupadas.

–A função de grupo é aplicada.

–Os grupos que correspondem à cláusula HAVING são exibidos.

Excluindo Resultados do Grupo: Cláusula HAVING

Page 137: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

137

SQL> SELECT deptno, max(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING max(sal)>2900;

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

Usando a Cláusula HAVING

Page 138: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

138

SQL> SELECT deptno, max(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING max(sal)>2900;

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

Usando a Cláusula HAVING

Page 139: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

139

SQL> SELECT job, SUM(sal) PAYROLL 2 FROM emp 3 WHERE job NOT LIKE 'SALES%' 4 GROUP BY job 6 ORDER BY SUM(sal);

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

5 HAVING SUM(sal)>5000

Usando a Cláusula HAVING

Page 140: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

140

SQL> SELECT job, SUM(sal) PAYROLL 2 FROM emp 3 WHERE job NOT LIKE 'SALES%' 4 GROUP BY job 6 ORDER BY SUM(sal);

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

5 HAVING SUM(sal)>5000

Usando a Cláusula HAVING

Page 141: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

141

SQL> SELECT max(avg(sal)) 2 FROM emp 3 GROUP BY deptno;

MAX(AVG(SAL))------------- 2916.6667

Exiba o salário médio máximo

Aninhando Funções de Grupo

Page 142: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

142

SQL> SELECT max(avg(sal)) 2 FROM emp 3 GROUP BY deptno;

MAX(AVG(SAL))------------- 2916.6667

Exiba o salário médio máximo

Aninhando Funções de Grupo

Page 143: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

143

SELECT coluna, group_function(coluna)FROM tabela[WHERE condição][GROUP BY group_by_expression][HAVING group_condition][ORDER BY coluna];

•Ordem de avaliação das cláusulas:

–cláusula WHERE

–cláusula GROUP BY

–cláusula HAVING

Sumário

Page 144: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

144

SELECT coluna, group_function(coluna)FROM tabela[WHERE condição][GROUP BY group_by_expression][HAVING group_condition][ORDER BY coluna];

•Ordem de avaliação das cláusulas:

–cláusula WHERE

–cláusula GROUP BY

–cláusula HAVING

Sumário

Page 145: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

145

SQL: Lista de Exercício

Determine se verdadeiro(V) ou falso(F) as seguintes declarações:

1. Funções de grupo trabalham em muitas linhas para produzir um resultado.

2. Funções de grupo usam nulls nos seus cálculos.

3. A cláusula WHERE restringe linhas antes de incluí-las em cálculos de funções de grupos.

4. Mostre o maior, o menor, a soma e a média dos salários 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 média dos salários para cada tipo de cargo. Salve em p5q5.sql.

6. Escreva uma query para mostrar o número de empregados com o mesmo cargo.

7. Determine o número de gerentes sem listá-los. Nomeie a coluna como Number of Managers.

Page 146: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

146

SQL: Lista de Exercício

Determine se verdadeiro(V) ou falso(F) as seguintes declarações:

8. Escreva uma query que mostre a diferença entre o maior e menor salário. Nomeie a coluna como DIFFERENCE.

9. Mostre o número do gerente e o salário mais baixo pago aos funcionários daquele gerente. Exclua o empregado que não possua gerente. Exclua qualquer grupo where o menor salário seja menor que $1000. Ordene por salário (descendente).

10. Escreva uma query para mostrar o nome do departamento, nome da localização, número de empregados, e média de salário 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 número total de empregados e daquele total, o número que foram contratados em 1980, 1981, 1982, e 1983. Nomeie as colunas de forma apropriada.

Page 147: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

147

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 várias linhas

Subconsultas

Page 148: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

148

"Que funcionários têm um salário maior que o salário de Jones?"

Consulta principal

??

"Qual é o salário de Jones?" ??

Subconsulta

"Quem tem um salário maior que o de Jones?"

Usando uma Subconsulta para Resolver um Problema

Page 149: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

149

"Que funcionários têm um salário maior que o salário de Jones?"

Consulta principal

??

"Qual é o salário de Jones?" ??

Subconsulta

"Quem tem um salário maior que o de Jones?"

Usando uma Subconsulta para Resolver um Problema

Page 150: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

150

SELECT select_listFROM tabelaWHERE operador expr

(SELECT select_list FROM tabela);

–A subconsulta (consulta interna) é executada uma vez antes da consulta principal.

–O resultado da subconsulta é usado pela consulta principal (consulta externa).

Subconsultas

Page 151: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

151

SELECT select_listFROM tabelaWHERE operador expr

(SELECT select_list FROM tabela);

–A subconsulta (consulta interna) é executada uma vez antes da consulta principal.

–O resultado da subconsulta é usado pela consulta principal (consulta externa).

Subconsultas

Page 152: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

152

SQL> SELECT ename 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566);

Usando uma Subconsulta

Page 153: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

153

2975

SQL> SELECT ename 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566);

Usando uma Subconsulta

Page 154: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

154

2975

SQL> SELECT ename 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566);

ENAME----------KINGFORDSCOTT

ENAME----------KINGFORDSCOTT

Usando uma Subconsulta

Page 155: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

155

–Coloque as subconsultas entre parênteses.

–Coloque as subconsultas no lado direito do operador de comparação.

–Não adicione uma cláusula ORDER BY a uma subconsulta.

–Use operadores de uma única linha com subconsultas de uma única linha.

–Use operadores de várias linhas com subconsultas de várias linhas.

Diretrizes para o Uso de Subconsultas

Page 156: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

156

Consulta principal

Subconsulta retornaretorna

CLERKCLERK

Subconsulta de uma única linha

Subconsulta de várias linhas

Subconsulta de várias colunas

Tipos de Subconsultas

Page 157: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

157

Consulta principal

Subconsulta retornaretorna

CLERKCLERK

Consulta principal

SubconsultaCLERK CLERK MANAGERMANAGER

retornaretorna

Subconsulta de uma única linha

Subconsulta de várias linhas

Subconsulta de várias colunas

Tipos de Subconsultas

Page 158: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

158

Consulta principal

Subconsulta retornaretorna

CLERKCLERK

Consulta principal

SubconsultaCLERK CLERK MANAGERMANAGER

retornaretorna

CLERK 7900CLERK 7900MANAGER 7698MANAGER 7698

Main query

Subquery retornaretorna

Consulta principal

Subconsulta

Subconsulta de uma única linha

Subconsulta de várias linhas

Subconsulta de várias colunas

Tipos de Subconsultas

Page 159: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

159

Operador

=

>

>=

<

<=

<>

Significado

Igual a

Maior do que

Maior do que ou igual a

Menor do que

Menor ou igual a

Diferente de

–Retorne somente uma linha

–Use operadores de comparação de uma única linha

Subconsultas de uma Única Linha

Page 160: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

160

SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE empno = 7369) 7 AND sal > 8 (SELECT sal 9 FROM emp 10 WHERE empno = 7876);

Executando Subconsultas de uma Única Linha

Page 161: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

161

CLERK

1100

SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE empno = 7369) 7 AND sal > 8 (SELECT sal 9 FROM emp 10 WHERE empno = 7876);

Executando Subconsultas de uma Única Linha

Page 162: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

162

CLERK

1100

ENAME JOB---------- ---------MILLER CLERK

ENAME JOB---------- ---------MILLER CLERK

SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE empno = 7369) 7 AND sal > 8 (SELECT sal 9 FROM emp 10 WHERE empno = 7876);

Executando Subconsultas de uma Única Linha

Page 163: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

163

SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp);

Usando Funções de Grupo em uma Subconsulta

Page 164: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

164

800SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp);

Usando Funções de Grupo em uma Subconsulta

Page 165: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

165

800

ENAME JOB SAL---------- --------- ---------SMITH CLERK 800

ENAME JOB SAL---------- --------- ---------SMITH CLERK 800

SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp);

Usando Funções de Grupo em uma Subconsulta

Page 166: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

166

SQL> SELECT deptno, MIN(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING MIN(sal) > 5 (SELECT MIN(sal) 6 FROM emp 7 WHERE deptno = 20);

–O Oracle Server primeiro executa as subconsultas.

–O Oracle Server retorna os resultados para a cláusula HAVING da consulta principal.

Cláusula HAVING com Subconsultas

Page 167: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

167

800

SQL> SELECT deptno, MIN(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING MIN(sal) > 5 (SELECT MIN(sal) 6 FROM emp 7 WHERE deptno = 20);

–O Oracle Server primeiro executa as subconsultas.

–O Oracle Server retorna os resultados para a cláusula HAVING da consulta principal.

Cláusula HAVING com Subconsultas

Page 168: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

168

SQL> SELECT empno, ename 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp 6 GROUP BY deptno);

O que Há de Errado com esta Instrução?

Page 169: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

169

SQL> SELECT empno, ename 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp 6 GROUP BY deptno);

O que Há de Errado com esta Instrução?

Page 170: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

170

SQL> SELECT empno, ename 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp 6 GROUP BY deptno);

ERROR:ORA-01427: A subconsulta de uma única linha retorna mais de uma linha (Single-row subquery returns more than one row)

no rows selected

ERROR:ORA-01427: A subconsulta de uma única linha retorna mais de uma linha (Single-row subquery returns more than one row)

no rows selected

Operador de uma única linha com

Operador de uma única linha com

subconsulta de várias

subconsulta de várias linhaslinhas

O que Há de Errado com esta Instrução?

Page 171: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

171

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

Esta Instrução Irá Funcionar?

Page 172: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

172

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

Esta Instrução Irá Funcionar?

Page 173: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

173

no rows selectedno rows selected

A subconsulta não

A subconsulta não retornaretorna nenhum

nenhum valorvalor

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

Esta Instrução Irá Funcionar?

Page 174: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

174

Operador

IN

ANY

ALL

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

–Retorne mais de uma linha

–Use operadores de comparação de várias linhas

Subconsultas de Várias Linhas

Page 175: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

175

SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal < ANY 4 (SELECT sal 5 FROM emp 6 WHERE job = 'CLERK') 7 AND job <> 'CLERK';

Usando o Operador ANY em Subconsultas de Várias Linhas

Page 176: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

176

9508001100

1300SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal < ANY 4 (SELECT sal 5 FROM emp 6 WHERE job = 'CLERK') 7 AND job <> 'CLERK';

Usando o Operador ANY em Subconsultas de Várias Linhas

Page 177: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

177

9508001100

1300

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

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

SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal < ANY 4 (SELECT sal 5 FROM emp 6 WHERE job = 'CLERK') 7 AND job <> 'CLERK';

Usando o Operador ANY em Subconsultas de Várias Linhas

Page 178: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

178

SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal > ALL 4 (SELECT avg(sal) 5 FROM emp 6 GROUP BY deptno);

Usando o Operador ALL em Subconsultas de Várias Linhas

Page 179: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

179

2916.6667

2175

1566.6667SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal > ALL 4 (SELECT avg(sal) 5 FROM emp 6 GROUP BY deptno);

Usando o Operador ALL em Subconsultas de Várias Linhas

Page 180: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

180

2916.6667

2175

1566.6667

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

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

SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal > ALL 4 (SELECT avg(sal) 5 FROM emp 6 GROUP BY deptno);

Usando o Operador ALL em Subconsultas de Várias Linhas

Page 181: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

181

SELECT select_listFROM tabelaWHERE operador expr

(SELECT select_list FROM tabela);

As subconsultas são úteis quando uma consulta baseia-se em valores desconhecidos.

Sumário

Page 182: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

182

SELECT select_listFROM tabelaWHERE operador expr

(SELECT select_list FROM tabela);

As subconsultas são úteis quando uma consulta baseia-se em valores desconhecidos.

Sumário

Page 183: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

183

SQL: Lista de Exercício

1. Escreva uma query para mostrar o nome do empregado e data de contratação para todos os empregados do departamento do Blake. Exclua o Blake.

2. Crie uma query para mostrar o número e nome dos empregados que ganham acima da máeia salarial. Ordene os resultados por salário (decrescente).

3. Escre uma query que mostre o número 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, número do departamento e cargo para todos eo empregados lotados em Dallas.

5. Mostre o nome do empregado e salário de todos os empregados do King.

6. Mostre o número do departamento, nome do empregado e cargo de todos os empregados do departamento Sales.

7. Modifiique p6q3.sql para mostrar o número e nome do empregado, salário de todos os empregados que ganham mais que média salarial e que trabalham em um departamento que possui um empregado com um T em seu nome. Salve como p6q7.sql. Execute.

Page 184: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

184

Objetivos:

–Criar uma subconsulta de várias colunas

–Descrever e explicar o comportamento de subconsultas quando valores nulos forem recuperados

–Criar uma subconsulta em uma cláusula FROM

Subconsultas de Várias Colunas

Page 185: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

185

Consulta principal

MANAGER 10

Subconsulta

SALESMAN 30

MANAGER 10

CLERK 20

Subconsultas de Várias Colunas

Page 186: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

186

Consulta principal

MANAGER 10

Subconsulta

SALESMAN 30

MANAGER 10

CLERK 20

A consulta principal A consulta principal comparacompara

MANAGER 10MANAGER 10

Valores de uma subconsulta deValores de uma subconsulta devárias linhas e de várias colunasvárias linhas e de várias colunas

SALESMAN SALESMAN 3030

MANAGER MANAGER 1010

CLERK CLERK 2020

aa

Subconsultas de Várias Colunas

Page 187: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

187

SQL> SELECT ordid, prodid, qty 2 FROM item 3 WHERE (prodid, qty) IN 4 (SELECT prodid, qty 5 FROM item 6 WHERE ordid = 605) 7 AND ordid <> 605;

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.

Usando Subconsultas de Várias Colunas

Page 188: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

188

SQL> SELECT ordid, prodid, qty 2 FROM item 3 WHERE (prodid, qty) IN 4 (SELECT prodid, qty 5 FROM item 6 WHERE ordid = 605) 7 AND ordid <> 605;

Exiba o número da ordem, o número do produto e a quantidade de qualquer item em que o número do produto e a quantidade correspondam ao número do produto e à quantidade de um item na ordem 605.

Usando Subconsultas de Várias Colunas

Page 189: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

189

SQL> SELECT ordid, prodid, qty 2 FROM item 3 WHERE (prodid, qty) IN 4 (SELECT prodid, qty 5 FROM item 6 WHERE ordid = 605) 7 AND ordid <> 605;

Exiba o número da ordem, o número do produto e a quantidade de qualquer item em que o número do produto e a quantidade correspondam ao número do produto e à quantidade de um item na ordem 605.

Usando Subconsultas de Várias Colunas

Page 190: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

190

Aos pares

PRODID QTY

101863 100

100861 100

102130 10

100890 5

100870 500

101860 50

Sem ser aos pares

PRODID QTY

101863 100

100861 100

102130 10

100890 5

100870 500

101860 50

Comparações de Coluna

Page 191: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

191

SQL> SELECT ordid, prodid, qty 2 FROM item 3 WHERE prodid IN (SELECT prodid 4 FROM item 5 WHERE ordid = 605) 6 AND qty IN (SELECT qty 7 FROM item 8 WHERE ordid = 605) 9 AND ordid <> 605;

Exiba o número da ordem, o número do produto e a quantidade de qualquer item em que o número do produto e a quantidade correspondam a qualquer número do produto e quantidade de um item na ordem 605.

Subconsulta de Comparação que Não Seja aos Pares

Page 192: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

192

SQL> SELECT ordid, prodid, qty 2 FROM item 3 WHERE prodid IN (SELECT prodid 4 FROM item 5 WHERE ordid = 605) 6 AND qty IN (SELECT qty 7 FROM item 8 WHERE ordid = 605) 9 AND ordid <> 605;

Exiba o número da ordem, o número do produto e a quantidade de qualquer item em que o número do produto e a quantidade correspondam a qualquer número do produto e quantidade de um item na ordem 605.

Subconsulta de Comparação que Não Seja aos Pares

Page 193: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

193

SQL> SELECT ordid, prodid, qty 2 FROM item 3 WHERE prodid IN (SELECT prodid 4 FROM item 5 WHERE ordid = 605) 6 AND qty IN (SELECT qty 7 FROM item 8 WHERE ordid = 605) 9 AND ordid <> 605;

Exiba o número da ordem, o número do produto e a quantidade de qualquer item em que o número do produto e a quantidade correspondam a qualquer número do produto e quantidade de um item na ordem 605.

Subconsulta de Comparação que Não Seja aos Pares

Page 194: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

194

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.

Subconsulta que Não Seja aos Pares

Page 195: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

195

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.

Subconsulta que Não Seja aos Pares

Page 196: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

196

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.no rows selected.

Valores Nulos em uma Subconsulta

Page 197: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

197

SQL> SELECT a.ename, a.sal, a.deptno, b.salavg 2 FROM emp a, (SELECT deptno, avg(sal) salavg 3 FROM emp 4 GROUP BY deptno) b 5 WHERE a.deptno = b.deptno 6 AND a.sal > b.salavg;

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

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

Usando uma Subconsulta na Cláusula FROM

Page 198: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

198

SQL> SELECT a.ename, a.sal, a.deptno, b.salavg 2 FROM emp a, (SELECT deptno, avg(sal) salavg 3 FROM emp 4 GROUP BY deptno) b 5 WHERE a.deptno = b.deptno 6 AND a.sal > b.salavg;

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

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

Usando uma Subconsulta na Cláusula FROM

Page 199: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

199

SQL: Lista de Exercício

1. Escreva uma query para mostrar nome do empregado, número do departamento e salário de qualquer empregado cujo número do departamento e salário casam ambos com o número do departamento e salário de qualquer empregado que ganha comissão.

2. Mostre o nome do empregado, nome do departamento e salário de qualquer empregado cujo salário e comissão casam ambos com com o salário e comissão de qualquer empregado lotado em Dallas.

3. Crie uma query para mostrar o nome, data de contratação e salário para todos os empregados que tenham o mesmo salário e comissão do Scott.

4. Crie uma query para mostrar os empregados que ganham salário maior que qualquer CLERKS. Ordene o resultado por salário (decrescente).

Page 200: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

200

Objetivos:

–Descrever cada instrução DML

–Inserir linhas em uma tabela

–Atualizar linhas em uma tabela

–Deletar linhas de uma tabela

–Controlar transações

Manipulação de Dados

Page 201: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

201

–Uma instrução DML é executada quando você:

•Adiciona novas linhas a uma tabela

•Modifica linhas existentes em uma tabela

•Remove linhas existentes de uma tabela

–Uma transação consiste em um conjunto de instruções DML que formam uma unidade lógica de trabalho.

DML (Data Manipulation Language)

Page 202: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

202

DEPTDEPT

Nova linhaNova linha

50 DEVELOPMENTDETROIT

DEPTDEPT

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

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

50 DEVELOPMENT DETROIT

50 DEVELOPMENT DETROIT

Adicionando uma Nova Linha em uma Tabela

Page 203: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

203

DEPTDEPT

Nova linhaNova linha

50 DEVELOPMENTDETROIT

DEPTDEPT

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

"… inserir uma nova linha na tabela DEPT…"

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

50 DEVELOPMENT DETROIT

50 DEVELOPMENT DETROIT

Adicionando uma Nova Linha em uma Tabela

Page 204: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

204

INSERT INTO tabela [(coluna [, coluna...])]VALUES (valor [, valor...]);

INSERT INTO tabela [(coluna [, coluna...])]VALUES (valor [, valor...]);

–Adicione novas linhas em uma tabela usando a instrução INSERT.

–Somente uma linha é inserida por vez com esta sintaxe.

A Instrução INSERT

Page 205: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

205

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

–Insira uma nova linha contendo valores para cada coluna.

–Liste valores na ordem default das colunas na tabela.

–Liste opcionalmente as colunas na cláusula INSERT.

– Coloque os valores de data e caractere entre aspas simples.

Inserindo Novas Linhas

Page 206: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

206

SQL> INSERT INTO dept (deptno, dname ) 2 VALUES (60, 'MIS');1 row created.1 row created.

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

Método explícito: Especifique a palavra-chave NULL.

Método implícito: Omita a coluna da lista de colunas.

Inserindo Linhas com Valores Nulos

Page 207: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

207

SQL> INSERT INTO dept (deptno, dname ) 2 VALUES (60, 'MIS');1 row created.1 row created.

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

Método explícito: Especifique a palavra-chave NULL.

Método implícito: Omita a coluna da lista de colunas.

Inserindo Linhas com Valores Nulos

Page 208: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

208

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

A função SYSDATE registra a data e hora atuais.

Inserindo Valores Especiais

Page 209: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

209

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

A função SYSDATE registra a data e hora atuais.

Inserindo Valores Especiais

Page 210: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

210

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

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

Verifique sua adição.

Adicionar um novo funcionário.

Inserindo Valores Específicos de Data

Page 211: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

211

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

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

Verifique sua adição.

Adicionar um novo funcionário.

Inserindo Valores Específicos de Data

Page 212: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

212

SQL> INSERT INTO dept (deptno, dname, loc) 2 VALUES (&department_id, 3 '&department_name', '&location');

Enter value for department_id: 8080Enter value for department_name: EDUCATIONEDUCATIONEnter value for location: ATLANTAATLANTA

1 row created.

Crie um script interativo usando parâmetros de substituição do SQL*Plus

Inserindo Valores Usando Variáveis de Substituição

Page 213: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

213

SQL> INSERT INTO dept (deptno, dname, loc) 2 VALUES (&department_id, 3 '&department_name', '&location');

Enter value for department_id: 8080Enter value for department_name: EDUCATIONEDUCATIONEnter value for location: ATLANTAATLANTA

1 row created.

Crie um script interativo usando parâmetros de substituição do SQL*Plus

Inserindo Valores Usando Variáveis de Substituição

Page 214: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

214

ACCEPT department_id PROMPT 'Please enter the -

department number:'

ACCEPT department_name PROMPT 'Please enter -

the department name:'

ACCEPT location PROMPT 'Please enter the -

location:'

INSERT INTO dept (deptno, dname, loc)

VALUES (&department_id, '&department_name',

'&location');

–ACCEPT armazena o valor em uma variável.

–PROMPT exibe o texto personalizado.

Criando um Script com Prompts Personalizados

Page 215: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

215

ACCEPT department_id PROMPT 'Please enter the -

department number:'

ACCEPT department_name PROMPT 'Please enter -

the department name:'

ACCEPT location PROMPT 'Please enter the -

location:'

INSERT INTO dept (deptno, dname, loc)

VALUES (&department_id, '&department_name',

'&location');

–ACCEPT armazena o valor em uma variável.

–PROMPT exibe o texto personalizado.

Criando um Script com Prompts Personalizados

Page 216: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

216

SQL> INSERT INTO managers(id, name, salary, hiredate) 2 SELECT empno, ename, sal, hiredate 3 FROM emp 4 WHERE job = 'MANAGER';3 rows created.3 rows created.

–Crie a instrução INSERT com uma subconsulta.

–Não use a cláusula VALUES.

–Faça a correspondência do número de colunas na cláusula INSERT com o número de colunas na subconsulta.

Copiando Linhas a partir de Outra Tabela

Page 217: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

217

SQL> INSERT INTO managers(id, name, salary, hiredate) 2 SELECT empno, ename, sal, hiredate 3 FROM emp 4 WHERE job = 'MANAGER';3 rows created.3 rows created.

–Crie a instrução INSERT com uma subconsulta.

–Não use a cláusula VALUES.

–Faça a correspondência do número de colunas na cláusula INSERT com o número de colunas na subconsulta.

Copiando Linhas a partir de Outra Tabela

Page 218: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

218

EMPEMP

EMPEMP

EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ...

EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ...

Alterando os Dados em uma Tabela

Page 219: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

219

EMPEMP

"…atualize uma "…atualize uma linha em uma tabela linha em uma tabela

EMP…"EMP…"

EMPEMP

EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ...

20

EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ...

Alterando os Dados em uma Tabela

Page 220: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

220

UPDATE tabelaSET coluna = valor [, coluna = valor, ...][WHERE condição];

UPDATE tabelaSET coluna = valor [, coluna = valor, ...][WHERE condição];

–Modifique linhas existentes com a instrução UPDATE.

–Atualize mais de uma linha por vez, se necessário.

A instrução UPDATE

Page 221: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

221

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

SQL> UPDATE employee 2 SET deptno = 20;14 rows updated.14 rows updated.

SQL> UPDATE employee 2 SET deptno = 20;14 rows updated.14 rows updated.

–Uma linha ou linhas específicas são modificadas quando você especifica a cláusula WHERE.

Todas as linhas na tabela são modificadas quando você omite a cláusula WHERE.

Atualizando Linhas em uma Tabela

Page 222: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

222

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

SQL> UPDATE employee 2 SET deptno = 20;14 rows updated.14 rows updated.

SQL> UPDATE employee 2 SET deptno = 20;14 rows updated.14 rows updated.

–Uma linha ou linhas específicas são modificadas quando você especifica a cláusula WHERE.

Todas as linhas na tabela são modificadas quando você omite a cláusula WHERE.

Atualizando Linhas em uma Tabela

Page 223: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

223

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.1 row updated.

•Atualize o cargo e o departamento do funcionário 7698 para coincidir com o do funcionário 7499.

Atualizando com Subconsulta de Várias Colunas

Page 224: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

224

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.1 row updated.

•Atualize o cargo e o departamento do funcionário 7698 para coincidir com o do funcionário 7499.

Atualizando com Subconsulta de Várias Colunas

Page 225: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

225

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

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

•Use subconsultas em instruções UPDATE para atualizar linhas em uma tabela baseada em valores de outra tabela.

Atualizando Linhas Baseadas em Outra Tabela

Page 226: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

226

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

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

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

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

Não

exis

te o

núm

ero

de d

epar

tam

ento

55

Atualizando Linhas: Erro de Restrição de Integridade

Page 227: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

227

DEPTDEPT

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

Removendo uma Linha de uma Tabela

Page 228: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

228

"… remova uma linha da "… remova uma linha da tabela DEPT…"tabela DEPT…"

DEPTDEPT

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

DEPTDEPT

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

Removendo uma Linha de uma Tabela

Page 229: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

229

DELETE [FROM] tabela[WHERE condição];

DELETE [FROM] tabela[WHERE condição];

Você pode remover linhas existentes de uma tabela usando a instrução DELETE.

A Instrução DELETE

Page 230: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

230

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

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

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

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

–Linhas específicas são deletadas quando você especifica a cláusula WHERE.

-Todas as linhas na tabela serão deletadas se você omitir a cláusula WHERE.

Deletando Linhas de uma Tabela

Page 231: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

231

SQL> DELETE FROM employee 2 WHERE deptno = 3 (SELECT deptno 4 FROM dept 5 WHERE dname ='SALES');6 rows deleted.6 rows deleted.

•Use subconsultas em instruções DELETE para remover linhas de uma tabela baseadas em valores de outra tabela.

Deletando Linhas Baseadas em Outra Tabela

Page 232: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

232

SQL> DELETE FROM employee 2 WHERE deptno = 3 (SELECT deptno 4 FROM dept 5 WHERE dname ='SALES');6 rows deleted.6 rows deleted.

•Use subconsultas em instruções DELETE para remover linhas de uma tabela baseadas em valores de outra tabela.

Deletando Linhas Baseadas em Outra Tabela

Page 233: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

233

SQL> DELETE FROM dept 2 WHERE deptno = 10;

SQL> DELETE FROM dept 2 WHERE deptno = 10;

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

DELETE FROM dept *ERROR at line 1:ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK) violated - child record foundVoc

ê não

pode dele

tar uma l

inha

que conten

ha uma c

have p

rimári

a

usada c

omo chav

e estr

angeir

a em

outra ta

bela.

Deletando Linhas: Erro de Restrição de Integridade

Page 234: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

234

•Consistem de uma das seguintes instruções:

–Instruções DML que fazem uma alteração Instruções DML que fazem uma alteração consistente nos dadosconsistente nos dados

–Uma instrução DDLUma instrução DDL

–Uma instrução DCLUma instrução DCL

Transações de Banco de Dados

Page 235: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

235

–Começa quando for executada a primeira instrução SQL executável

–Termina com um dos seguintes eventos:

•COMMIT ou ROLLBACK é emitida

•Instrução DDL ou DCL é executada (commit automático)

•O usuário sai

•O sistema cai

Transações de Banco de Dados

Page 236: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

236

–Garantir consistência de dados

–Visualizar alterações nos dados antes de fazer as alterações permanentemente

–Agrupar operações relacionadas logicamente

Vantagens das Instruções COMMIT e ROLLBACK

Page 237: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

237

DELETEDELETE

Savepoint ASavepoint A Savepoint BSavepoint BCOMMITCOMMIT

INSERTINSERTUPDATEUPDATEINSERTINSERT

TransaçãoTransação

Controlando Transações

Page 238: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

238

DELETEDELETE

Savepoint ASavepoint A

ROLLBACK para Savepoint BROLLBACK para Savepoint B

DELETEDELETE

Savepoint BSavepoint BCOMMITCOMMIT

INSERTINSERTUPDATEUPDATEINSERTINSERT

TransaçãoTransação

Controlando Transações

Page 239: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

239

DELETEDELETE

Savepoint ASavepoint A

ROLLBACK para Savepoint BROLLBACK para Savepoint B

DELETEDELETE

Savepoint BSavepoint BCOMMITCOMMIT

INSERTINSERTUPDATEUPDATE

ROLLBACK para Savepoint AROLLBACK para Savepoint A

INSERTINSERTUPDATEUPDATEINSERTINSERT

TransaçãoTransação

Controlando Transações

Page 240: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

240

DELETEDELETE

Savepoint ASavepoint A

ROLLBACK para Savepoint BROLLBACK para Savepoint B

DELETEDELETE

Savepoint BSavepoint BCOMMITCOMMIT

INSERTINSERTUPDATEUPDATE

ROLLBACK para Savepoint AROLLBACK para Savepoint A

INSERTINSERTUPDATEUPDATEINSERTINSERT

ROLLBACKROLLBACK

INSERTINSERT

TransaçãoTransação

Controlando Transações

Page 241: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

241

–O estado anterior dos dados pode ser recuperado.

–O usuário atual pode revisar os resultados das operações DML usando a instrução SELECT.

–Outros usuários não poderão ver os resultados das instruções DML do usuário atual.

–As linhas afetadas são bloqueadas, outros usuários não poderão alterar os dados dentro das linhas afetadas.

Estado dos Dados Antes de COMMIT ou ROLLBACK

Page 242: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

242

–As alterações nos dados são feitas permanentemente no banco de dados.

–O estado anterior dos dados é perdido permanentemente.

–Todos os usuários podem ver os resultados.

–As linhas afetadas são desbloqueadas, essas linhas estão disponíveis para serem manipuladas por outros usuários.

–Todos os savepoints são apagados.

Estado dos Dados Após COMMIT

Page 243: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

243

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

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

SQL> COMMIT;Commit complete.Commit complete.

Submeter alterações a commit.

Fazer as alterações.

Submetendo Dados a Commit

Page 244: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

244

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

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

SQL> COMMIT;Commit complete.Commit complete.

Submeter alterações a commit.

Fazer as alterações.

Submetendo Dados a Commit

Page 245: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

245

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

•Descarte todas as alterações pendentes usando a instrução ROLLBACK.

–As alterações nos dados são desfeitas.As alterações nos dados são desfeitas.

–O estado anterior dos dados é restaurado.O estado anterior dos dados é restaurado.

–As linhas afetadas são desbloqueadas.As linhas afetadas são desbloqueadas.

Estado dos Dados Após ROLLBACK

Page 246: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

246

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

•Descarte todas as alterações pendentes usando a instrução ROLLBACK.

–As alterações nos dados são desfeitas.As alterações nos dados são desfeitas.

–O estado anterior dos dados é restaurado.O estado anterior dos dados é restaurado.

–As linhas afetadas são desbloqueadas.As linhas afetadas são desbloqueadas.

Estado dos Dados Após ROLLBACK

Page 247: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

247

SQL> UPDATE...SQL> SAVEPOINT update_done;Savepoint created.Savepoint created.SQL> INSERT...SQL> ROLLBACK TO update_done;Rollback complete.Rollback complete.

–Crie um marcador em uma transação atual usando a instrução SAVEPOINT.

–Faça roll back do marcador usando a instrução ROLLBACK TO SAVEPOINT.

Fazendo Roll Back de Alterações para um Marcador

Page 248: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

248

SQL> UPDATE...SQL> SAVEPOINT update_done;Savepoint created.Savepoint created.SQL> INSERT...SQL> ROLLBACK TO update_done;Rollback complete.Rollback complete.

–Crie um marcador em uma transação atual usando a instrução SAVEPOINT.

–Faça roll back do marcador usando a instrução ROLLBACK TO SAVEPOINT.

Fazendo Roll Back de Alterações para um Marcador

Page 249: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

249

–Se uma única instrução DML falhar durante a execução, será feito roll back somente dessa instrução.

–O Oracle Server implementa um savepoint implícito.

–Todas as outras alterações são mantidas.

–O usuário deve finalizar as transações explicitamente usando uma instrução COMMIT ou ROLLBACK.

Rollback no Nível da Instrução

Page 250: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

250

–A consistência na leitura garante sempre uma exibição consistente dos dados.

–As alterações feitas por um usuário não entram em conflito com as alterações feitas por outro usuário.

–A consistência na leitura garante que nos mesmos dados:

•Os leitores não esperem pelos autores

•Os autores não esperem pelos leitores

Consistência na Leitura

Page 251: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

251

UPDATE empUPDATE empSET sal = 2000SET sal = 2000WHERE ename = WHERE ename = 'SCOTT';'SCOTT';

Blocos Blocos de dadosde dados

Segmentos Segmentos de rollbackde rollback

dados dados alterados alterados e dados e dados intactosintactos

antes de antes de alterar dados alterar dados "antigos""antigos"

Usuário AUsuário A

Usuário BUsuário B

Imagem da Imagem da consistência consistência na leiturana leitura

SELECT *SELECT *FROMFROM emp;emp;

Implementação da Consistência na Leitura

Page 252: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

252

•Bloqueios::

–Impedem a interação destrutiva entre transações simultâneas

–Não requerem ação do usuário

–Usam automaticamente o nível mais baixo de restrição

–São mantidos durante a duração da transação

–Há dois modos básicos:

•Exclusivo

•Compartilhado

Bloqueando

Page 253: Banco de Dados - tiagodemelo.infotiagodemelo.info/wp-content/uploads/2019/05/aula-sql.pdf · –Instruções SQL não fazem distinção entre maiúsculas e minúsculas. –Instruções

253

Descrição

Adiciona uma nova linha à tabela

Modifica linhas existentes na tabela

Remove linhas existentes da tabela

Torna permanente todas as alterações pendentes

Permite um rollback no marcador do savepoint

Descarta todas as alterações nos dados pendentes

Instrução

INSERT

UPDATE

DELETE

COMMIT

SAVEPOINT

ROLLBACK

Sumário