Vous êtes sur la page 1sur 281

Projeto de Banco de Dados

Instrues DML

Prof. Wanderson Senra Michel


wanderson.senra@udf.edu.br

Introduo

Usando SQL para Consultar Seu Banco de Dados

SQL (Structured query language) :


A linguagem ANSI padro para a operao de bancos
de dados relacionais
Eficiente, fcil de aprender e de usar
Funcionalmente completa (Com SQL, voc pode
definir, recuperar e manipular dados nas tabelas)
SELECT department_name
FROM departments;

Oracle
aplicativos

Instrues SQL
SELECT
INSERT
UPDATE
DELETE
MERGE

Linguagem DML

CREATE
ALTER
DROP
RENAME
TRUNCATE
COMMENT

Linguagem DDL

GRANT
REVOKE

Linguagem DCL

COMMIT
ROLLBACK
SAVEPOINT

Controle de transao

Ambientes de Desenvolvimento para SQL

H dois ambientes de desenvolvimento:


A principal ferramenta o Oracle SQL Developer.
A interface de linha de comando SQL*Plus tambm
poder ser usada.

SQL Developer

SQL*Plus

Esquema de Human Resources (HR)

DEPARTMENTS
department_id
department_name
manager_id
location_id

LOCATION

location_id
street_address
postal_code
cidade
state_province
country_id

JOB_HISTORY
employee_id
start_date
end_date
job_id
department_id

JOBS

job_id
job_title
min_salary
max_salary

EMPLOYEES
employee_id
first_name
last_name
email
phone_number
hire_date
job_id
salrio
commission_pct
manager_id
department_id

COUNTRY

country_id
country_name
region_id

REGION

region_id
region_name

Recuperando
dados por meio
da instruo SQL
SELECT

Agenda de Lies

Instruo SELECT bsica


Expresses aritmticas e valores NULL na
instruo SELECT
Apelidos de colunas
Uso de operador de concatenao, strings de
caracteres de literal, operador de cotao
alternativo e palavra-chave DISTINCT
Comando DESCRIBE

Recursos das instrues SQL SELECT

Projeo

Seleo

Tabela 1

Tabela 1
Join

Tabela 1

Tabela 2

Instruo SELECT bsica

SELECT *|{[DISTINCT] column|expression [alias],...}


FROM table;

SELECT identifica as colunas a serem exibidas.


FROM identifica a tabela contendo aquelas
colunas.

Selecionando todas as colunas

SELECT *
FROM departments;

Selecionando colunas especficas

SELECT department_id, location_id


FROM departments;

Criando instrues SQL

As instrues SQL no fazem distino entre maisculas e


minsculas.
As instrues SQL podem ser inseridas em uma ou mais linhas.
As palavras-chave no podem ser abreviadas nem divididas nas
linhas.
As clusulas geralmente so colocadas em linhas separadas.
Os recuos so usados para melhorar a legibilidade.
No SQL Developer, as instrues SQL podem ser, opcionalmente,
terminadas com um ponto-e-vrgula (;).
Os pontos e vrgulas so necessrios quando voc executa vrias
instrues SQL.
No SQL*Plus, voc deve finalizar cada instruo SQL com um
ponto-e-vrgula (;).

Agenda de Lies

Instruo SELECT bsica


Expresses aritmticas e valores NULL na
instruo SELECT
Apelidos de colunas
Uso de operador de concatenao, strings de
caracteres de literal, operador de cotao
alternativo e palavra-chave DISTINCT
Comando DESCRIBE

Expresses aritmticas

Crie expresses com dados numricos e data


usando operadores aritmticos.
Operador

Descrio

Adio

Subtrao

Multiplicao

Diviso

Usando operadores aritmticos

SELECT last_name, salary, salary + 300


FROM employees;

Precedncia de operadores

SELECT last_name, salary, 12*salary+100


FROM employees;

SELECT last_name, salary, 12*(salary+100)


FROM employees;

Definindo um valor nulo

Nulo um valor indisponvel, no atribudo,


desconhecido ou no aplicvel.
Nulo no o mesmo que zero ou um espao em branco.
SELECT last_name, job_id, salary, commission_pct
FROM employees;

Valores nulos em expresses aritmticas

Expresses aritmticas contendo uma


avaliao de valor nulo para nulo.
SELECT last_name, 12*salary*commission_pct
FROM employees;

Agenda de Lies

Instruo SELECT bsica


Expresses aritmticas e valores NULL na
instruo SELECT
Apelidos de colunas
Uso de operador de concatenao, strings de
caracteres de literal, operador de cotao
alternativo e palavra-chave DISTINCT
Comando DESCRIBE

Definindo um apelido de coluna

Um apelido de coluna:
Renomeia um cabealho de coluna
til com clculos
Vem imediatamente aps o nome da coluna
(tambm pode existir uma palavra-chave opcional
AS entre o nome da coluna e o apelido).
Exige aspas duplas se contiver espaos ou
caracteres especiais, ou se fizer distino entre
maisculas e minsculas

Usando apelidos de coluna

SELECT last_name AS name, commission_pct comm


FROM employees;

SELECT last_name "Name" , salary*12 "Annual Salary"


FROM employees;

Agenda de Lies

Instruo SELECT bsica


Expresses Aritmticas e valores NULL na
instruo SELECT
Apelidos de colunas
Uso de operador de concatenao, strings de
caracteres de literal, operador de cotao
alternativo e palavra-chave DISTINCT
Comando DESCRIBE

Operador de concatenao

Um operador de concatenao:
Vincula colunas ou strings de caracteres a outras
colunas
representado por duas barras verticais (||)
Cria uma coluna resultante que uma expresso de
caractere
SELECT
FROM

last_name||job_id AS "Employees"
employees;

Strings de caracteres de literal

Um literal um caractere, um nmero ou


uma data que est includa na instruo
SELECT.
Os valores de data e literal de caractere
devem ser colocados entre aspas simples.
Cada string de caracteres emitida uma
vez para cada linha retornada.

Usando strings de caracteres de literal

SELECT last_name ||' is a '||job_id


AS "Employee Details"
FROM employees;

Linhas duplicadas

A exibio padro de consultas de todas as linhas,


incluindo as linhas duplicadas.
1
SELECT department_id
FROM employees;

2
SELECT DISTINCT department_id
FROM employees;

Agenda de Lies

Instruo SELECT bsica


Expresses aritmticas e valores NULL na
instruo SELECT
Apelidos de colunas
Uso de operador de concatenao, strings de
caracteres de literal, operador de cotao
alternativo e palavra-chave DISTINCT
Comando DESCRIBE

Exibindo a Estrutura da Tabela

Use o comando DESCRIBE para exibir a estrutura de


uma tabela.
Ou selecione a tabela na rvore Connections e use a
guia Columns para visualizar a estrutura da tabela.
DESC[RIBE] tablename

Usando o comando DESCRIBE

DESCRIBE employees

Restringindo e
classificando
dados

Agenda de Lies

Limitando linhas com:


A clusula WHERE
Condies de comparao usando as condies =, <=,
BETWEEN, IN, LIKE e NULL
Condies lgicas usando os operadores AND, OR e
NOT

Regras de precedncia para operadores em uma


expresso
Classificando linhas com a clusula ORDER BY

Limitando linhas com uma seleo

EMPLOYEES

recuperar todos os
funcionrios do
departamento 90

Limitando as linhas selecionadas

Restrinja as linhas retornadas usando a clusula


WHERE:
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)];

A clusula WHERE vem aps a clusula FROM.

Usando a clusula WHERE

SELECT employee_id, last_name, job_id, department_id


FROM employees
WHERE department_id =90;

Strings de caracteres e datas

As strings de caracteres e os valores de datas so


inseridos entre aspas simples.
Os valores de caracteres fazem distino entre
maisculas e minsculas, e os valores de datas
fazem distino de formato.
O formato padro de exibio de data DD-MONRR.
SELECT last_name, job_id, department_id
FROM employees
WHERE last_name = 'Whalen' ;
SELECT last_name
FROM employees
WHERE hire_date = '17-FEB-96' ;

Operadores de comparao

Operador

Significado

Igual a

>

Maior que

>=

Maior que ou igual a

<

Menor que

<=

Menor que ou igual a

<>

Diferente de

BETWEEN
...AND...

Entre dois valores (inclusive)

IN(set)

Corresponde a qualquer lista de


valores
Corresponde a um padro de
caracteres
um valor nulo

LIKE
IS NULL

Usando operadores de comparao

SELECT last_name, salary


FROM employees
WHERE salary <= 3000 ;

Condies de intervalo usando o operador BETWEEN

Use o operador BETWEEN para exibir as linhas com


base em um intervalo de valores:
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500 ;
Limite inferior

Limite superior

Condio de associao usando o operador IN

Use o operador IN para testar os valores de uma


lista:
SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 201) ;

Correspondncia de padres usando o operador LIKE

Use o operador LIKE para executar pesquisas


com caracteres curinga de valores vlidos de string
de pesquisa.
As condies de pesquisa podem conter
caracteres literais ou nmeros:
% denota zero ou muitos caracteres.
_ denota um caractere.
SELECT
FROM
WHERE

first_name
employees
first_name LIKE 'S%' ;

Combinando caracteres curinga

possvel combinar dois caracteres curingas (%, _)


