SQL Basico SQL
SQL Basico SQL
SQL
1
SQL Básico
2
SQL Básico
Condições de comparação....................................................................................................................27
Order by ...............................................................................................................................................30
Exercícios .............................................................................................................................................32
8 Funções SQL .........................................................................................................................................33
Funções de Caracter (Conversão de Maiúsculas e Minúsculas) ..........................................................35
Funções de Caracter (Manipulação de caractere) ................................................................................35
Funções numéricas ...............................................................................................................................36
Trabalhando com datas ........................................................................................................................37
Conversão de dados explícita...............................................................................................................39
Função NVL.........................................................................................................................................42
A expressão CASE ...............................................................................................................................43
A função DECODE..............................................................................................................................43
Aninhando funções ..............................................................................................................................44
Exercícios .............................................................................................................................................44
9. Exibindo dados de várias tabelas .........................................................................................................46
Definindo Junções ................................................................................................................................46
Tipos de Junções ..................................................................................................................................48
O que é uma Junção idêntica (EQUIJOIN)? ....................................................................................48
O que é uma Junção não-idêntica (NON-EQUIJOIN)? ...................................................................49
O que é uma Junção externa (OUTER JOIN)? ................................................................................50
O que é uma Autojunção (SELF JOIN)? .........................................................................................51
Unindo tabelas usando a sintaxe SQL99 .........................................................................................51
Exercícios .............................................................................................................................................54
10 Funções de grupo ................................................................................................................................55
Função COUNT ...............................................................................................................................55
Funções de Grupo e valores NULOS...............................................................................................56
Criando Grupos de Dados: group by ...............................................................................................56
Consultas Inválidas Usando Funções de Grupo...............................................................................57
Excluindo Resultados do Grupo: Cláusula HAVING ....................................................................57
Exercícios .............................................................................................................................................58
11 SUBCONSULTAS .............................................................................................................................60
Subconsultas de única linha .................................................................................................................61
Subconsultas de várias linhas...............................................................................................................62
Usando subconsulta na Cláusula FROM .............................................................................................62
Usando subconsulta na Cláusula SELECT ..........................................................................................62
Usando o operador EXISTS.................................................................................................................62
Exercícios .............................................................................................................................................63
12 Comandos DDL – Parte II ..................................................................................................................65
Exercício ..............................................................................................................................................65
13 Comandos DML- Parte II ...................................................................................................................66
14 Views ..................................................................................................................................................67
O que é uma View ? .............................................................................................................................67
Por que usar Views?.........................................................................................................................67
Views Simples e Views Complexas ................................................................................................67
Criando uma VIEW .........................................................................................................................67
View no dicionário de dados............................................................................................................68
Modificando uma view ....................................................................................................................68
3
SQL Básico
Criando uma View Complexa ..........................................................................................................69
Removendo uma VIEW ...................................................................................................................69
Exercícios .............................................................................................................................................69
15 Índices .................................................................................................................................................70
Como são criados ? ..........................................................................................................................70
Criando um índice ............................................................................................................................70
Quando criar um índice ....................................................................................................................70
Quando não criar um índice .............................................................................................................70
Confirmando índices ........................................................................................................................70
Removendo um Índice .....................................................................................................................71
Exercícios .............................................................................................................................................71
16 Operadores SET ..................................................................................................................................72
Operador UNION.............................................................................................................................72
Operador UNION ALL ....................................................................................................................73
Operador INTERSECT ....................................................................................................................73
Operador MINUS.............................................................................................................................73
4
SQL Básico
1. Conceitos de banco de dados
Existe uma série de métodos, técnicas e ferramentas que visam sistematizar o desenvolvimento de
sistemas de bancos de dados.
O sistema de bancos de dados deve prover uma visão abstrata de dados para os usuários. A
abstração se dá em três níveis:
● Nível físico: nível mais baixo de abstração. Descreve como os dados estão realmente
armazenados, englobando estruturas complexas de baixo nível;
● Nível conceitual: descreve quais dados estão armazenados e seus relacionamentos. Neste
nível, o banco de dados é descrito através de estruturas relativamente simples, que podem
envolver estruturas complexas no nível físico;
● Nível de visões do usuário: descreve partes do banco de dados, de acordo com as
necessidades de cada usuário, individualmente.
5
SQL Básico
2. O Modelo Relacional
Componentes-
Componentes-chave
Atributo Identificador
Chave Primária: É aquele atributo que identifica de forma única cada ocorrência na entidade – linha
preenchida na tabela. Exemplo: (cód_produto)
6
SQL Básico
formação da chave primária. Exemplo: (data, boleto)
Exemplo de MER:
1 N
Professo ministr Disciplina
1 a 1
r
1:N
Professor Disciplina
Cod_prof PK Cod_disc PK
Nome_prof Descr_disc
Idade_prof carga_hor
End_prof Cod_prof FK
Tel_prof
Exercícios
Monte o MER das situações abaixo.
1)
• Os clientes podem fazer vários pedidos;
• Os pedidos pertencem a um único cliente;
• Um pedido pode conter vários produtos.
• Cada produto pode estar em vários pedidos.
2)
• Somente existe 1 candidato a presidência por partido;
• Cada candidato a presidência apoia pelo menos 1 candidato a governador;
• Cada candidato a governador apoia um único candidato a presidência;
• Cada partido apoia um único senador;
• Cada candidato a governador apoia pelo menos 1 candidato a deputado federal;
• Cada candidato a deputado federal tem apoio de um único candidato a governador.
7
SQL Básico
Instruções SQL
Comandos DDL
DDL
8
SQL Básico
Create table
O comando create table permite ao usuário criar uma nova tabela (ou relação). Para cada
atributo da relação é definido um nome, um tipo, máscara e algumas restrições. Os princiapis tipos de
uma coluna são:
A restrição not null indica que o atributo deve ser obrigatoriamente preenchido; se não for
especificado, então o “default” é que o atributo possa assumir o valor nulo. A sintaxe da instrução
create table no Oracle é:
CREATE [GLOBAL TEMPORARY ] TABLE [esquema.] tabela
(tipo de dados da coluna
[DEFAULT expr] [, ...]);
GLOBAL TEMPORARY Especifica que a tabela é temporária e que sua definição está visível em
todas as sessões. Os dados em uma tabela temporária são visíveis
somente na sessão que insere dados na tabela.
9
SQL Básico
Para referenciar tabelas de outros usuários:
• As tabelas que pertencem a outros usuários não estão no esquema do usuário;
• Você deve usar o nome do proprietário como prefixo destas tabelas.
Alter table
10
SQL Básico
Truncate table
Você não poderá fazer rollback da remoção de linhas quando usar TRUNCATE;
• Você também tem a opção de remover as linhas usando a instrução DELETE.
Instrução Descrição
Create table Cria uma tabela
Alter table Modifica a estrutura da tabela
Drop table Remove as linhas e a estrutura da tabela
Rename Altera o nome de uma tabela, view, sequência ou sinônimo
Truncate Remove todas as linhas de uma tabela e libera o espaço de armazenamento
Comment Adiciona comentários a uma tabela ou view
Exercícios
11
SQL Básico
e. Phone_number, varchar2(20),
f. Hire_date, date;
g. Job_id, varchar2(10), not null;
h. Salary,number(8,2);
i. Commission_pct, number(2,2);
j. Manager_id, number(6);
k. Department_id,number(6)
12
SQL Básico
Comandos DML
DML
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.
Insert
INSERT INTO tabela [(coluna [, coluna ...])] VALUES (valor [, valor ...]);
Somente uma linha é inserida por vez com esta sintaxe. Inserindo novas linhas:
• Insira novas linhas contendo valores para cada coluna;
• Liste valores na ordem default das colunas na tabela;
• Opcionalmente, liste as colunas na cláusula INSERT;
13
SQL Básico
• Adicone um novo funcionário:
Update
Modifique linhas existentes com a instrução UPDATE. Atualize mais de uma linha por vez, se
necessário.
UPDATE tabela
SET coluna = valor [, coluna = valor, ...]
[WHERE condição];
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;
1 row updated.
UPDATE copy_emp
SET department_id = 110;
22 rows updated.
UPDATE employees
SET department_id = 55
WHERE department_id = 110;
UPDATE employees
*
ERROR at line 1:
ORA-02291: integrity constraint (HR.EMP_DEPT_FK) violated - parent key not
found
[restrição de integridade (HR.EMP_DEPT_FK) violada - chave mãe não
encontrada]
Delete
14
SQL Básico
Você pode remover linhas de uma tabela usando a instrução DELETE.
Você não pode deletar uma linha que contenha uma chave primária usada como chave
estrangeira em outra tabela.
Exercícios
Emplo First_name Last_na Email Phone_numb Hire_date Job_id Salary Commisio Manager_id Departm
yee_id me er n_pct ent_id
15
SQL Básico
Emplo First_name Last_na Email Phone_numb Hire_date Job_id Salary Commisio Manager_id Departm
yee_id me er n_pct ent_id
100 Steven King SKING 515.123.4567 17-JUN-87 AD_PRES 24000 90
101 Neena Kochhar NKOCHHAR 515.123.4568 21-SEP-89 AD_VP 17000 100 90
102 Lex De Haan LDEHAAN 515.123.4569 13-JAN-93 AD_VP 17000 100 90
103 Alexander Hunold AHUNOLD 590.423.4567 03-JAN-90 IT_PROG 9000
104 Bruce Ernst BERNST 590.423.4568 21-MAY-91 IT_PROG 6000
107 Diana Lorentz DLORENTZ 590.423.5567 07-FEB-99 IT_PROG 4200
124 Kevin Mourgos KMOURGOS 650.123.5234 19-nov-99 ST_MAN 5800 100 50
141 Trenna Rajs TRJAS 650.121.8009 17-oct-95 ST_CLERK 3500 0,02 100
142 Curtis Davies CDAVIES 650.121.2994 29-jan-97 ST_CLERK 3100 0,03
143 Randal Matos RMATOS 650.121.2874 15-mar-98 SA_MAN 10500 100
5) Altere o salário para 1000 de todos os funcionários que ganhem menos de 900;
16
SQL Básico
5. Restrições
Restrição Descrição
NOT NULL Especifica que esta coluna não pode conter um valor nulo
UNIQUE Especifica uma coluna ou combinação de colunas cujos valores devem ser
exclusivos para todas as linhas na tabela
PRIMARY KEY Identifica exclusivamente cada linha da tabela (Chave primária)
FOREIGN KEY Estabelece e impõe um relacionamento de chave estrangeira entre a coluna e a
coluna da tabela referenciada
CHECK Especifica uma condição que deve ser verdadeira
Definindo restrições:
• Nível de restrição da coluna
17
SQL Básico
• Nível de restrição da tabela
O exemplo acima aplica a restrição NOT NULL à coluna LAST_NAME da tabela EMPLOYEES. Como
essas restrições não possuem nome, o Oracle Server criará nomes para elas na seguinte forma
SYS_Cn, onde n é um número inteiro para criar um nome de restrição exclusivo.
Restrição UNIQUE
Uma restrição de integridade UNIQUE KEY requer que cada valor em uma coluna ou conjunto de
colunas seja exclusivo. Esse tipo de restrição permite a entrada de valor nulo a menos que você
defina as restrições NOT NULL para as mesmas colunas.
18
SQL Básico
CONSTRAINT dept_name_nn NOT NULL,
manager_id NUMBER(6),
location_id NUMBER(4),
CONSTRAINT dept_id_pk PRIMARY KEY(department_id));
Restrição CHECK
A restrição CHECK define uma condição que cada linha deve satisfazer. A condição pode usar as
mesmas construções que as condições de consulta. Uma única coluna pode ter várias restrições
CHECK que fazem referência à coluna na sua definição. Não há limite no número de restrições
CHECK que você pode definir em uma coluna.
19
SQL Básico
• Adicionar ou eliminar uma restrição sem modificar sua estrutura;
• Ativar ou desativar restrições;
• Adicionar uma restrição NOT NULL usando a cláusula MODIFY
Adicione uma restrição de FOREIGN KEY à tabela EMPLOYEES indicando que já deve existir
um gerente como um funcionário válido na tabela EMPLOYEES.
Desativando restrições
• Execute a cláusula DISABLE da instrução ALTER TABLE para desativar uma restrição de
integridade;
• Aplique a opção CASCADE para desativar restrições de integridade dependentes.
Ativando restrições
restrições
• Ative uma restrição de integridade desativada no momento na definição da tabela, usando a
cláusula ENABLE.
• Um índice UNIQUE ou PRIMARY KEY será automaticamente criado se você ativar uma
restrição de chave UNIQUE ou PRIMARY KEY.
20
SQL Básico
Restrições
Restrições em cascata
cascata
• A cláusula CASCADE CONSTRAINTS é usada em conjunto com a cláusula DROP COLUMN;
• A cláusula CASCADE CONSTRAINTS elimina todas as restrições de integridade referenciais
que remetam às chaves exclusivas e primária definidas nas colunas eliminadas;
• A cláusula CASCADE CONSTRAINTS também elimina todas as restrições de várias colunas
definidas nas colunas eliminadas.
Exercícios
1. Adicione uma restrição no nível de tabela PRIMARY KEY à tabela EMPLOYEES, usando a
coluna EMPLOYEE_ID. A restrição deve ser nomeada quando for criada.
3. Adicione uma referência de chave estrangeira na tabela EMPLOYEES que irá assegurar que
o funcionário não seja atribuído a um departamento não existente.
21
SQL Básico
Select
22
SQL Básico
Precedência de operadores
• 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 priorizada e para esclarecer as instruções.
Usando parênteses:
Expressões aritméticas que contêm um valor nulo são avaliadas como nulas:
Um apelido de coluna
• Renomeia um cabeçalho de coluna;
• É útil para cálculos;
23
SQL Básico
• Segue imediatamente o nome da coluna. Também pode haver a 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.
Name Comm
King
Kochhar
De Haan 0,2
Hunold 0,3
Ernst 0,2
Um operador de concatenação
• Concatena colunas ou strings de caracteres a outras colunas;
• É representado por duas barras verticais (||);
• Cria uma coluna resultante que é uma expressão de caracteres.
Employees
KingAD_PRES
KochharAD_VP
De HaanAD_VP
HunoldIT_PROG
ErnstIT_PROG
24
SQL Básico
• Cada string de caracteres é gerada uma vez para cada linha retornada.
Employees
King is a AD_PRES
Kochhar is a AD_VP
De Haan is a AD_VP
Hunold is a IT_PROG
Ernst is a IT_PROG
Linhas duplicadas
A exibição default das consultas é de todas as linhas, incluindo linhas duplicadas.
SELECT department_id
FROM employees;
Department_id
90
90
90
90
90
Department_id
10
20
50
60
80
Ex.:
Desc dept
25
SQL Básico
Name Null? Type
----------------- ---------------- -------------------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
• Null?: Indica se a coluna deve conter dados. NOT NULL indica que uma coluna deve conter
dados.
• Type: Exibe o tipo de dado de uma coluna.
Exercícios
1. A instrução SELECT será executada corretamente?
Select ename, job, sal Salary
From emp;
4. Mostre a estrutura da tabela EMP. Crie uma consulta para exibir o nome, o cargo, a data de
admissão e o número do funcionário para cada funcionário com o número do funcionário
aparecendo primeiro;
5. Crie uma consulta para exibir os cargos exclusivos a partir da tabela EMP;
6. Exiba o nome concatenado com o cargo (job), separado por uma vírgula e espaço, e nomeie a
coluna Employee and Title;
7. Crie uma consulta para exibir todos os dados a partir da tabela EMP. Separe cada coluna por
uma vírgula.
26
SQL Básico
Condições de comparação
Operador Significado
Between ... and ... Entre dois valores (inclusive)
27
SQL Básico
Operador Significado
In (set) Corresponde a qualquer valor de uma lista
Like Corresponde a um padrão de caractere
Is null É um valor nulo
• Use a condição BETWEEN para exibir linhas baseadas em uma faixa de valores.
• Use a condição LIKE para executar pesquisas curingas de valores válidos de string de pesquisa;
• As condições de pesquisa podem conter caracteres literais ou números:
• % denota zero ou muitos caracteres;
• _ denota um caractere.
Você pode combinar caracteres de correspondência de padrão.
SELECT last_name
FROM employees
WHERE last_name LIKE '_o%';
Condições lógicas:
Operador Significado
AND Retorna true se ambas as condições de componentes forem verdadeiras
OR Retorna true se uma das condições de componente for verdadeira
NOT Retorna true se a condição seguinte for falsa
28
SQL Básico
Employee_id Last_name Job_id Salary
149 Zlotkey SA_MAN 10500
201 Hartstein MK_MAN 13000
Operador NOT
Last_name Job_id
King AV_PRES
Kochhar AD_VP
De Haan AD_VP
Mourgos ST_MAN
Zlotkey SA_MAN
Whalen AD_ASST
Hartstein MK_MAN
Fay MK_REP
Higgins AC_MGR
Gietz AC_ACCOUNT
29
SQL Básico
Ordem de avaliação Operador
1 Operadores aritméticos
2 Operador de concatenação
3 Condições de comparação
4 Is [not] null, like, [not] in
5 [not] between
6 Condição lógica NOT
7 Condição lógica AND
8 Condição lógica OR
Order by
30
SQL Básico
31
SQL Básico
Last_name Department_id Salary
Davies 50 3100
Matos 50 2600
Vargas 50 2500
Você também pode classificar por uma coluna que não esteja na lista do SELECT.
Exercícios
1. Crie uma consulta para exibir o nome e o salário dos funcionários que recebem mais de R$ 3000;
2. Crie uma consulta para exibir o nome do funcionário e o número do departamento para o número do
funcionário 101.
3. Modifique a consulta do exercício 1 para exibir o nome e o salário de todos os funcionários cujos salários
não estejam na faixa entre R$ 2500 e R$ 3000.
4. Exiba o nome do funcionário, o cargo e a data de admissão dos funcionários admitidos entre 01 de janeiro
de 1997 e 1 de setembro de 1997. Ordene a consulta de modo crescente pela data inicial.
6. Monte uma consulta para listar o nome e o salário dos funcionários que recebem mais de R$ 2800 e que
estão nos departamentos 10 ou 30. Nomeie as colunas Empregado e Salário Mensal, respectivamente.
9. Exiba o nome, o salário e a comissão de todos os funcionários que recebem comissão. Classifique os
dados em ordem decrescente de salários e comissões.
10. Exiba os nomes de todos os funcionários que possuem um A na terceira letra de seus nomes.
11. Exiba todos os funcionários que possuem duas letras LL em seus nomes e estão no departamento 30 ou
seu gerente seja o 100.
12. Exiba o nome, o cargo e o salário de todos os funcionários cujos cargos seja Clerk ou Analyst e que seus
salários não sejam iguais a R$ 1000, R$ 3000 ou R$ 5000.
13. Modifique a consulta do exercício 6 para exibir o nome, o salário e a comissão de todos os funcionários
cuja quantia de comissão seja maior que seus salários com 10% de aumento.
32
SQL Básico
8 Funções SQL
SQL
As funções são um recurso avançado de SQL e podem ser usados para realizar o seguinte:
• Executar cálculos usando dados;
• Modificar itens de dados individuais;
• Manipular saída para grupos de linhas;
• Formatar datas e números para exibição;
• Converter tipos de dados de coluna.
33
SQL Básico
34
SQL Básico
Função Objetivo
LOWER Converte valores de caractere alfabético para letras minúsculas.
UPPER Converte valores de caractere alfabético para letras maiúsculas.
INITCAP Converte valores de caractere alfabético para letras maiúsculas na primeira letra de cada
palavra e todas as outras letras em minúsculas.
Exemplos:
Função Resultado
LOWER('SQL Course') sql course
UPPER('SQL Course') SQL COURSE
INITCAP('SQL Course') Sql Course
Funcção Objetivo
CONCAT Concatena o primeiro valor do caractere ao segundo valor do caractere, equivalente ao
operador de concatenação ( || ).
SUBSTR Retorna caracteres específicos a partir do valor de caractere começando na posição m, até
(coluna,m,n) n caracteres depois.
LENGHT Retorna o número de caracteres do valor
INSTR Retorna a posição numérica do caractere nomeado.
LPAD / RPAD Preenche o valor de caractere com a string, justificando à (esquerda ou direita),
(coluna,n,string) preenchendo o tamanho de n posições faltantes da qtde da coluna.
Exemplos:
Função Resultado
35
SQL Básico
Função Resultado
CONCAT('Hello','Word') HelloWord
SUBSTR('HelloWord',1,5) Hello
LENGTH('HelloWord') 10
INSTR('HelloWord','W') 6
LPAD(salary,10,'*') *****24000
RPAD(salary,10,'*') 24000*****
TRIM('H' FROM 'HelloWord') elloWord
Funções numéricas
Função Objetivo
ROUND(coluna, n) Arredonda a coluna, expressão ou valor para n casas decimais ou se n for
omitido, nenhuma casa decimal (Se n for negativo, os números à esquerda do
ponto decimal serão arredondados.)
TRUNC(coluna, n) Trunca a coluna, expressão ou valor para n casas decimais ou se n for omitido,
nenhuma casa decimal (Se n for negativo, os números à esquerda do ponto
decimal serão truncados para zero.)
MOD(m, n) Retorna o resto de m dividido por n.
Dual é uma tabel fictícia usada para exibir resultados de funções e cálculos.
36
SQL Básico
Usando a função mod: calcule o que resta de um salário após dividí-lo por 5000 para todos os
funcionários cujo cargo seja representante de vendas (SA_REP).
Last_name Hire_date
Gietz 07-JUN-94
Grant 24-MAY-99
37
SQL Básico
WHERE department_id = 10;
Last_name Weeks
King 744.245395
Kochhar 626.102538
De Haan 453.245395
Funções de data:
Função Descrição
MONTHS_BETWEEN(data1, data2) Localiza o nr. de meses entre a data1 e a data2 .
ADD_MONTHS(data,n) Adiciona um número n de meses de calendário à data . O valor de n
pode ser inteiro ou pode ser negativo.
NEXT_DAY(data,’char’) Localiza a data do próximo dias especificado da data seguinte da
semana (‘char’). O valor de char pode ser um número representando um
dia ou uma string de caractere.
LAST_DAY(data) Localiza a data do último dia do mês que contém a data.
ROUND(data) Arredonda a data
TRUNC(data) Trunca a data
Conversão de tipos de dados implícita: Nas designações, o servidor Oracle pode converter
automaticamente o seguinte:
De Para
VARCHAR2 ou CHAR NUMBER
VARCHAR2 ou CHAR DATE
NUMBER VARCHAR2
DATE VARCHAR2
38
SQL Básico
Função Objetivo
TO_CHAR(número/data, [fmt]) Converte números ou datas para tipo de dados VARCHAR2.
TO_NUMBER(caractere, [fmt]) Converte um string de caractere contendo dígitos para um
número no formato especificado pelo modelo de formato opcional
fmt.
TO_DATE (caractere, [fmt]) Converte uma string de caractere representando uma data para
um valor de data de acordo com o fmt especificado. Se o fmt for
omitido, o formato é DD-MON-YY.
Elemento Descrição
SCC ou CC Século; Prefixos S data AC com -
Anos em datas YYYY ou Ano; Prefixos S data AC com -
SYYYY
YYY ou YY ou Y Últimos três, dois ou um dígito do ano
Y,YYY Ano com vírgula nessa posição
IYYY, IYY, IY, I Quatro, três, dois ou um dígito do ano com base no padrão ISO.
SYEAR ou YEAR Ano inteiro; Prefixos S data AC com -
BC ou AD Indicador AC/DC
B.C ou A.D. Indicador com pontos AC/DC
Q Trimestre do ano
39
SQL Básico
MM Mês, valor de dois dígitos
MONTH Nome do mês preenchido com espaços limitado a nove caracteres.
MON Nome do mês, abreviação de três letras
RM Mês em números romanos
WW ou W Semana do ano ou mês
DDD ou DD ou D Dia do ano, mês ou semana
DAY Nome do dia preenchido com espaços limitado a nove caracteres.
DY Nome do dia; abreviação de três letras
J Dia do calendário juliano; o número de dias desde 31 de dezembro
4713 BC
Formatos de hora
Elemento Descrição
AM ou PM Indicador meridiano
AM ou P.M Indicador meridiano com pontos
HH ou HH12 ou HH24 Horas do dia ou hora (1 a 12) ou hora (0 a 23)
MI Minuto (0 a 59)
SS Segundo (0 a 59)
SSSSS Segundos após a meia-noite (0-86399)
Exemplos:
Last_name Hiredate
King 17 june 1987
Kochhar 21 september 1989
De Haan 13 january 1993
Hunold 3 january 1990
Ernst 21 may 1991
Lorentz 7 february 1999
Mourgos 16 november 1999
Usando a função TO_CHAR com números: estes são alguns dos elementos de formato que
podem ser usados com a função TO_CHAR para exibir um valor numérico como um caractere.
40
SQL Básico
. Ponto decimal na posição especificada 999999.99 1234.00
, Vírgula na posição especificada 999,999 1,234
MI Sinais de menos à direita (valores negativos) 999999MI 1234-
PR Coloca números negativos entre parênteses 999999PR (1234)
EEEE Notação científica (formato deve especificar quatro Es) 99.999EEEE 1.234E+03
V Multiplica por 10 n vezes (n = número de 9s após o V) 9999V99 123400
B Exibe valores de zero como espaço, não 0 B9999.99 1234.00
Salary
$6,000.00
0-49 50-99
Se os dois dígitos do ano 0-49 A data retornada estará no A data retornada estará no
atual forem: século atual século anterior
Exemplo de formato de data RR: para determinar os funcionários admitidos antes de 1990,
use oformato RR, que produz os mesmos resultados independentemente de o comando ser
executado em 1999 ou agora:
Last_name to_char(hire_date)
41
SQL Básico
Last_name to_char(hire_date)
King 17-jun-1987
Kochhar 21-sep-1989
Whalen 17-sep-1987
Função NVL
Exemplos:
Last_name Comm
King
Blake
Martin 1400
Last_name Comm
King 0
Blake 0
Martin 1400
42
SQL Básico
Last_name Salary Nvl(commission_pct,0) an_sal
Hunold 9000 0 108000
Ernst 6000 0 720000
Lorentz 4200 0 50400
Mourgos 5800 0 69600
Rajs 3500 0 42000
A expressão CASE
Facilita as pesquisas condicionais funcionando como uma instrução IF-THEN-ELSE:
A função DECODE
Facilita as pesquisas condicionais funcionando como uma instrução CASE ou IF-THEN-ELSE
43
SQL Básico
Last_name Job_id Salary Revised_salary
Lorentz IT_PROG 4200 4620
Mourgos ST_MAN 5800 5800
Rajs ST_CLERK 3500 4025
Gietz AC_ACCOUNT 8300 8300
Aninhando funções
• As funções de uma única linha podem ser aninhadas em qualquer nível.;
• As funções aninhadas são avaliadas do nível mais interno para o mais externo.
F3(F2(F1(col1,arg1),arg2),arg3)
Para mostrar a data da próxima sexta-feira, que fica seis meses após a data de admissão. A data
resultante deve aparecer como Friday, March 12th, 1982. Ordenar os resultados por data de
admissão.
Exercícios
1. Crie uma consulta para exibir a data atual. Coloque um label na coluna como Data.
44
SQL Básico
2. Exiba o número do funcionário, o nome, o salário e o aumento salarial de 15% expresso como
número inteiro. Coloque um label na coluna como Novo Salario.
3. Modifique a consulta do exercício 2 para adicionar uma coluna que subtrairá o salário antigo do
novo salário. Coloque um label na coluna Incremento. Execute novamente a consulta.
4. Exiba o nome do funcionário, a data de admissão que é a primeira segunda-feira após seis meses
de serviço. Coloque um label na coluna REVISÃO. Formate as datas que aparecem em formato
semelhante a “Sunday, the Seventh of September, 1981”.
5. Para cada funcionário exiba o nome do mesmo e calcule o número de meses entre hoje e a sua
data de admissão. Coloque um label na coluna MESES_TRABALHADOS. Ordene os resultados
por número de meses empregado. Arredonde para cima o número de meses para o número
inteiro mais próximo.
6. Crie uma consulta que produza as seguintes informações para cada funcionário: <nome do
funcionário> recebe <salário> mensalmente mas deseja <salário multiplicado por 3>. Coloque um
label na coluna, como “Sonho Salarial”.
7. Crie uma consulta que exiba o nome e o salário de todos os funcionários. Formate o salário para
ter 15 caracteres e apresentar o sinal $ à esquerda. Coloque um label na coluna como SALÁRIO.
8. Crie uma consulta que exibirá o nome do funcionário com a primeira letra maiúscula e todas as
outras minúsculas, bem como o tamanho de seus nomes, para todos os funcionário cujo nome
começa com J, A ou M. Forneça cada coluna um label apropriado.
9. Exiba o nome, a data de admissão e o dia da semana em que o funcionário começou a trabalhar.
Coloque um label na coluna DAY. Ordene os resultados por dia da semana, iniciando por
Segunda.
45
SQL Básico
9. Exibindo
Exibindo dados de várias tabelas
Definindo Junções
Quando são necessários dados de uma ou mais tabelas no banco de dados, usa-se uma condição de
junção (JOIN). As linhas de uma tabela podem ser unidas às linhas de outra tabela de acordo com
os valores comuns existentes nas colunas correspondentes, isto é, em geral colunas de chave
primária e estrangeira.
Oracle:
Select tabela1.coluna, tabela2.coluna
From tabela1, tabela2
Where tabela.coluna1 = tabela2.coluna2;
SQL padrão:
Select tabela1.coluna, tabela2.coluna
From tabela1 inner join tabela2
On tabela.coluna1 = tabela2.coluna2;
46
SQL Básico
• Todas as linhas da primeira tabela forem 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.
47
SQL Básico
Tipos de Junções
48
SQL Básico
os valores da coluna DEPTNO das duas tabelas devem ser iguais. Com freqüência, essa junção
envolve complementos de chave primária e estrangeira.
Obs.: As junções idênticas também são chamadas de junções simples ou junções internas.
Employees
Employee_id Last_name Salary
7839 King 5000
7698 Blake 2850
7782 Clark 2450
Job_Grades
Gra Lowest_sal Highest_sal
A 1000 2999
B 3000 5999
C 6000 9999
D 10000 14999
E 15000 24999
F 25000 40000
O salário na tabela EMPLOYEES está entre salário inferior e salário superior na tabela
JOB_GRADES.
49
SQL Básico
O que é uma Junção externa (OUTER JOIN)?
Se uma linha não satisfizer uma condição de junção, a linha não aparecerá no resultado da
consulta. Por exemplo, na condição de junção idêntica (equijoin) das tabelas EMPLOYEES e
DEPARTMENTS, o departamento CONTRACTING não aparece porque ninguém trabalha neste
departamento.
50
SQL Básico
Last_name Department_id Department_name
Whalen 10 Administration
Hartstein 20 Marketing
Fay 20 Marketing
Mourgos 50 Shipping
Rajs 50 Shipping
Davies 50 Shipping
Contracting
51
SQL Básico
Employee_id Last_name Department_id Department_id Location_id
143 Matos 50 50 1500
52
SQL Básico
ON (e.department_id = d.department_id) ;
Condições adicionais:
53
SQL Básico
Exercícios
1. Crie uma consulta para exibir o nome, o número e o nome do departamento de todos os
funcionários.
2. Crie uma lista única de todos os cargos existentes no departamento 60. Inclua a localização do
departamento 60 na saída.
3. Crie uma consulta para exibir o nome do funcionário, o nome do departamento e a localização de
todos os funcionários que recebem uma comissão.
4. Exiba o nome do funcionário e o nome do departamento para todos os funcionários que possuem
um “A” em seus nomes.
5. Crie uma consulta para exibir o nome, o cargo, o número e o nome do departamento para todos
os funcionário que tem a função IT_PROG.
6. Exiba o nome e o número do funcionário junto com o nome e o número do gerente. Coloque um
label nas colunas Employee, Emp#, Manager e Mgr#, respectivamente.
7. Modifique o exercício 6 para exibir todos os funcionários incluindo King, que não possuem um
gerente.
8. Crie uma consulta que exibirá o nome dos funcionários, o número do departamento e todos os
funcionários que trabalham no mesmo departamento de um determinado funcionário. Forneça a
cada coluna um label apropriado.
9. Mostre a estrutura da tabela JOB_GRADES. Crie uma consulta que exiba o nome, o cargo, o
nome do departamento, o salário e a classificação de todos os funcionários.
10. Crie uma consulta para exibir o nome e a data de admissão de qualquer funcionário admitido
após o funcionário Blake.
11. Exiba todos os nomes de funcionários e as datas de admissão junto com o nome e a data de
admissão do gerente para todos os funcionários admitidos antes de seus gerentes. Coloque um
label nas colunas Employee, Emp Hiredate, Manager e Mgr Hiredate, respectivamente.
54
SQL Básico
10 Funções de grupo
As funções de grupo operam em conjuntos de linhas para fornecer um resultado por grupo.
Sintaxe das funções de grupo:
Exemplos:
Função Descrição
AVG ([DISTINCT] n ) Valor médio de n, ignorando valores nulos
COUNT ({*|[DISTINCT]EXPR}) Número de linhas, onde expr avalia para algo diferente de nulo (Conte
todas as linhas selecionadas usando *, inclusive duplicadas e linhas com
nulos.)
MAX([DISTINCT]expr) Valor máximo de expr , ignorando valores nulos
MIN([DISTINCT]expr) Valor mínimo de expr , ignorando valores nulos
SUM([DISTINCT]expr) Valores somados de n , ignorando valores nulos
Função COUNT
SELECT COUNT(*)
FROM employees
WHERE department_id = 50;
Count(*)
5
COUNT(DISTINCT department_id)
55
SQL Básico
5
SELECT AVG(commission_pct)
FROM employees;
AVG(commission_pct)
0,2125
AVG(NVL(commission_pct, 0))
0,0425
Department_id AVG(salary)
10 4400
20 9500
50 3500
60 6400
80 10033,333
90 19333,333
110 10150
7000
SELECT AVG(salary)
FROM employees
GROUP BY department_id;
AVG(salary)
4400
9500
3500
6400
56
SQL Básico
10033,333
19333,333
10150
7000
Agrupando por mais de uma coluna: adicione os salários na tabela EMPLOYEES para cada cargo,
agrupando por departamento.
57
SQL Básico
A cláusula HAVING pode preceder a cláusula GROUP BY, mas recomenda-se que você coloque
a cláusula GROUP BY primeiro, por ser mais lógico.
Department_id MAX(salary)
20 13000
80 11000
90 24000
110 12000
Job_id PAYROLL
IT_PROG 19200
AD_PRES 24000
AD_VP 34000
MAX(AVG(salary))
19333,333
Exercícios
58
SQL Básico
1. As funções de grupo operam em muitas linhas para produzir um resultado por grupo.
Verdadeiro/Falso
4. Exiba os salários maior, médio, menor e a soma de todos os salários de todos os funcionários.
Coloque um label nas colunas Máximo, Mínimo, Soma e Média, respectivamente. Arredonde os
resultados para o número inteiro mais próximo.
5. Modifique o exercício 4 para exibir o salário maior, médio, menor e a soma de todos os salários
para cada tipo de cargo.
6. Crie uma consulta para exibir o número de pessoas com o mesmo cargo.
7. Determine o número de gerentes sem listá-los. Coloque um label na coluna Número de Gerentes.
8. Crie uma consulta para exibir a diferença entre os maiores e menores salários. Coloque um label
na coluna DIFERENÇA.
9. Exiba o número do gerente e o salário do funcionário com menor pagamento sob a supervisão
desse gerente. Exclua todos cujo gerente não seja conhecido. Exclua todos os grupos em que o
salário mínimo seja menor do que R$ 1.000. Classifique a saída em ordem decrescente de
salário.
10. Crie uma consulta para exibir o nome do departamento, o nome do local, o número de
funcionários e o salário médio de todos os funcionários nesse departamento. Coloque um label
nas colunas NOME_DEPT, LOCAL, NR DE PESSOAS e SALARIO, respectivamente. Arredonde
o salário médio para duas casas decimais.
11. Crie uma consulta que exiba o número total de funcionários e, desse total, o número total de
funcionários contratados em 1980,1981,1982 e 1983. Coloque os cabeçalhos apropriados nas
colunas.
12. Crie uma consulta matriz para exibir o cargo, o salário desse cargo baseado no número do
departamento e o salário total desse cargo para todos os departamentos, colocando em cada
coluna um cabeçalho apropriado.
59
SQL Básico
11 SUBCONSULTAS
Você poderá criar subconsultas na cláusula WHERE de outra instrução SQL para obter valores
baseados em um valor condicional desconhecido. Esta lição abrange as subconsultas de uma única
linha e de várias linhas.
Consulta principal
Que funcionários têm salários maiores que o de Jones?
Subconsulta
Qual é o salário de Jones?
Para resolver este problema, são necessárias duas consultas: uma consulta para descobrir
quanto Jones recebe e outra para descobrir quem recebe mais que essa quantia. Você pode resolver
combinando as duas consultas, colocando uma consulta dentro da outra consulta. A consulta interna
ou a subconsulta retorna um valor que é usado pela consulta externa ou pela consulta principal. Usar
uma subconsulta equivale a executar duas consultas seqüenciais e usar o resultado da primeira
como o valor de pesquisa na segunda consulta.
SELECT lista_de_seleção
FROM tabela
WHERE operador expr (SELECT lista_de_seleção
FROM tabela);
SELECT last_name
FROM employees
WHERE salary > SELECT salary
FROM employees
WHERE last_name = 'Abel');
Last_name
King
Kochhar
De Haan
Hartstein
Higgins
60
SQL Básico
Subconsultas
Subconsultas de única linha
Select para exibir funcionários cujo cargo é o mesmo que o do funcionário 7369 e cujo salário é maior
que o do funcionário 7876.
61
SQL Básico
Subconsultas de várias linhas
Você pode usar um operador de várias linhas, em vez de um operador de uma única linha, com uma
subconsulta de várias linhas. O operador de várias linhas espera um ou mais valores.
SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id NOT IN (SELECT mgr.manager_id
FROM employees mgr);
SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id IN (SELECT mgr.manager_id
FROM employees mgr);
Usando
Usando subconsulta na Cláusula FROM
O exemplo acima exibe nomes de funcionários, salários, números de departamento e salários médios
de todos os funcionários que recebem mais que o salário médio nos seus departamentos.
62
SQL Básico
o A pesquisa na consulta interna não continuará;
o A condição será indicada por um flag TRUE;
• Se o valor de linha de uma subconsulta não for encontrado:
o A condição será indicada por um flag FALSE;
o A pesquisa continuará na consulta interna.
Exercícios
1. Crie uma consulta para exibir o nome e a data de admissão de todos os funcionários no mesmo
departamento que Blake. Exclua Blake.
2. Crie uma consulta para exibir o número e o nome de todos os funcionários que recebam mais que
o salário médio. Classifique os resultados, por salário, em ordem decrescente.
3. Crie uma consulta para exibir o número e o nome de todos os funcionários que trabalhem em um
departamento com qualquer funcionário cujo nome contenha um T .
7. Modifique o exercício 3 para exibir o número, o nome e o salário de todos os funcionários que
recebam mais que o salário médio e trabalhem em um departamento com qualquer funcionário
cujo nome contenha um T.
8. Crie uma consulta para exibir o nome, o número do departamento e o salário de qualquer
funcionário cujo número do departamento e salário correspondam ao número do departamento e
salário de qualquer funcionário que receba comissão.
63
SQL Básico
9. Exiba o nome, o nome do departamento e o salário de qualquer funcionário cujo salário e cuja
comissão correspondam ao salário e à comissão de qualquer funcionário localizado em Dallas.
10. Crie uma consulta para exibir o nome, a data de admissão e o salário de todos os funcionários
que tenham o mesmo salário e a mesma comissão que Scott.
11. Crie uma consulta para exibir os funcionários que recebem um salário maior que o de todos os
escriturários. Classifique os resultados sobre salários do maior para o menor.
64
SQL Básico
Create table
Exemplo:
Exercício
1) Crie a tabela EMPLOYEES2 de acordo com a estrutura da tabela EMPLOYEES. Inclua apenas
as colunas EMPLOYEE_ID, LAST_NAME e DEPARTMENT_ID. Nomeie as colunas com ID,
LAST_NAME e DEPT_ID na nova tabela, respectivamente.
65
SQL Básico
13 Comandos DML
DML- Parte II
Insert
Update
Atualizando duas colunas com uma subconsulta: atualize o cargo e o salário do funcionário
114 para que correspondam aos do funcionário 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 = 114;
1 row updated.
Delete
Deletando linhas com base em outra tabela: use subconsultas nas instruções DELETE para
remover linhas de uma tabela com base em valores de outra tabela.
66
SQL Básico
14 Views
View simples:
• Cria dados a partir de somente uma tabela;
• Não contém funções ou grupos de dados;
• Pode executar a DML através da view.
View complexa:
• Cria dados a partir de várias tabelas;
• Contém funções ou grupos de dados;
• Nem sempre executa a DML através da view.
67
SQL Básico
Restrição é o nome atribuído à restrição CHECK OPTION
WITH READ ONLY assegura que as operações DML não possam ser executadas nesta
view.
• Descreva a estrutura:
desc empvu80
SELECT *
FROM salvu50;
Depois que a view for criada, você pode consultar a tabela do dicionário de dados chamada
USER_VIEWS para ver o nome e a definição da view. O texto da instrução SELECT que constitui a
view é armazenado em uma coluna LONG.
• Os apelidos de coluna na cláusula CREATE VIEW estão listados na mesma ordem que as
colunas na subconsulta.
68
SQL Básico
Criando uma View Complexa
• Criando uma view complexa que contenha funções de grupo para exibir os valores a partir de
duas tabelas.
Exercícios
1. Crie uma view chamada EMP_VU baseada no nome e número do funcionário e número de
departamento na tabela EMPLOYESS. Altere o cabeçalho do nome do funcionário para
EMPLOYEE.
4. Usando a view EMP_VU, crie uma consulta para exibir todos os nomes dos funcionários e os
números de departamento.
5. Crie uma view nomeada DEPT20 que contenha o número e o nome do funcionário e o número
de departamento de todos os funcionários no departamento 20. Coloque um label nas coluna da
view de EMPLOYEE_ID, LAST_NAME, e DEPARTMENT_ID.
7. Crie uma view chamada SALARY_VU baseada no nome do funcionário, nome do departamento,
salário e grau de salário de todos os funcionários. Coloque um label nas colunas de Employee,
Department e Salary, respectivamente.
69
SQL Básico
15 Índices
Um índice:
• É um objeto de esquema;
• É usado pelo servidor Oracle para acelerar a recuperação de linhas usando um ponteiro;
• Pode reduzir a E/S do disco usando um método de acesso rápido a caminhos a fim de
localizar os dados rapidamente;
• É independente da tabela que indexa;
• É usado e mantido automaticamente pelo servidor Oracle.
Criando um índice
• Crie um índice em uma ou mais colunas:
Confirmando índices
• A view de dicionário de dados USER_INDEXES contém o nome do índice e sua
exclusividade;
• A view USER_IND_COLUMNS contém os nomes do índice, da tabela e da coluna.
70
SQL Básico
Removendo um Índice
Exercícios
71
SQL Básico
16 Operadores SET
Union/Union All
Intersect
Minus
Operador UNION
Retorna o resultado de duas consultas após eliminar duplicações;
• Exiba os detalhes dos cargos anterior e atual de todos os funcionários. Exiba cada funcionário
somente uma vez:
72
SQL Básico
Operador INTERSECT
• Exiba os IDs de funcionário e os IDs de cargo dos funcionários com o mesmo cargo que
ocupavam antes do início do período de permanência na empresa:
Operador MINUS
SELECT employee_id,job_id
FROM employees
MINUS
SELECT employee_id,job_id
FROM job_history;
73