com caracteres literais para correspondncia de
padres:
SELECT last_name
FROM employees
WHERE last_name LIKE '_o%' ;

Usando as condies NULL

Teste os nulos com o operador IS NULL.


SELECT last_name, manager_id
FROM employees
WHERE manager_id IS NULL ;

Definindo condies usando os operadores lgicos

Operador

Significado

AND

Retornar TRUE se ambas as condies


componentes forem verdadeiras

OR

Retornar TRUE se uma das condies


componentes for verdadeira

NOT

Retornar TRUE se a condio for falsa

Usando o operador AND

AND requer que ambas as condies


componentes sejam verdadeiras:
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
AND
job_id LIKE '%MAN%' ;

Usando o operador OR

OR requer que uma condio componente seja


verdadeira:
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
OR
job_id LIKE '%MAN%' ;

Usando o operador NOT

SELECT last_name, job_id


FROM employees
WHERE job_id
NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP') ;

Agenda de Lies

Limitando linhas com:


A clusula WHERE
Condies de comparao usando os operadores =,
<=, BETWEEN, IN, LIKE, and NULL
Condies lgicas usando os operadores AND, OR e
NOT

Regras de precedncia para operadores em uma


expresso
Classificando linhas usando a clusula ORDER BY

Regras de precedncia

Operador

Significado

Operadores aritmticos

Operador de concatenao

Condies de comparao

IS [NOT] NULL, LIKE, [NOT] IN

[NOT] BETWEEN

Diferente de

Condio lgica NOT

Condio lgica AND

Condio lgica OR

possvel usar parnteses para sobrepor


as regras de precedncia.

Regras de precedncia

SELECT last_name, job_id, salary


FROM employees
WHERE job_id = 'SA_REP'
OR
job_id = 'AD_PRES'
AND
salary > 15000;

SELECT last_name, job_id, salary


FROM employees
WHERE (job_id = 'SA_REP'
OR
job_id = 'AD_PRES')
AND salary > 15000;

Agenda de Lies

Limitando linhas com:


A clusula WHERE
Condies de comparao usando os operadores =,
<=, BETWEEN, IN, LIKE, and NULL
Condies lgicas usando os operadores AND, OR e
NOT

Regras de precedncia para operadores em uma


expresso
Classificando linhas usando a clusula ORDER BY

Usando a clusula ORDER BY

Classificar as linhas recuperadas com a clusula


ORDER BY:
ASC: ordem ascendente, padro
DESC: ordem descendente

A clusula ORDER BY vem por ltimo na instruo


SELECT:
SELECT
last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date ;

Classificando

Classificando na ordem descendente:


SELECT
last_name, job_id, department_id, hire_date
FROM employees
1
ORDER BY hire_date DESC ;

Classificando por apelidos de coluna:


SELECT employee_id, last_name, salary*12 annsal
FROM employees
ORDER BY annsal ;

Classificando

Classificando ao usar a posio numrica da


coluna:
SELECT
last_name, job_id, department_id, hire_date
FROM employees
3
ORDER BY 3;

Classificando por vrias colunas:


SELECT last_name, department_id, salary
FROM employees
ORDER BY department_id, salary DESC;

Agenda de Lies

Limitando linhas com:


A clusula WHERE
Condies de comparao usando os operadores =,
<=, BETWEEN, IN, LIKE, and NULL
Condies lgicas usando os operadores AND, OR e
NOT

Regras de precedncia para operadores em uma


expresso
Classificando linhas com a clusula ORDER BY

Usando funes
de uma nica
linha para
personalizar a
sada

Agenda de Lies

Funes SQL de uma nica linha


Funes de caracteres
Funes de nmeros
Trabalhando com datas
Funes de datas

Funes SQL

Entrada

Sada
Funo
A funo executa a ao

arg 1
arg 2

Resultado

arg n

Dois tipos de funes SQL

Funes

Funes de
funes

Funes de
funes

Retornam um resultado
por linha

Retornam um resultado
por um conjunto de linhas

Funes de uma nica linha

Funes de uma nica linha:

Manipulam itens de dados


Aceitam argumentos e retornam um valor
Atuam em cada linha retornada
Retornam um resultado por linha
Podem modificar o tipo de dados
Podem ser aninhadas
Aceitam argumentos que podem ser uma coluna
ou uma expresso
function_name [(arg1, arg2,...)]

Funes de uma nica linha

Caracteres

Geral

Nmero

Funes

Converso

Data

Agenda de Lies

Funes SQL de uma nica linha


Funes de caracteres
Funes de nmeros
Trabalhando com datas
Funes de datas

Funes de caracteres

Funes

Funes de
Converso

Funes de
Manipulao

LOWER
UPPER
INITCAP

CONCAT
SUBSTR
LENGTH
INSTR
LPAD | RPAD
TRIM
REPLACE

Funes de converso de capitalizao

Essas funes convertem a capitalizao das


strings de caracteres:
Funo

Resultado

LOWER('SQL Course')

sql course

UPPER('SQL Course')

SQL COURSE

INITCAP('SQL Course')

Sql Course

Usando funes de converso de capitalizao

Exibe o nmero de funcionrio, o nome e o nmero


de departamento do funcionrio Higgins:
SELECT employee_id, last_name, department_id
FROM employees
WHERE last_name = 'higgins';
SELECT employee_id, last_name, department_id
FROM employees
WHERE LOWER(last_name) = 'higgins';

Funes de manipulao de caracteres

Essas funes manipulam as strings de caracteres:


Funo

Resultado

CONCAT('Hello', 'World')

HelloWorld

SUBSTR('HelloWorld',1,5)

Hello

LENGTH('HelloWorld')

10

INSTR('HelloWorld', 'W')

LPAD(salary,10,'*')

*****24000

RPAD(salary, 10, '*')

24000*****

REPLACE
('JACK and JUE','J','BL')

BLACK and BLUE

TRIM('H' FROM 'HelloWorld')

elloWorld

Usando as funes de manipulao de caracteres

1
SELECT employee_id, CONCAT(first_name, last_name) NAME,
job_id, LENGTH (last_name),
INSTR(last_name, 'a') "Contains 'a'?"
FROM employees
WHERE SUBSTR(job_id, 4) = 'REP';

Agenda de Lies

Funes SQL de uma nica linha


Funes de caracteres
Funes de nmeros
Trabalhando com datas
Funes de datas

Funes de nmeros

ROUND: arredonda o valor para um decimal especfico


TRUNC: trunca o valor para um decimal especfico
MOD: retorna o residual da diviso
Funo

Resultado

ROUND(45.926, 2)

45.93

TRUNC(45.926, 2)

45.92

MOD(1600, 300)

100

Usando a funo ROUND

SELECT ROUND(45.923,2), ROUND(45.923,0),


ROUND(45.923,-1)
FROM
DUAL;

DUAL uma tabela fictcia que pode ser usada


para exibir resultados de funes e clculos.

Usando a funo TRUNC

SELECT TRUNC(45.923,2), TRUNC(45.923),


TRUNC(45.923,-1)
FROM
DUAL;

Usando a funo MOD

Para todos os funcionrios com o ttulo de


cargo de Representante de Vendas, calcule o
residual do salrio aps ele ser dividido por
5.000.
SELECT last_name, salary, MOD(salary, 5000)
FROM employees
WHERE job_id = 'SA_REP';

Agenda de Lies

Funes SQL de uma nica linha


Funes de caracteres
Funes de nmeros
Trabalhando com datas
Funes de data

Trabalhando com datas

O Oracle Database armazena datas em um formato


numrico interno: sculo, ano, ms, dia, horas, minutos
e segundos.
O formato de exibio de datas padro DD-MON-RR.
Permite que voc armazene datas do sculo 21 no sculo 20
especificando somente os ltimos dois dgitos do ano
Permite que voc armazene datas do sculo 20 no
sculo 21 da mesma maneira
SELECT last_name, hire_date
FROM employees
WHERE hire_date < '01-FEB-88';

Formato de datas RR

Ano
atual
Ano
atual
1995
1995
2001
2001

Data especificada
27.10.95
27.10.17
27.10.17
27.10.95

Formato RR
1995
2017
2017
1995

Formato YY
1995
1917
2017
2095

Se o ano de dois dgitos especificado for:


049

Se dois
dgitos do
ano atual
forem:

049

A data de retorno
ser do sculo atual

5099

A data de retorno
ser do sculo
posterior ao atual

5099
A data de retorno
ser do sculo
anterior ao atual
A data de retorno
ser do sculo atual

Usando a funo SYSDATE

SYSDATE uma funo que retorna:


Data
Horrios
SELECT sysdate
FROM
dual;

Aritmtica com datas

Adicione um nmero data ou subtraia um


nmero da data de um valor de data resultante.
Subtraia duas datas para localizar o nmero de
dias entre essas datas.
Adicione horas a uma data dividindo o nmero de
horas por 24.

Usando operadores aritmticos com datas

SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS


FROM employees
WHERE department_id =90;

Agenda de Lies

Funes SQL de uma nica linha


Funes de caracteres
Funes de nmeros
Trabalhando com datas
Funes de data

Funes de manipulao de datas

Funo

Resultado

MONTHS_BETWEEN

Nmero de meses entre duas datas

ADD_MONTHS

Adiciona meses do calendrio data

NEXT_DAY

Prximo dia da data especificada

LAST_DAY

ltimo dia do ms

ROUND

Arredonda data

TRUNC

Trunca data

Usando funes de datas

Funo

Resultado

MONTHS_BETWEEN
('01-SET-95','11-JAN-94')

19.6774194

ADD_MONTHS (31-JAN-96',1)

'29-FEB-96'

NEXT_DAY

('01-SET-95','SEXTA-FEIRA')

'08-SET-95'

LAST_DAY

('01-FEV-95')

'28-FEV-95'

Usando as funes ROUND e TRUNC com datas

Considere SYSDATE = '25-JUL-03':


Funo

Resultado

ROUND(SYSDATE,'MS')

ROUND(SYSDATE ,'ANO')

TRUNC(SYSDATE ,'MS')

TRUNC(SYSDATE ,'ANO')

Usando as funes ROUND e TRUNC com datas

Considere SYSDATE = '25-JUL-03':


Funo

Resultado

ROUND(SYSDATE,'MS')

01-AGO-03

ROUND(SYSDATE ,'ANO')

01-JAN-04

TRUNC(SYSDATE ,'MS')

01-JUL-03

TRUNC(SYSDATE ,'ANO')

01-JAN-03

Usando as
funes de
converso e
expresses
condicionais

Agenda de Lies

Converso implcita e explcita de tipo de dados


Funes TO_CHAR, TO_DATE, TO_NUMBER
Aninhando funes
Funes gerais:

NVL
NVL2
NULLIF
COALESCE

Expresses condicionais:
CASE
DECODE

Funes de converso

Tipo de dados
explcita de tipos de dados

Converso
explcita de tipos de dados

Converso
explcita de tipos de dados

Converso implcita de tipo de dados

Nas expresses, o Oracle Server pode converter


automaticamente o seguinte:
De

Para

VARCHAR2 ou CHAR

NUMBER

VARCHAR2 ou CHAR

DATE

Converso implcita de tipo de dados

Para a avaliao da expresso, o Oracle Server pode


converter automaticamente o seguinte:
De

Para

NUMBER

VARCHAR2 ou CHAR

DATE

VARCHAR2 ou CHAR

Converso explcita de tipo de dados

TO_NUMBER

NUMBER

TO_DATE

CHARACTER

TO_CHAR

TO_CHAR

DATE

Agenda de Lies

Converso implcita e explcita de tipo de dados


Funes TO_CHAR, TO_DATE, TO_NUMBER
Aninhando funes
Funes gerais:

NVL
NVL2
NULLIF
COALESCE

Expresses condicionais:
CASE
DECODE

Usando a funo TO_CHAR com datas

TO_CHAR(date, 'format_model')

O modelo de formato:
Deve ser inserido entre aspas simples
Faz distino entre maisculas e minsculas
Pode incluir qualquer elemento de formato de
data vlido
Tem um elemento fm para remover espaos em
branco ou suprimir zeros esquerda
separado do valor da data por uma vrgula

Elementos do modelo de formato de data

Elemento

Resultado

YYYY

Ano inteiro em nmeros

ANO

Ano por extenso (em ingls)

MM

Valor de dois dgitos para o ms

MS

Nome inteiro do ms

MON

Abreviao de trs letras do ms

DY

Abreviao de trs letras do dia da semana

DIA

Nome inteiro do dia da semana

DD

Dia numrico do ms

Elementos do modelo de formato de data

Os elementos de hora formatam a parte da hora


da data:
HH24:MI:SS AM

15:45:32 PM

Adicione strings de caracteres, inserindo-as entre


aspas duplas:
DD "of" MONTH

12 of OCTOBER

Sufixos de nmero mostram os nmeros por


extenso:
ddspth

fourteenth

Usando a funo TO_CHAR com datas

SELECT last_name,
TO_CHAR(hire_date, 'fmDD Month YYYY')
AS HIREDATE
FROM employees;

Usando a funo TO_CHAR com nmeros


TO_CHAR(number, 'format_model')

Esses so alguns dos elementos de formato que


voc pode usar com a funo TO_CHAR para exibir
um valor de nmero como um caractere:
Elemento

Resultado

Representa um nmero

Fora a exibio de um zero

Insere um smbolo de dlar flutuante

Usa o smbolo da moeda local flutuante

Imprime um ponto decimal

Imprime uma vrgula como um indicador de milhares

Usando a funo TO_CHAR com nmeros

SELECT TO_CHAR(salary, '$99,999.00') SALARY


FROM employees
WHERE last_name = 'Ernst';

Usando as funes TO_NUMBER e TO_DATE

Converta uma string de caracteres para um formato


de nmero usando a funo TO_NUMBER:
TO_NUMBER(char[, 'format_model'])

Converta uma string de caracteres para um formato


de data usando a funo TO_DATE:
TO_DATE(char[, 'format_model'])

Essas funes possuem um modificador fx. Esse


modificador especifica a correspondncia exata para
o argumento de caractere e modelo de formato de
data de uma funo TO_DATE.

Usando a funo TO_CHAR e TO_DATE


com o formato de data RR

Para localizar funcionrios admitidos antes de


1990, use o formato de data RR, que gera os
mesmos resultados, independente de o comando
ter sido executado em 1999 ou agora:
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY')
FROM employees
WHERE hire_date < TO_DATE('01-Jan-90','DD-Mon-RR');

Agenda de Lies

Converso implcita e explcita de tipo de dados


Funes TO_CHAR, TO_DATE, TO_NUMBER
Aninhando funes
Funes gerais:

NVL
NVL2
NULLIF
COALESCE

Expresses condicionais:
CASE
DECODE

Aninhando funes

As funes de uma nica linha podem ser


aninhadas em qualquer nvel.
As funes aninhadas so avaliadas desde o nvel
mais profundo at o nvel menos profundo.
F3(F2(F1(col,arg1),arg2),arg3)
Etapa 1 = Resultado 1
Etapa 2 = Resultado 2
Etapa 3 = Resultado 3

Aninhando Funes: Exemplo 1

SELECT last_name,
UPPER(CONCAT(SUBSTR (LAST_NAME, 1, 8), '_US'))
FROM employees
WHERE department_id =60;

Aninhando Funes: Exemplo 2

SELECT

TO_CHAR(ROUND((salary/7), 2),'99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.'' ')
"Formatted Salary"
FROM employees;

Agenda de Lies

Converso implcita e explcita de tipo de dados


Funes TO_CHAR, TO_DATE, TO_NUMBER
Aninhando funes
Funes gerais:

NVL
NVL2
NULLIF
COALESCE

Expresses condicionais:
CASE
DECODE

Funes gerais

As seguintes funes operam com qualquer


tipo de dados e esto relacionadas ao uso de
nulos:

NVL (expr1, expr2)


NVL2 (expr1, expr2, expr3)
NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., exprn)

Funo NVL

Converte um valor nulo para um valor real:


Os tipos de dados que podem ser usados so
datas, caracteres e nmeros.
Os tipos de dados devem corresponder:
NVL(commission_pct,0)
NVL(hire_date,'01-JAN-97')
NVL(job_id,'No Job Yet')

Usando a funo NVL

SELECT last_name, salary, NVL(commission_pct, 0),


(salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL
FROM employees;

Usando a funo NVL2

SELECT last_name, salary, commission_pct,


1
NVL2(commission_pct,
2
'SAL+COMM', 'SAL') income
FROM
employees WHERE department_id IN (50, 80);

Usando a funo NULLIF

1
SELECT first_name, LENGTH(first_name) "expr1",
2
last_name, LENGTH(last_name) "expr2",
NULLIF(LENGTH(first_name), LENGTH(last_name)) result
FROM employees;

Usando a funo COALESCE

A vantagem da funo COALESCE em relao


NVL que a funo COALESCE pode aceitar
vrios valores alternativos.
Se a primeira expresso no for nula, a funo
COALESCE retornar aquela expresso; caso
contrrio, ela far um COALESCE das expresses
remanescentes.

Usando a funo COALESCE

SELECT last_name, employee_id,


COALESCE(TO_CHAR(commission_pct),TO_CHAR(manager_id),
'No commission and no manager')
FROM employees;

Agenda de Lies

Converso implcita e explcita de tipo de dados


Funes TO_CHAR, TO_DATE, TO_NUMBER
Aninhando funes
Funes gerais:

NVL
NVL2
NULLIF
COALESCE

Expresses condicionais:
CASE
DECODE

Expresses condicionais

Fornecem o uso da lgica IF-THEN-ELSE em


uma instruo SQL
Usam dois mtodos:
Expresso CASE
Funo DECODE

Expresso CASE

Facilita as consultas condicionais, fazendo o


trabalho de uma instruo IF-THEN-ELSE:
CASE expr WHEN
[WHEN
WHEN
ELSE
END

comparison_expr1 THEN return_expr1


comparison_expr2 THEN return_expr2
comparison_exprn THEN return_exprn
else_expr]

Usando a expresso CASE

Facilita as consultas condicionais, fazendo o


trabalho de uma instruo IF-THEN-ELSE:
SELECT last_name, job_id, salary,
CASE job_id WHEN 'IT_PROG' THEN 1.10*salary
WHEN 'ST_CLERK' THEN 1.15*salary
WHEN 'SA_REP'
THEN 1.20*salary
ELSE
salary END
"REVISED_SALARY"
FROM employees;

Funo DECODE

Facilita as consultas condicionais fazendo o trabalho


de uma expresso CASE ou uma instruo IFTHEN-ELSE:
DECODE(col|expression, search1, result1
[, search2, result2,...,]
[, default])

Usando a funo DECODE

SELECT last_name, job_id, salary,


DECODE(job_id, 'IT_PROG', 1.10*salary,
'ST_CLERK', 1.15*salary,
'SA_REP',
1.20*salary,
salary)
REVISED_SALARY
FROM employees;

Usando a funo DECODE

Exiba a alquota de imposto aplicvel para cada


funcionrio do departamento 80:
SELECT last_name, salary,
DECODE (TRUNC(salary/2000, 0),
0, 0.00,
1, 0.09,
2, 0.20,
3, 0.30,
4, 0.40,
5, 0.42,
6, 0.44,
0.45) TAX_RATE
FROM employees
WHERE department_id =80;

Usando as
funes de
grupo

Agenda de Lies

Funes de grupo:
Tipos e sintaxe
Use AVG, SUM, MIN, MAX, COUNT
Use a palavra-chave DISTINCT nas funes de
grupo
Valores NULL em uma funo de grupo

Agrupando linhas:
Clusula GROUP BY
Clusula HAVING

Aninhando funes de grupo

O que so funes de grupo?

As funes de grupo operam em conjuntos de


linhas para fornecer um resultado por grupo.
EMPLOYEES

Salrio mximo da
tabela EMPLOYEES

Tipos de funes de grupo

AVG
COUNT
MAX
MIN
STDDEV
SUM
VARIANCE

Group
funes

Funes de grupo: Sintaxe

SELECT
group_function(column), ...
FROM
table
[WHERE
condition]
[ORDER BY column];

Usando as funes AVG a e SUM

Voc pode usar AVG e SUM para dados numricos.


SELECT AVG(salary), MAX(salary),
MIN(salary), SUM(salary)
FROM employees
WHERE job_id LIKE '%REP%';

Usando as funes MIN e MAX

Voc pode usar MIN e MAX para tipos de dados


numricos, de caracteres e de datas.
SELECT MIN(hire_date), MAX(hire_date)
FROM
employees;

Usando a funo COUNT

COUNT(*) retorna o nmero de linhas em


uma tabela:
1

SELECT COUNT(*)
FROM employees
WHERE department_id =50;

COUNT(expr) retorna o nmero de linhas


com valores que no so nulos para expr:
2

SELECT COUNT(commission_pct)
FROM employees
WHERE department_id =80;

Usando a palavra-chave DISTINCT

COUNT(DISTINCT expr) retorna o nmero de


valores no nulos distintos de expr.
Para exibir o nmero de valores distintos de
departamento na tabela EMPLOYEES:
SELECT COUNT(DISTINCT department_id)
FROM employees;

Funes de grupo e valores nulos

As funes de grupo ignoram os valores nulos


da coluna:
1

SELECT AVG(commission_pct)
FROM employees;

A funo NVL fora as funes de grupo a


inclurem os valores nulos:
2

SELECT AVG(NVL(commission_pct, 0))


FROM employees;

Agenda de Lies

Funes de grupo:
Tipos e sintaxe
Use AVG, SUM, MIN, MAX, COUNT
Use a palavra-chave DISTINCT nas funes de
grupo
Valores NULL em uma funo de grupo

Agrupando linhas:
Clusula GROUP BY
Clusula HAVING

Aninhando funes de grupo

Criando grupos de dados

EMPLOYEES
4400

9500

3500

6400

10033

Salrio mdio na tabela


EMPLOYEES de
cada departamento

Criando grupos de dados: Sintaxe da clusula GROUP BY

Voc pode dividir as linhas de uma tabela em


grupos menores usando a clusula GROUP BY.
SELECT
column, group_function(column)
FROM table
[WHERE
condition]
[GROUP BY group_by_expression]
[ORDER BY column];

Usando a clusula GROUP BY

Todas as colunas da lista SELECT que no


estiverem nas funes de grupo devero estar na
clusula GROUP BY.
SELECT
department_id, AVG(salary)
FROM employees
GROUP BY department_id;

Usando a clusula GROUP BY

A coluna GROUP BY no precisa estar na lista


SELECT.
SELECT
AVG(salary)
FROM employees
GROUP BY department_id;

Agrupando por Mais de Uma Coluna

EMPLOYEES

Adicione os salrios na tabela


EMPLOYEES para cada cargo
agrupado por departamento.

Usando a clusula GROUP BY em vrias colunas

SELECT
department_id, job_id, SUM(salary)
FROM employees
WHERE
department_id > 40
GROUP BY department_id, job_id
ORDER BY department_id;

Consultas ilegais usando funes de grupo

Qualquer coluna ou expresso da lista SELECT que


no for uma funo de agregao dever estar na
clusula GROUP BY:
SELECT department_id, COUNT(last_name)
FROM employees;
Uma clusula GROUP BY dever ser
adicionada contagem dos
sobrenomes de cada
department_id.
SELECT department_id, job_id, COUNT(last_name)
FROM employees
GROUP BY department_id;
Adicione job_id em GROUP BY ou
remova a coluna job_id da lista
SELECT.

Consultas ilegais usando funes de grupo

Voc no pode usar a clusula WHERE para restringir


os grupos.
Use a clusula HAVING para restringir os grupos.
Voc no pode usar as funes de grupo na clusula
WHERE.
SELECT
department_id, AVG(salary)
FROM employees
WHERE
AVG(salary) > 8000
GROUP BY department_id;

No possvel
usar a clusula
WHERE para
restringir grupos

Restringindo resultados de grupo

EMPLOYEES

O salrio mximo por


departamento quando ele for
maior que US$ 10.000

Restringindo os resultados de grupo com a clusula HAVING

Quando voc usa a clusula HAVING, o Oracle


Server restringe os grupos da seguinte forma:
1. As linhas so agrupadas.
2. A funo de grupo aplicada.
3. Os grupos correspondentes clusula HAVING so
exibidos.
SELECT
column, group_function
FROM table
[WHERE
condition]
[GROUP BY group_by_expression]
[HAVING
group_condition]
[ORDER BY column];

Usando a clusula HAVING

SELECT
department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING
MAX(salary)>10000 ;

Usando a clusula HAVING

SELECT
job_id, SUM(salary) PAYROLL
FROM employees
WHERE
job_id NOT LIKE '%REP%'
GROUP BY job_id
HAVING
SUM(salary) > 13000
ORDER BY SUM(salary);

Agenda de Lies

Funes de grupo:
Tipos e sintaxe
Use AVG, SUM, MIN, MAX, COUNT
Use a palavra-chave DISTINCT nas funes de
grupo
Valores NULL em uma funo de grupo

Agrupando linhas:
Clusula GROUP BY
Clusula HAVING

Aninhando funes de grupo

Aninhando funes de grupo

Exibe a mdia salarial mxima:


SELECT
MAX(AVG(salary))
FROM employees
GROUP BY department_id;

Prtica
Crie um relatrio para exibir o nmero do gerente e quanto ganha o funcionrio com
o menor salrio que trabalha para esse gerente. Exclua todos os funcionrios cujo
gerente desconhecido. Exclua quaisquer grupos onde o salrio mnimo seja US$
6.000 ou menos. Organize os resultados por ordem decrescente de salrios.

Prtica
Crie um relatrio para exibir o nmero do gerente e quanto ganha o funcionrio com
o menor salrio que trabalha para esse gerente. Exclua todos os funcionrios cujo
gerente desconhecido. Exclua quaisquer grupos onde o salrio mnimo seja US$
6.000 ou menos. Organize os resultados por ordem decrescente de salrios.

SELECT manager_id, MIN(salary)


FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING MIN(salary) > 6000
ORDER BY MIN(salary) DESC;

Usando join

Agenda de Lies

Tipos de JOINS e sua sintaxe


Join natural:
Clusula USING
Clusula ON

Self-join
No-equijoins
OUTER join:
LEFT OUTER join
RIGHT OUTER join
FULL OUTER join

Produto cartesiano
Join cruzada

Obtendo Dados de Vrias Tabelas

EMPLOYEES

DEPARTMENTS

Tipos de Joins

As joins que esto em conformidade com o


padro SQL:1999 so as seguintes:
Joins Natural:
Clusula NATURAL JOIN
Clusula USING
Clusula ON

OUTER joins:
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN

Joins cruzadas

Unindo tabelas com a sintaxe SQL:1999

Use uma condio de join para consultar dados de


mais de uma tabela:
SELECT
table1.column, table2.column
FROM
table1
[NATURAL JOIN table2] |
[JOIN table2 USING (column_name)] |
[JOIN table2
ON (table1.column_name = table2.column_name)]|
[LEFT|RIGHT|FULL OUTER JOIN table2
ON (table1.column_name = table2.column_name)]|
[CROSS JOIN table2];

Qualificando Nomes de Coluna Ambguos

Use prefixos de tabela para qualificar nomes de


colunas que estejam presentes em vrias tabelas.
Use prefixos de tabelas para melhorar o
desempenho.
Em vez de usar o nome completo da tabela nos
prefixos, use apelidos.
Os apelidos de tabela fornecem a uma tabela um
nome mais curto:
Mantm o cdigo SQL menor, usa menos memria

Use apelidos de colunas para distinguir colunas


que tm nomes idnticos, mas residem em tabelas
diferentes.

Agenda de Lies

Tipos de JOINS e sua sintaxe


Join natural:
Clusula USING
Clusula ON

Self-join
No-equijoins
OUTER join:
LEFT OUTER join
RIGHT OUTER join
FULL OUTER join

Produto cartesiano
Join cruzada

Criando joins natural

A clusula NATURAL JOIN tem como base


todas as colunas das duas tabelas que tm o
mesmo nome.
Ela seleciona as linhas a partir de duas tabelas
que tm valores iguais em todas as colunas
correspondentes.
Se as colunas que tm os mesmos nomes
tiverem tipos de dados diferentes, ser
retornado um erro.

Recuperando registros com joins natural

SELECT

department_id, department_name,
location_id, city
FROM
departments
NATURAL JOIN locations ;

Criando joins com a clusula USING

Se vrias colunas tiverem os mesmos nomes,


mas tipos de dados que no correspondem, use
a clusula USING para especificar as colunas
para a equijoin.
Use a clusula USING para corresponder
somente uma coluna quando houver mais de
uma coluna correspondente.
As clusulas NATURAL JOIN e USING so
mutuamente exclusivas.

Unindo nomes de colunas

EMPLOYEES

DEPARTMENTS

Chave primria
Chave estrangeira

Recuperando registros com a clusula USING

SELECT employee_id, last_name,


location_id, department_id
FROM
employees JOIN departments
USING (department_id) ;

Usando apelidos de tabela com a clusula USING

No qualifique uma coluna que usada na clusula


USING.
Se a mesma coluna for usada em qualquer outra
parte da instruo SQL, no lhe d um apelido.
SELECT l.city, d.department_name
FROM
locations l JOIN departments d
USING (location_id)
WHERE d.location_id = 1400;

Criando Joins com a Clusula ON

A condio de join para a join natural


basicamente uma equijoin de todas as colunas
com o mesmo nome.
Use a clusula ON para especificar condies
arbitrrias ou especificar colunas a serem
unidas.
A condio de join separada de outras
condies de pesquisa.
A clusula ON facilita a compreenso do cdigo.

Recuperando registros com a clusula ON

SELECT e.employee_id, e.last_name, e.department_id,


d.department_id, d.location_id
FROM employees e JOIN departments d
ON
(e.department_id = d.department_id) ;

Criando three-way joins com a clusula ON

SELECT employee_id, city, department_name


FROM
employees e
JOIN departments d
ON
d.department_id = e.department_id
JOIN locations l
ON
d.location_id = l.location_id;

Aplicando condies adicionais em uma join

Use a clusula AND ou a clusula WHERE para


aplicar condies adicionais:
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON
(e.department_id = d.department_id)
AND
e.manager_id = 149 ;

Ou
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON
(e.department_id = d.department_id)
WHERE
e.manager_id = 149 ;

Agenda de Lies

Tipos de JOINS e sua sintaxe


Join natural:
Clusula USING
Clusula ON

Self-join
No-equijoins
OUTER join:
LEFT OUTER join
RIGHT OUTER join
FULL OUTER join

Produto cartesiano
Join cruzada

Unindo uma Tabela a Ela Mesma

EMPLOYEES (WORKER)

EMPLOYEES (MANAGER)

MANAGER_ID na tabela WORKER igual a


EMPLOYEE_ID na tabela MANAGER.

Self-Joins usando a clusula ON

SELECT worker.last_name emp, manager.last_name mgr


FROM
employees worker JOIN employees manager
ON
(worker.manager_id = manager.employee_id);

Agenda de Lies

Tipos de JOINS e sua sintaxe


Join natural:
Clusula USING
Clusula ON

Self-join
No-equijoins
OUTER join:
LEFT OUTER join
RIGHT OUTER join
FULL OUTER join

Produto cartesiano
Join cruzada

No-equijoins

EMPLOYEES

JOB_GRADES

A tabela JOB_GRADES define o


intervalo de valores LOWEST_SAL e
HIGHEST_SAL para cada
GRADE_LEVEL. Por isso, a coluna
GRADE_LEVEL pode ser usada para
atribuir graus a cada funcionrio.

Recuperando Registros com No-equijoins

SELECT e.last_name, e.salary, j.grade_level


FROM
employees e JOIN job_grades j
ON
e.salary
BETWEEN j.lowest_sal AND j.highest_sal;

Agenda de Lies

Tipos de JOINS e sua sintaxe


Join natural:
Clusula USING
Clusula ON

Self-join
No-equijoins
OUTER join:
LEFT OUTER join
RIGHT OUTER join
FULL OUTER join

Produto cartesiano
Join cruzada

Retornando registros sem correspondncia direta


usando OUTER joins

DEPARTMENTS

No h funcionrios no
departamento 190.

O funcionrio Grant
no recebeu uma ID
de departamento.

Equijoin com EMPLOYEES

Joins INNER comparadas com OUTER

No SQL:1999, a unio de duas tabelas que


retornam somente linhas correspondentes
chamada de INNER join.
Uma unio entre duas tabelas que retorna os
resultados da INNER join e de linhas sem
correspondncia da tabela esquerda (ou direita)
chamada de left (ou right) OUTER join.
Uma unio entre duas tabelas que retorna os
resultados de uma INNER join e os resultados
de uma join esquerda e direita uma full
OUTER join.

JOIN LEFT OUTER

SELECT e.last_name, e.department_id, d.department_name


FROM
employees e LEFT OUTER JOIN departments d
ON
(e.department_id = d.department_id) ;

RIGHT OUTER JOIN

SELECT e.last_name, d.department_id, d.department_name


FROM
employees e RIGHT OUTER JOIN departments d
ON
(e.department_id = d.department_id) ;

FULL OUTER JOIN

SELECT e.last_name, d.department_id, d.department_name


FROM
employees e FULL OUTER JOIN departments d
ON
(e.department_id = d.department_id) ;

Agenda de Lies

Tipos de JOINS e sua sintaxe


Join natural:
Clusula USING
Clusula ON

Self-join
No-equiijoin
OUTER join:
LEFT OUTER join
RIGHT OUTER join
FULL OUTER join

Produto cartesiano
Join cruzada

Produtos Cartesianos

Um Produto Cartesiano formado quando:


Uma condio de join omitida
Uma condio de join invlida
Todas as linhas da primeira tabela so unidas
a todas as linhas na segunda tabela

Sempre inclua uma condio de join vlida


se quiser evitar um produto Cartesiano.

Gerando um Produto Cartesiano

EMPLOYEES (20 linhas)

Produto
Cartesiano:
20 x 8 = 160 linhas

DEPARTMENTS (8 linhas)

Criando joins cruzadas

A clusula CROSS JOIN gera o produto cruzado de


duas tabelas.
Isso tambm chamado de produto cartesiano entre as
duas tabelas.
SELECT last_name, department_name
FROM employees
CROSS JOIN departments ;

Prtica

O departamento de RH precisa de um relatrio dos


funcionrios de Toronto. Exiba o sobrenome, o
cargo, o nmero e o nome do departamento de
todos os funcionrios que trabalham em Toronto.

Prtica

O departamento de RH precisa de um relatrio dos


funcionrios de Toronto. Exiba o sobrenome, o
cargo, o nmero e o nome do departamento de
todos os funcionrios que trabalham em Toronto.
SELECT e.last_name, e.job_id, e.department_id,
d.department_name
FROM employees e
JOIN departments d ON
(e.department_id = d.department_id)
JOIN locations l ON
(d.location_id = l.location_id)
WHERE LOWER(l.city) = 'toronto';

Usando subconsulta

Agenda de Lies

Subconsulta: Tipos, sintaxe e diretrizes


Subconsultas de uma nica linha:
Functions de grupo em uma subconsulta
Clusula HAVING com subconsultas

Subconsultas de vrias linhas


Use o operador ALL ou ANY.

Usando o Operador EXISTS


Valores nulos em uma subconsulta

Usando uma subconsulta para solucionar um problema

Quem tem um salrio maior que o salrio de Abel?


Consulta principal:
Quais funcionrios tm salrio maior que Abel?

Subconsulta:

Qual o salrio de Abel?

Sintaxe de subconsulta

SELECT
FROM
WHERE

select_list
table
expr operator
(SELECT
FROM

select_list
table);

A subconsulta (consulta interna) executada


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

Usando uma subconsulta

SELECT last_name, salary


FROM employees
11000
WHERE salary >
(SELECT salary
FROM employees
WHERE last_name = 'Abel');

Diretrizes para usar subconsultas

Insira as subconsultas entre parnteses.


Insira subconsultas do lado direito da condio de
comparao por questo de legibilidade.
(Entretanto, a subconsulta pode ser exibida nos
dois lados do operador de comparao.)
Use operadores de uma nica linha com
subconsultas de uma nica linha e operadores de
vrias linhas com subconsultas de vrias linhas.

Tipos de subconsultas

Subconsulta de uma nica linha


Consulta principal

Subconsulta

retorno

ST_CLERK

Subconsulta de vrias linhas


Consulta principal
Subconsulta

retornos

ST_CLERK
SA_MAN

Agenda de Lies

Subconsulta: Tipos, sintaxe e diretrizes


Subconsultas de uma nica linha:
Functions de grupo em uma subconsulta
Clusula HAVING com subconsultas

Subconsultas de vrias linhas


Use o operador ALL ou ANY.

Usando o Operador EXISTS


Valores nulos em uma subconsulta

Subconsultas de uma nica linha

Retorna somente uma linha


Use operadores de comparao de uma nica linha

Operator
=

Significado

Igual a

>

Maior que

>=

Maior que ou igual a

<

Menor que

<=

Menor que ou igual a

<>

Diferente de

Executando as subconsultas de uma nica linha

SELECT last_name, job_id, salary


FROM employees
SA_REP
WHERE job_id =
(SELECT job_id
FROM employees
WHERE last_name = 'Abel')
AND
salary >
8600
(SELECT salary
FROM employees
WHERE last_name = 'Abel');

Usando funes de grupo em uma subconsulta

SELECT last_name, job_id, salary


FROM employees
2500
WHERE salary =
(SELECT MIN(salary)
FROM
employees);

Clusula HAVING com subconsultas

O servidor Oracle executa as subconsultas primeiro.


O servidor Oracle retorna resultados para a clusula
HAVING da consulta principal.
SELECT
department_id, MIN(salary)
FROM employees
GROUP BY department_id
2500
HAVING
MIN(salary) >
(SELECT
MIN(salary)
FROM employees
WHERE department_id = 50);

O que est errado com esta instruo?

SELECT
employee_id, last_name
FROM employees
WHERE salary =
(SELECT
MIN(salary)
FROM employees
GROUP BY department_id);
Operador de uma
nica linha com
subconsulta de
vrias linhas

Nenhuma linha retornada pela consulta interna

SELECT last_name, job_id


FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE last_name = 'Haas');

A subconsulta no retorna linhas, porque no


existe um funcionrio com o nome Haas.

Agenda de Lies

Subconsulta: Tipos, sintaxe e diretrizes


Subconsultas de uma nica linha:
Functions de grupo em uma subconsulta
Clusula HAVING com subconsultas

Subconsultas de vrias linhas


Use o operador IN, ALL ou ANY

Usando o Operador EXISTS


Valores nulos em uma subconsulta

Subconsultas de vrias linhas

Retornam mais de uma linha


Usam operadores de comparao de vrias linhas
Operador

Significado

IN

Igual a qualquer membro da lista

ANY

Deve ser precedido por =, !=, >, <, <=, >=. Compara um
valor para cada valor de uma lista ou retornado por uma
consulta. Avalia como FALSE, se a consulta no retornar
nenhuma linha.
Deve ser precedido por =, !=, >, <, <=, >=. Compara um
valor para todos os valores de uma lista ou retornados por
uma consulta. Avalia como TRUE, se a consulta no retornar
nenhuma linha.

ALL

Usando o operador ANY em subconsultas de vrias linhas

SELECT employee_id, last_name, job_id, salary


9000, 6000, 4200
FROM employees
WHERE salary < ANY
(SELECT salary
FROM employees
WHERE job_id = 'IT_PROG')
AND
job_id <> 'IT_PROG';

<ANY significa menos que


o mximo.
>ANY significa mais que o
mnimo.
=ANY equivalente a IN.

Usando o operador ALL em subconsultas de vrias linhas

SELECT employee_id, last_name, job_id, salary


9000, 6000, 4200
FROM employees
WHERE salary < ALL
(SELECT salary
FROM employees
WHERE job_id = 'IT_PROG')
AND
job_id <> 'IT_PROG';

>ALL significa mais que o mximo e


<ALL significa menos que o mnimo.

Usando o Operador EXISTS

SELECT * FROM departments


WHERE NOT EXISTS
(SELECT * FROM employees
WHERE employees.department_id=departments.department_id);

Agenda de Lies

Subconsulta: Tipos, sintaxe e diretrizes


Subconsultas de uma nica linha:
Functions de grupo em uma subconsulta
Clusula HAVING com subconsultas

Subconsultas de vrias linhas


Use o operador ALL ou ANY.

Usando o Operador EXISTS


Valores nulos em uma subconsulta

Valores nulos em uma subconsulta

SELECT emp.last_name
FROM
employees emp
WHERE emp.employee_id NOT IN
(SELECT mgr.manager_id
FROM
employees mgr);

Usando os
operadores de
conjunto

Agenda de Lies

Operadores de conjunto: dicas e diretrizes


Tabelas usadas nesta lio
Operadores UNION and UNION ALL
Operador INTERSECT
Operador MINUS
Correspondncia s instrues SELECT
Uso da clusula ORDER BY nas operaes de
conjunto

Operadores de conjunto
A

UNION/UNION ALL

INTERSECT

MINUS

Diretrizes do operador de conjunto

As expresses nas listas SELECT devem ser


correspondentes em nmero.
O tipo de dados de cada coluna na segunda
consulta deve corresponder ao tipo de dados da
respectiva coluna na primeira consulta.
Os parnteses podem ser usados para alterar a
sequncia de execuo.
A clusula ORDER BY pode aparecer apenas perto
do final da instruo.

O servidor Oracle e os Operadores Set

As linhas duplicadas so automaticamente


eliminadas, exceto em UNION ALL.
Os nomes das colunas da primeira consulta
aparecem no resultado.
A sada classificada em ordem crescente,
por padro, exceto em UNION ALL.

Operador UNION

O operador UNION retornar linhas de ambas as consultas depois da


eliminao das duplicaes.

Uso do operador UNION

Exibir detalhes dos cargos anterior e atual


de todos os funcionrios. Exibir cada
funcionrio apenas uma vez.

SELECT employee_id, job_id


FROM employees
UNION
SELECT employee_id, job_id
FROM
job_history;

Operador UNION ALL

O operador UNION ALL retornar linhas de ambas as consultas, incluindo


todas as duplicaes.

Uso do operador UNION ALL

Exibir detalhes dos departamentos anterior e atual


de todos os funcionrios.
SELECT employee_id, job_id, department_id
FROM employees
UNION ALL
SELECT employee_id, job_id, department_id
FROM
job_history
ORDER BY employee_id;

Agenda de Lies

Operadores de conjunto: dicas e diretrizes


Tabelas usadas nesta lio
Operadores UNION and UNION ALL
Operador INTERSECT
Operador MINUS
Correspondncia s instrues SELECT
Uso da clusula ORDER BY nas operaes de
conjunto

Operador INTERSECT

O operador INTERSECT retorna linhas comuns a ambas as consultas.

Uso do operador INTERSECT

Exibe os IDs dos funcionrios e dos cargos


daqueles que, no momento, esto no mesmo
cargo que j estiveram no passado (ou seja, eles
mudaram de funo, mas agora retornaram a
fazer o mesmo que faziam anteriormente).
SELECT employee_id, job_id
FROM employees
INTERSECT
SELECT employee_id, job_id
FROM
job_history;

Agenda de Lies

Operadores de conjunto: dicas e diretrizes


Tabelas usadas nesta lio
Operadores UNION and UNION ALL
Operador INTERSECT
Operador MINUS
Correspondncia s instrues SELECT
Uso da clusula ORDER BY nas operaes de
conjunto

Operador MINUS

O operador MINUS retorna todas as linhas distintas selecionadas pela


primeira linha, mas no presentes no conjunto de resultados da segunda
consulta.

Uso do operador MINUS

Exibe os IDs do funcionrios que no


mudaram de cargo nenhuma vez.
SELECT employee_id
FROM employees
MINUS
SELECT employee_id
FROM
job_history;

Agenda de Lies

Operadores de conjunto: dicas e diretrizes


Tabelas usadas nesta lio
Operadores UNION and UNION ALL
Operador INTERSECT
Operador MINUS
Correspondncia s instrues SELECT
Uso da clusula ORDER BY nas operaes de
conjunto

Correspondncia s instrues SELECT

Com o operador UNION, exiba o ID do local, o nome


do departamento e o estado em que ele est
localizado.
Corresponda o tipo de dados (usando a funo
TO_CHAR ou quaisquer outras funes de converso)
quando as colunas no existirem em uma das tabelas.
SELECT location_id, department_name "Department",
TO_CHAR(NULL) "Warehouse location"
FROM
departments
UNION
SELECT location_id, TO_CHAR(NULL) "Department",
state_province
FROM locations;

Correspondncia instruo SELECT: Exemplo

Com o operador UNION, exiba o ID do


funcionrio, o ID do cargo e o salrio de todos os
funcionrios.
SELECT employee_id, job_id,salary
FROM employees
UNION
SELECT employee_id, job_id,0
FROM
job_history;

Agenda de Lies

Operadores de conjunto: dicas e diretrizes


Tabelas usadas nesta lio
Operadores UNION and UNION ALL
Operador INTERSECT
Operador MINUS
Correspondncia s instrues SELECT
Uso da clusula ORDER BY nas operaes de
conjunto

Uso da clusula ORDER BY nas operaes de conjunto

A clusula ORDER BY pode aparecer apenas


uma vez no final da consulta composta.
As consultas dos componentes no podem ter
clusulas ORDER BY individuais.
A clusula ORDER BY reconhece apenas as
colunas da primeira coluna SELECT.
Por padro, a primeira coluna da primeira
consulta SELECT usada para classificar a
sada em uma ordem crescente.

Manipulando
Dados

Agenda de Lies

Adicionando novas linhas a uma tabela


Instruo INSERT

Alterando dados em uma tabela


Instruo UPDATE

Removendo linhas de uma tabela:


Instruo DELETE
Instruo TRUNCATE

Controle de transaes de banco de dados usando


COMMIT, ROLLBACK e SAVEPOINT
Consistncia na leitura
Clusula FOR UPDATE em uma instruo SELECT

Data Manipulation Language

Uma instruo DML executada quando voc:


Adiciona novas linhas a uma tabela
Modifica linhas existentes em uma tabela
Remove linhas existentes de uma tabela

Uma transao composta por uma coleo


de instrues DML que formam uma unidade
lgica de trabalho.

Adicionando uma nova linha a uma tabela

DEPARTMENTS

New
Insero de uma nova
linha na tabela
DEPARTMENTS

Sintaxe da instruo INSERT

Adicione novas linhas a uma tabela usando a


instruo INSERT:
INSERT INTO
VALUES

table [(column [, column...])]


(value [, value...]);

Com essa sintaxe, inserida apenas uma linha por


vez.

Inserindo novas linhas

Insira uma nova linha contendo os valores de cada


coluna.
Liste os valores na ordem padro das colunas na
tabela.
Opcionalmente, liste as colunas na clusula
INSERT.
INSERT INTO departments(department_id,
department_name, manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);

Encerre os caracteres e valores de dados entre


aspas simples.

Inserindo linhas com valores nulos

Mtodo implcito: omitir a coluna da lista de colunas.


INSERT INTO
VALUES

departments (department_id,
department_name)
(30, 'Purchasing');

Mtodo explcito: especificar a palavra-chave NULL na


clusula VALUES.
INSERT INTO
VALUES

departments
(100, 'Finance', NULL, NULL);

Inserindo valores especiais

A funo SYSDATE registra a data e o horrio


atuais.
INSERT INTO employees (employee_id,
first_name, last_name,
email, phone_number,
hire_date, job_id, salary,
commission_pct, manager_id,
department_id)
VALUES
(113,
'Louis', 'Popp',
'LPOPP', '515.124.4567',
SYSDATE, 'AC_ACCOUNT', 6900,
NULL, 205, 110);

Inserindo valores de data e horrio especficos

Adicione um novo funcionrio.


INSERT INTO employees
VALUES
(114,
'Den', 'Raphealy',
'DRAPHEAL', '515.127.4561',
TO_DATE('FEB 3, 1999', 'MON DD, YYYY'),
'SA_REP', 11000, 0.2, 100, 60);

Verifique sua incluso.

Criando um script

Use a substituio & em uma instruo SQL para solicitar


valores.
& um marcador de espao para o valor da varivel.
INSERT INTO departments
(department_id, department_name, location_id)
VALUES

(&department_id, '&department_name',&location);

Copiando linhas de outra tabela

Escreva a instruo INSERT com uma subconsulta:


INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';

No use a clusula VALUES.


O nmero de colunas na clusula INSERT deve ser
correspondente s colunas na subconsulta.
Insira todas as linhas retornadas pela subconsulta na
tabela sales_reps.

Agenda de Lies

Adicionando novas linhas a uma tabela


Instruo INSERT

Alterando dados em uma tabela


Instruo UPDATE

Removendo linhas de uma tabela:


Instruo DELETE
Instruo TRUNCATE

Controle de transaes de banco de dados usando


COMMIT, ROLLBACK e SAVEPOINT
Consistncia na leitura
Clusula FOR UPDATE em uma instruo SELECT

Alterando dados em uma tabela

EMPLOYEES

Atualize as linhas na tabela EMPLOYEES:

Sintaxe da instruo UPDATE

Modifique os valores existentes em uma tabela com a


instruo UPDATE:
UPDATE
SET
[WHERE

table
column = value [, column = value, ...]
condition];

Atualize mais de uma linha por vez (se necessrio).

Atualizando linhas em uma tabela

Os valores de uma ou vrias linhas especficas sero


modificados se voc especificar a clusula WHERE:
UPDATE employees
SET
department_id = 50
WHERE employee_id = 113;

Os valores de todas as linhas na tabela sero


modificados se voc omitir a clusula WHERE:
UPDATE
SET

copy_emp
department_id = 110;

Especifique SET column_name= NULL para atualizar


um valor de coluna como NULL.

Atualizando duas colunas com uma subconsulta

Atualize o cargo e o salrio do funcionrio 113 de


modo a corresponder aos dados do funcionrio 205.
UPDATE employees
SET
job_id = (SELECT job_id
FROM employees
WHERE
employee_id = 205),
salary = (SELECT salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 113;

Atualizando linhas baseadas em outra tabela

Use as subconsultas nas instrues UPDATE para


atualizar os valores das linhas em uma tabela
baseada nos valores de outra tabela:
UPDATE
SET

copy_emp
department_id

WHERE

job_id

(SELECT department_id
FROM employees
WHERE employee_id = 100)
(SELECT job_id
FROM employees
WHERE employee_id = 200);

Agenda de Lies

Adicionando novas linhas a uma tabela


Instruo INSERT

Alterando dados em uma tabela


Instruo UPDATE

Removendo linhas de uma tabela:


Instruo DELETE
Instruo TRUNCATE

Controle de transaes de banco de dados usando


COMMIT, ROLLBACK e SAVEPOINT
Consistncia na leitura
Clusula FOR UPDATE em uma instruo SELECT

Removendo uma linha de uma tabela

DEPARTMENTS

Exclua uma linha da tabela DEPARTMENTS:

Instruo DELETE

possvel remover linhas existentes de uma tabela


usando a instruo DELETE:
DELETE [FROM]
[WHERE

table
condition];

Excluindo linhas de uma tabela

Linhas especficas sero excludas se voc especificar


a clusula WHERE:
DELETE FROM departments
WHERE department_name = 'Finance';

Todas as linhas na tabela sero excludas se voc omitir


a clusula WHERE:
DELETE FROM copy_emp;

Excluindo linhas baseadas em outra tabela

Use as subconsultas nas instrues DELETE para


remover linhas de uma tabela baseada nos valores
de outra tabela:
DELETE FROM employees
WHERE department_id =
(SELECT department_id
FROM
departments
WHERE department_name
LIKE '%Public%');

Instruo TRUNCATE

Remove todas as linhas de uma tabela, deixando-a


vazia, mas com a estrutura intacta
uma instruo DDL (Data Definition Language) e no
DML; no possvel ser desfeita facilmente
Sintaxe:
TRUNCATE TABLE table_name;

Exemplo:
TRUNCATE TABLE copy_emp;

Agenda de Lies

Adicionando novas linhas a uma tabela


Instruo INSERT

Alterando dados em uma tabela


Instruo UPDATE

Removendo linhas de uma tabela:


Instruo DELETE
Instruo TRUNCATE

Controle de transaes de banco de dados usando


COMMIT, ROLLBACK, e SAVEPOINT
Consistncia na leitura
Clusula FOR UPDATE em uma instruo SELECT

Transaes do banco de dados

Uma transao de banco de dados


composta por uma das seguintes instrues:
Instrues DML que compem uma alterao
consistente aos dados
Uma instruo DDL
Uma instruo DCL (Data Control Language)

Transaes do banco de dados: incio e fim

Comea quando a primeira instruo DML SQL


executada.
Termina com um dos seguintes eventos:
Uma instruo COMMIT ou ROLLBACK emitida.
Uma instruo DDL ou DCL executada (commit
automtico).
O usurio sai do SQL Developer ou do SQL*Plus.
O sistema gera uma falha.

Vantagens das instrues COMMIT e ROLLBACK

Com as instrues COMMIT e ROLLBACK,


possvel:
Assegurar a consistncia do dados
Visualizar as alteraes nos dados antes de tornlas permanentes
Agrupar operaes logicamente relacionadas

Instrues explcitas do controle de transaes

Hora

COMMIT
Transao
DELETE
SAVEPOINT A
INSERT

UPDATE
SAVEPOINT B
INSERT

ROLLBACK
to SAVEPOINT B

ROLLBACK
to SAVEPOINT A

ROLLBACK

Efetuando rollback das alteraes para um marcador

Crie um marcador na transao atual usando a instruo


SAVEPOINT.
Efetue rollback para o marcador usando a instruo
ROLLBACK TO SAVEPOINT.
UPDATE...
SAVEPOINT update_done;

INSERT...
ROLLBACK TO update_done;

Processamento implcito de transaes

Ocorre um commit automtico nas seguintes


circunstncias:
Uma instruo DDL emitida
Uma instruo DCL emitida
Sada normal do SQL Developer ou SQL*Plus sem a
emisso explcita das instrues COMMIT ou
ROLLBACK

Um rollback automtico ocorre devido a um


encerramento anormal do SQL Developer ou
SQL*Plus, de uma falha do sistema.

Estado dos dados antes do COMMIT ou ROLLBACK

O estado prvio dos dados pode ser


recuperado.
O usurio atual pode examinar os resultados
das operaes DML usando a instruo
SELECT.
Outros usurios no podem exibir os resultados
das instrues DML emitidas pelo usurio atual.
As linhas afetadas esto bloqueadas; elas no
podem ser alteradas por outros usurios.

Estado dos dados depois do COMMIT

As alteraes dos dados so salvas no banco de


dados.
O estado anterior dos dados sobrescrito.
Todos os usurios podem exibir os resultados.
Os bloqueios nas linhas afetadas so liberados;
elas ficam disponveis para serem manipuladas
por outros usurios.
Todos os pontos de salvamento so apagados.

Efetuando commit de dados

Faa as alteraes:
DELETE FROM employees
WHERE employee_id = 99999;
INSERT INTO departments
VALUES (290, 'Corporate Tax', NULL, 1700);

Efetue commit nas alteraes:


COMMIT;

Estado dos dados depois do ROLLBACK

Descarte todas as alteraes pendentes usando a


instruo ROLLBACK:
As alteraes nos dados esto desfeitas.
O estado anterior dos dados restaurado.
Os bloqueios nas linhas afetadas so liberados.
DELETE FROM copy_emp;
ROLLBACK;

Estado dos dados depois do ROLLBACK: Exemplo

DELETE FROM test;


25,000 rows deleted.
ROLLBACK;
Rollback complete.
DELETE FROM test WHERE id = 100;
1 row deleted.

SELECT * FROM test WHERE id = 100;


No rows selected.
COMMIT;
Commit complete.

Rollback no nvel da instruo

Se uma nica instruo DML falhar durante a


execuo, o rollback ser efetuado somente
nessa instruo.
O Oracle Server implementa um ponto de
savepoint implcito.
Todas as outras alteraes so retidas.
O usurio deve terminar as transaes
explicitamente, executando uma instruo
COMMIT ou ROLLBACK.

Agenda de Lies

Adicionando novas linhas a uma tabela


Instruo INSERT

Alterando dados em uma tabela


Instruo UPDATE

Removendo linhas de uma tabela:


Instruo DELETE
Instruo TRUNCATE

Controle de transaes de banco de dados usando


COMMIT, ROLLBACK, e SAVEPOINT
Consistncia na leitura
Clusula FOR UPDATE em uma instruo SELECT

Consistncia na leitura

A consistncia na leitura garante uma view


consistente dos dados em todos os momentos.
As alteraes feitas por um usurio no entra
em conflito com as realizadas por outro usurio.
A consistncia na leitura assegura que, nos
mesmos dados:
Os leitores no aguardem os gravadores
Os gravadores no aguardem os leitores
Os gravadores aguardem gravadores

Implementando consistncia na leitura

Usurio A

UPDATE employees
SET
salary = 7000
WHERE last_name = 'Grant';

Blocos de
dados

Segmentos
de undo

SELECT *
FROM userA.employees;

Usurio B

Imagem
consistente
na leitura

Dados
alterados
e inalterados

Antes da
alterao
(dados
antigos)

Agenda de Lies

Adicionando novas linhas a uma tabela


Instruo INSERT

Alterando dados em uma tabela


Instruo UPDATE

Removendo linhas de uma tabela:


Instruo DELETE
Instruo TRUNCATE

Controle de transaes de banco de dados usando


COMMIT, ROLLBACK e SAVEPOINT
Consistncia na leitura
Clusula FOR UPDATE em uma instruo SELECT

Clusula FOR UPDATE em uma instruo SELECT

Bloqueia as linhas na tabela EMPLOYEES onde


job_id SA_REP.
SELECT employee_id, salary, commission_pct, job_id
FROM employees
WHERE job_id = 'SA_REP'
FOR UPDATE
ORDER BY employee_id;

O bloqueio ser liberado apenas depois de voc emitir


uma instruo ROLLBACK ou COMMIT.
Se a instruo SELECT tentar bloquear uma linha j
bloqueada por outro usurio, o banco de dados
aguardar at que ela se torne disponvel novamente e,
ento, retornar os resultados da instruo SELECT.

Clusula FOR UPDATE: Exemplos

possvel usar a clusula FOR UPDATE em uma


instruo SELECT em relao a vrias tabelas.
SELECT e.employee_id, e.salary, e.commission_pct
FROM employees e JOIN departments d
USING (department_id)
WHERE job_id = 'ST_CLERK
AND location_id = 1500
FOR UPDATE
ORDER BY e.employee_id;

As linhas das tabelas EMPLOYEES e DEPARTMENTS


so bloqueadas.
Use FOR UPDATE OF column_name para qualificar a
coluna que se destina alterao, apenas as linhas
dessa tabela especfica sero bloqueadas.

Questionrio

As seguintes instrues produzem os mesmos


resultados?
DELETE FROM copy_emp;
TRUNCATE TABLE copy_emp;

1. Verdadeiro
2. Falso

Criando
Outros
Objetos

Agenda de Lies

Viso geral sobre views:


Criando, modificando e recuperando dados
de uma view
Operaes DML (Data Manipulation
Language) em uma view
Eliminando uma view

O que uma view?

Tabela EMPLOYEES

Vantagens das views

Para restringir
acesso de dados

Para prover
independncia
de dados

Para simplificar
consultas complexas

Para apresentar
vises diferentes dos
mesmos dados

Views simples e views complexas

Recurso

Views simples

Views complexas

Nmero de tabelas

Uma

Uma ou mais

Contm funes

No

Sim

Contm grupos de dados

No

Sim

Operaes DML usando


uma view

Sim

Nem sempre

Criando uma view

Voc incorporou uma subconsulta na instruo


CREATE VIEW:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];

A subconsulta pode conter a sintaxe complexa de


SELECT.

Criando uma view

Crie a view EMPVU80 contendo os detalhes dos


funcionrios no departamento 80:
CREATE VIEW empvu80
AS SELECT employee_id, last_name, salary
FROM employees
WHERE department_id =80;

Descreva a estrutura da view usando o comando


DESCRIBE do SQL*Plus
DESCRIBE empvu80

Criando uma view

Crie uma view usando aliases de colunas na


subconsulta:
CREATE VIEW salvu50
AS SELECT employee_id ID_NUMBER, last_name NAME,
salary*12 ANN_SALARY
FROM employees
WHERE department_id =50;

Selecione as colunas dessa view pelos nomes de


alias atribudos.

Recuperando dados de uma view

SELECT *
FROM
salvu50;

Modificando uma view

Modifique a view EMPVU80 usando uma clusula


CREATE OR REPLACE VIEW. Adicione um alias para
cada nome de coluna:
CREATE OR REPLACE VIEW empvu80
(id_number, name, sal, department_id)
AS SELECT employee_id, first_name || ' '
|| last_name, salary, department_id
FROM employees
WHERE department_id =80;

Os aliases de coluna na clusula CREATE OR REPLACE


VIEW so listados na mesma ordem que as colunas na
subconsulta.

Criando uma view complexa

Crie uma view complexa que contenha funes do


grupo para exibir os valores de duas tabelas:
CREATE OR REPLACE VIEW dept_sum_vu
(name, minsal, maxsal, avgsal)
AS SELECT
d.department_name, MIN(e.salary),
MAX(e.salary),AVG(e.salary)
FROM employees e JOIN departments d
ON
(e.department_id = d.department_id)
GROUP BY d.department_name;

Regras para execuo das operaes DML em uma view

possvel executar operaes DML normalmente


nas views simples.
No possvel remover uma linha se a view
contiver:

Funes de grupo
Uma clusula GROUP BY
A palavra-chave DISTINCT
A palavra-chave ROWNUM da pseudocoluna

Regras para execuo das operaes DML em uma view

No ser possvel modificar os dados em


uma view se ela contiver:

Funes de grupo
Uma clusula GROUP BY
A palavra-chave DISTINCT
A palavra-chave ROWNUM da pseudocoluna
Colunas definidas por expresses

Regras para execuo das operaes DML em uma view

No ser possvel adicionar dados usando uma


view se ela incluir:

Funes de grupo
Uma clusula GROUP BY
A palavra-chave DISTINCT
A palavra-chave ROWNUM da pseudocoluna
Colunas definidas por expresses
Colunas NOT NULL em tabelas base que no sejam
selecionadas pela view

Usando a clusula WITH CHECK OPTION

possvel assegurar que operaes DML executadas na


view permaneam no domnio da view usando a
clusula WITH CHECK OPTION:
CREATE OR REPLACE VIEW empvu20
AS SELECT
*
FROM employees
WHERE
department_id = 20
WITH CHECK OPTION CONSTRAINT empvu20_ck ;

Qualquer tentativa para inserir (INSERT) uma linha


com um ID de departamento (department_id)
diferente de 20 ou atualizar (UPDATE) o nmero do
departamento de qualquer linha na view falhar porque
viola a restrio WITH CHECK OPTION.

Negando operaes DML

possvel impedir que alguma operao DML ocorra,


adicionando a opo WITH READ ONLY definio da
view.
Qualquer tentativa para executar uma operao DML
em linhas da view resultar em um erro do Oracle
Server.

Negando operaes DML

CREATE OR REPLACE VIEW empvu10


(employee_number, employee_name, job_title)
AS SELECT
employee_id, last_name, job_id
FROM employees
WHERE
department_id = 10
WITH READ ONLY ;

Removendo uma view

possvel remover uma view sem perda de dados


porque a view se baseia em tabelas subjacentes no
banco de dados.
DROP VIEW view;

DROP VIEW empvu80;

Vous aimerez peut-être aussi