Buscar

SQL_Basico_SQL

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 73 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 73 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 73 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

SQL Básico 
 
1 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
SQL 
 
SQL Básico 
 
2 
 
1. Conceitos de banco de dados .................................................................................................................5 
Banco de dados: .....................................................................................................................................5 
Sistema de Gerenciamento de Bancos de Dados (SGBD): ....................................................................5 
Sistema de Bancos de Dados .................................................................................................................5 
2. O Modelo Relacional .............................................................................................................................6 
Definição de Banco de Dados Relacional ..............................................................................................6 
Modelo Entidade Relacionamento (MER) .............................................................................................6 
Benefícios do Modelo de Relacionamento de Entidades ...................................................................6 
Componentes-chave ...........................................................................................................................6 
Atributo Identificador ........................................................................................................................6 
Exercícios ...............................................................................................................................................7 
3. Criando e gerenciando tabelas – Parte I .................................................................................................8 
Instruções SQL .......................................................................................................................................8 
Comandos DDL .....................................................................................................................................8 
Create table ........................................................................................................................................9 
Alter table .........................................................................................................................................10 
Truncate table ...................................................................................................................................11 
Exercícios .............................................................................................................................................11 
4. Manipulando Dados – Parte I ..............................................................................................................13 
Comandos DML ...................................................................................................................................13 
Insert ................................................................................................................................................13 
Update ..............................................................................................................................................14 
Delete ...............................................................................................................................................14 
Exercícios .............................................................................................................................................15 
5. Restrições .............................................................................................................................................17 
Restrição NOT NULL ......................................................................................................................18 
Restrição UNIQUE ..........................................................................................................................18 
Restrição de PRIMARY KEY .........................................................................................................18 
Restrição de FOREIGN KEY .........................................................................................................19 
Restrição CHECK ...........................................................................................................................19 
Eliminando uma restrição ................................................................................................................20 
Desativando restrições .....................................................................................................................20 
Ativando restrições ..........................................................................................................................20 
Restrições em cascata ......................................................................................................................21 
Exercícios .............................................................................................................................................21 
6. Criando instruções SQL Básicas ..........................................................................................................22 
Select ....................................................................................................................................................22 
Precedência de operadores ...............................................................................................................23 
Um apelido de coluna ......................................................................................................................23 
Um operador de concatenação .........................................................................................................24 
Strings de caracteres literais .............................................................................................................24 
Linhas duplicadas .............................................................................................................................25 
Exercícios .............................................................................................................................................26 
7 Restrigindo e classificando dados .........................................................................................................27 
Limitando as linhas selecionadas .....................................................................................................27 
Strings de caracteres e datas ............................................................................................................27 
SQL Básico 
 
3 
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 ........................................................................................................................37Conversã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 
SQL Básico 
 
4 
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 
SQL Básico 
 
5 
1. 1. 1. 1. ConceitosConceitosConceitosConceitos de banco de dadosde banco de dadosdebanco de dadosde banco de dados 
 
Banco de dados:Banco de dados:Banco de dados:Banco de dados: é uma coleção de dados interrelacionados, representando informações sobre um 
domínio específico. Exemplos: lista telefônica, controle do acervo de uma biblioteca, sistema de 
controle dos recursos humanos de uma empresa. 
 
Sistema de Gerenciamento de Bancos de Dados (SGBD):Sistema de Gerenciamento de Bancos de Dados (SGBD):Sistema de Gerenciamento de Bancos de Dados (SGBD):Sistema de Gerenciamento de Bancos de Dados (SGBD): é um software com recursos 
específicos para facilitar a manipulação das informações dos bancos de dados e o desenvolvimento 
de programas aplicativos. Exemplos: Oracle, PostgreSQL, MySQL, SqlServer. 
 
Sistema de Bancos de DadosSistema de Bancos de DadosSistema de Bancos de DadosSistema de Bancos de Dados: é um sistema de manutenção de registros por computador, 
envolvendo quatro componentes principais: 
• dados, 
• hardware; 
• software; 
• usuários. 
 
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. 
 
 
SQL Básico 
 
6 
2. 2. 2. 2. O Modelo RelacionalO Modelo RelacionalO Modelo RelacionalO Modelo Relacional 
 
Definição de Banco de Dados RelacionalDefinição de Banco de Dados RelacionalDefinição de Banco de Dados RelacionalDefinição de Banco de Dados Relacional 
 
Um banco de dados relacional é um conjunto de relações ou tabelas bidimensionais para armazenar 
informações. Por exemplo, informações sobre todos os funcionários de uma empresa. Em um banco 
de dados relacional, você cria várias tabelas para armazenar informações diferentes sobre 
funcionários, como tabelas de funcionários, departamentos e salários. 
 
Modelo Entidade RModelo Entidade RModelo Entidade RModelo Entidade Relacionamento (MER)elacionamento (MER)elacionamento (MER)elacionamento (MER) 
 
Em um sistema eficiente, os dados são divididos em categorias ou entidades distintas. Um modelo 
de relacionamento de entidades (ER) é uma ilustração de várias entidades em uma empresa e dos 
relacionamentos entre elas. Um modelo de relacionamento de entidades é derivado de narrativas ou 
especificações comerciais e é criado durante a fase de análise do ciclo de vida de desenvolvimento 
do sistema. Os modelos para relacionamento de entidades separam as informações necessárias para 
uma empresa das atividades desempenhadas dentro dela. Embora as empresas possam alterar suas 
atividades, o tipo de informações tende a permanecer constante. Portanto, as estruturas de dados 
também tendem a ser constantes. 
 
Benefícios do ModeloBenefícios do ModeloBenefícios do ModeloBenefícios do Modelo de Relacionamento dede Relacionamento dede Relacionamento dede Relacionamento de EntidadesEntidadesEntidadesEntidades 
 
• Documenta as informações da organização em formato claro e preciso; 
• Fornece uma imagem clara do escopo das necessidades de informações; 
• Fornece um mapa ilustrado facilmente compreendido para o desingn do banco de dados; 
• Oferece uma estrutura eficiente para a integração de várias aplicações. 
 
ComponentesComponentesComponentesComponentes----chavechavechavechave 
 
• Entidade: Um item importante sobre o qual é necessário obter informações. Os exemplos 
são departamentos, funcionários e pedidos. 
• Atributo: Um item que descreve ou qualifica uma entidade. Por exemplo, para a entidade de 
funcionários, os atributos são o número, o nome e o cargo do funcionário, além do número do 
departamento e assim por diante. Cada um desses atributos é necessário ou opcional. Esse 
estado é chamado de opcionalidade; 
• Relacionamento: Uma associação nomeada entre entidades que demonstra opcionalidade e 
grau. Os exemplos são funcionários e departamentos, além de pedidos e itens. 
 
 
Atributo IdentificadorAtributo IdentificadorAtributo IdentificadorAtributo Identificador 
 
Chave Primária: É aquele atributo que identifica de forma única cada ocorrência na entidade – linha 
preenchida na tabela. Exemplo: (cód_produto) 
 
Chave concatenada ou composta: Quando o identificador é formado por mais de um atributo na 
SQL Básico 
 
7 
formação da chave primária. Exemplo: (data, boleto) 
 
Chave estrangeira: É um atributo importado de outra entidade, para implementar logicamente o 
relacionamento 1:N. Exemplo: (cod_loja) 
 
Exemplo de MER: 
 
• Um professor pode ministrar várias disciplinas; 
• As disciplinas possuem apenas 1 professor. 
 
 
 
 
 
 
 
 
 
 
 
Professor Disciplina 
Cod_prof PK Cod_disc PK 
Nome_prof Descr_disc 
Idade_prof carga_hor 
End_prof Cod_prof FK 
Tel_prof 
 
 
ExercíciosExercíciosExercíciosExercí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. 
 
Professo
r 
Disciplina ministr
a 
1 N 
1 1 
1:N 
SQL Básico 
 
8 
3. 3. 3. 3. Criando e gerenciando tabelasCriando e gerenciando tabelasCriando e gerenciando tabelasCriando e gerenciando tabelas –––– Parte IParte IParte IParte I 
 
 SQL é um conjunto de declarações que é utilizado para acessar os dados utilizando 
gerenciadores de banco de dados. SQL processa conjuntos de registros, ao invés de um por vez, 
provendo navegação automática através dos dados, permitindo ao usuário manipular tipos complexos 
de dados. 
 
Objetos do banco de dados 
Objeto Descrição 
Tabela Unidade básica de armazenamento. Composta de linhas e colunas 
View Representa logicamente subconjuntos de uma ou mais tabelas 
Sequência Gerador de valores numéricos 
Índice Melhora o desempenho de algumas consultas 
Sinônimo Atribui valores alternativos a objetos 
 
 Regra para nomeação de tabelas e colunas: 
• Devem ser iniciados por uma letra; 
• Devem ter de 1 a 30 caracteres; 
• Devem conter somente AZ, az, 09, _, $ e #; 
• Não devem duplicar o nome de outro objeto de propriedade do mesmo usuário; 
• Não devem ser uma palavra reservada do servidor Oracle. 
 
Instruções SQLInstruções SQLInstruções SQLInstruções SQL 
 
Instrução Tipo Função 
SELECT Recuperação de Dados Recupera dados do Banco de Dados. 
INSERT 
UPDATE 
DELETE 
DML (Data Manipulation Language) Inclui novas linhas, alteras linhas (informações) 
existentes e remove linhas indesejáveis no Banco 
de dados, respectivamente. 
CREATE 
ALTER 
DROP 
RENAME 
TRUNCATE 
DDL (Data Definition language) Cria novos objetos (usuários, tabelas, views, etc), 
altera objetos, mata objetos, renomeia tabelas e 
trunca as tabelas, respectivamente no Banco de 
Dados. 
COMMIT 
ROLLBACK 
SAVEPOINT 
Controle de transação Gerencia as alterações feitas por instruções DML, 
confirmando ou cancelando. É possível agrupar 
as alterações dos dados em transações lógicas. 
GRANT 
REVOKE 
DCL (Data Control Language)Fornece ou remove direitos de acesso ao banco 
de Dados e estrutura contidas à ele para novos 
usuários de Banco. 
 
 
Comandos Comandos Comandos Comandos DDDDDDDDLLLL 
 
SQL Básico 
 
9 
Create tableCreate tableCreate tableCreate 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: 
 
Tipo de dado Descrição 
Varchar2(comprimento_máximo) Caracter de tamanho variável podendo atingir o tamanho máximo 
de até 32767 bytes 
Char[comprimento_máximo] Caracter fixo com o tamanho máximo de 
32767 bytes. Se o tamanho não for especificado, o default é 1 
Number [precisão, escala] Tipo numérico fixo e de ponto flutuante 
Binary_integer É o tipo básico para inteiros entre 
-2.147.483.647 e 2.147.483.647. Utiliza funções da biblioteca 
interna para executar a aritmética 
PLS_INTEGER Inteiro binário com performance superior a 
BINARY_INTEGER, pois utiliza as instruções de máquina nativa 
para execução de cálculos 
LONG Caracter de tamanho variável podendo ter até 32760 bytes 
LONG RAW Tipo binário variável de até 32760 bytes 
DATE Tipo para acomodar data e hora 
BOOLEAN Armazena três valores lógicos possíveis, 
TRUE, FALSE e NULL 
ROWID Utilizado para armazenar endereços físicos das linhas 
UROWID Utilizado para armazenar endereços físicos e lógicos 
 
 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. 
 
Esquema É o mesmo nome do proprietário 
tabela É o nome da tabela 
DEFAULT expr Especifica um valor default se um valor estiver omitido na instrução 
INSERT 
Coluna É o nome da coluna 
Tipo de dados É o tipo de dados e o comprimento da coluna 
 
 
SQL Básico 
 
10 
 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. 
 
 Para a opção default: 
• Especifique um valor default para uma coluna durante uma inserção; 
• Valores literais, expressões ou funções SQL são valores válidos; 
• O nome de outra coluna ou uma pseudocoluna são valores inválidos; 
• O tipo de dados default deve corresponder ao tipo de dados da coluna; 
 
 Tabelas no banco de dados Oracle: 
• Tabelas do usuário: 
• São um conjunto de tabelas criadas e mantidas pelo usuário; 
• Contêm informações sobre o usuário. 
• Dicionário de dados: 
• É um conjunto de tabelas criadas e mantidas pelo servidor Oracle; 
• Contém informações sobre o banco de dados. 
 
 Consultando o dicionário de dados: 
• Veja os nomes de tabelas de propriedade do usuário: 
select table_name from user_tables 
• Exiba tipos de objetos distintos de propriedade do usuário: 
select distinct object_type from user_objects 
• Exiba tabelas, views, sinônimos e sequências de propriedade do usuário: 
select * from user_catalog 
 
 
Alter tableAlter tableAlter tableAlter table 
 
 Use a instrução alter table para: 
• Adicionar uma nova coluna; 
• Modificar uma coluna existente; 
• Definir um valor default para a nova coluna; 
• Eliminar uma coluna. 
 
ALTER TABLE tabela 
ADD (coluna tipo_de_dados [DEFAULT expr] 
[,coluna tipo_de_dados]...); 
 
ALTER TABLE tabela 
MODIFY (coluna tipo_de_dados [DEFAULT expr] 
[,coluna tipo_de_dados]...); 
 
ALTER TABLE tabela 
DROP (coluna); 
 
 Eliminando uma tabela: 
• Todos os dados e a estrutura da tabela serão excluídos; 
• Todas as transações pendentes sofrerão commit; 
• Todos os índices serão eliminados; 
• Você não pode fazer rollback da instrução DROP TABLE. 
SQL Básico 
 
11 
 
 Alterando o nome de um objeto: 
• Para alterar o nome de uma tabela, view, seqüência ou sinônimo, execute a instrução RENAME. 
RENAME dept TO detail_dept; 
• Você deve ser o proprietário do objeto. 
 
 
Truncate tableTruncate tableTruncate tableTruncate table 
 
 Truncando uma tabela: 
• A instrução TRUNCATE TABLE: 
• Remove todas as linhas de uma tabela; 
• Libera o espaço de armazenamento usado por essa tabela. 
 
TRUNCATE TABLE detail_dept; 
 
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. 
 
 Adicionando comentários a uma tabela: 
• Você pode adicionar comentários a uma tabela ou coluna usando a instrução COMMENT; 
COMMENT ON TABLE employees is 'Employee information'; 
• Os comentários podem ser exibidos através das views de dicionário de dados: 
• ALL_COL_COMMENTS; 
• USER_COL_COMMENTS; 
• ALL_TAB_COMMENTS; 
• USER_TAB_COMMENTS; 
 
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íciosExercíciosExercíciosExercícios 
 
1) Crie o MER para as tabelas employees e departments: 
a. Atribua um ou mais funcionários a um departamento; 
b. Alguns departamentos ainda não tem funcionários atribuídos a eles. 
 
2) Crie a tabela EMPLOYEES com os seguintes campos: 
a. Employee_id, number(6), not null, pk; 
b. First_name, varchar2(20); 
c. Last_name, varchar2(25), not null; 
d. Email, varchar2(25), not null; 
SQL Básico 
 
12 
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) 
 
3) Crie a tabela DEPARTMENTS com os seguintes campos: 
a. Department_id, number(6); 
b. Department_name, varchar2(20); 
c. Manager_id, number(6); 
d. Location_id, number(6); 
 
4) Crie a tabela JOG_GRADES com os seguintes campos: 
a. Gra, varchar2(1); 
b. Lowest_sal, number(8,2); 
c. Highest_sal, number(8,2). 
 
5) Confirme se as tabelas DEPARTMENTS, EMPLOYEES e JOB_GRADES foram armazenadas 
no dicionário de dados. (Dica: USER_TABLES) 
 
6) Exiba a descrição das tabelas: 
desc employees; 
desc departments; 
desc job_grades; 
 
8) Renomeie a tabela EMPLOYEES para EMP. 
 
9) Elimine a tabela EMP. 
 
SQL Básico 
 
13 
4. Manipulando Dados 4. Manipulando Dados 4. Manipulando Dados 4. Manipulando Dados –––– Parte IParte IParte IParte I 
Comandos Comandos Comandos Comandos DMDMDMDMLLLL 
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. 
 
 
InsertInsertInsertInsert 
 
 Adicione novas linhas a uma tabela usando a instrução 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; 
 
INSERT INTO departments(department_id, department_n ame, manager_id, 
location_id) 
VALUES (70, 'Public Relations', 100, 1700); 
1 row created. 
 
• Coloque valores de data e de caractere entre aspas simples; 
• Método implícito: omite a coluna da lista de colunas: 
 
INSERT INTO departments (department_id,department_name ) 
VALUES (30, 'Purchasing'); 
1 row created. 
 
Método explícito: especifica a palavra-chave NULL na cláusula VALUES: 
 
INSERT INTO departments 
VALUES (100, 'Finance', NULL, NULL); 
1 row created. 
 
 Inserindo valores especiais: 
• A função SYSDATE registra a data e a hora atuais. 
 
INSERT INTO employees (employee_id, first_name, las t_name, email, 
phone_number, hire_date, job_id, salary, commission _pct, manager_id, 
department_id) 
VALUES (113, 'Louis', 'Popp', 'LPOPP', '515.124.456 7', SYSDATE, 
'AC_ACCOUNT', 6900, NULL, 205, 100); 
1 row created. 
 
 Inserindo valores de datas específicos: 
SQL Básico 
 
14 
• Adicone um novo funcionário: 
 
INSERT INTO employees 
VALUES (114, 'Den', 'Raphealy', 'DRAPHEAL', '515.12 7.4561', TO_DATE('FEB 3, 
1999', 'MON DD, YYYY'), 'AC_ACCOUNT', 11000, NULL, 100, 30); 
1 row created. 
 
• Verifique a nova adição: 
 
SELECT * FROM employees 
 
 
UpdateUpdateUpdateUpdate 
 
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 ]; 
 
Atualizando linhas em uma tabela: 
• Uma ou mais linhas específicas serão modificadas se você especificar a cláusula WHERE; 
 
UPDATE employees 
SET department_id = 70 
WHERE employee_id = 113; 
1 row updated. 
 
• Se você omitir a cláusula WHERE, todas as linhas da tabela serão modificadas. 
 
UPDATE copy_emp 
SET department_id = 110; 
22 rows updated. 
 
 
Atualizando Linhas: Erro de Restrição de Integridade 
 
UPDATE employees 
SET department_id = 55 
WHERE department_id = 110; 
 
UPDATE employees 
* 
ERROR at line 1: 
ORA-02291: integrity constraint (HR.EMP_DEPT_FK) vi olated - parent key not 
found 
[restrição de integridade (HR.EMP_DEPT_FK) violada - chave mãe não 
encontrada] 
 
Não existe o número de departamento 55 
 
 
DeleteDeleteDeleteDelete 
 
SQL Básico 
 
15 
Você pode remover linhas de uma tabela usando a instrução DELETE. 
 
DELETE [FROM] tabela 
[WHERE condição ]; 
 
• Se você especificar a cláusula WHERE, linhas específicas serão deletadas. 
 
DELETE FROM departments 
WHERE department_name = 'Finance'; 
1 row deleted. 
 
• Se você omitir a cláusula WHERE, todas as linhas da tabela serão deletadas. 
 
DELETE FROM copy_emp; 
22 rows deleted. 
 
Deletando linhas: erro de Restrição de Integridade 
 
DELETE FROM departments 
WHERE department_id = 60; 
DELETE FROM departments 
* 
ERROR at line 1: 
ORA-02292: integrity constraint (HR.EMP_DEPT_FK) vi olated - child record 
found 
[restrição de integridade (HR.EMP_DEPT_FK) violada - registro filho 
encontrado] 
 
Você não pode deletar uma linha que contenha uma ch ave primária usada como chave 
estrangeira em outra tabela. 
 
 
ExercíciosExercíciosExercíciosExercícios 
 
1) Insira as linhas abaixo na tabela DEPARTMENTS. 
 
Department_id Department_name Manager_id Location 
10 Administration 200 1700 
20 Marketing 201 1800 
50 Shipping 124 1500 
60 IT 103 1400 
80 Sales 149 2500 
90 Executive 100 1700 
110 Accounting 205 1700 
190 Contracting 1700 
 
2) Insira as linhas abaixo na tabela EMPLOYEES. 
 
 
Emplo
yee_id 
First_name Last_na
me 
Email Phone_numb
er 
Hire_date Job_id Salary Commisio
n_pct 
Manager_id Departm
ent_id 
SQL Básico 
 
16 
Emplo
yee_id 
First_name Last_na
me 
Email Phone_numb
er 
Hire_date Job_id Salary Commisio
n_pct 
Manager_id Departm
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 
 
 
3) Insira as linhas abaixo na tabela 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 
 
4) Altere o sobrenome do funcionário 142 para Drexler; 
 
5) Altere o salário para 1000 de todos os funcionários que ganhem menos de 900; 
 
6) Delete Curtis da tabela EMPLOYEES; 
 
 
 
SQL Básico 
 
17 
5555. Restrições. Restrições. Restrições. Restrições 
 
 
O que são restrições ? 
• As restrições impõem regras no nível da tabela; 
• As restrições evitam que uma tabela seja deletada se houver dependências; 
• Os seguintes tipos de restrições são válidos: 
o NOT NULL 
o UNIQUE 
o PRIMARY KEY 
o FOREIGN KEY 
o CHECK 
 
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 
 
 
Diretrizes sobre restrições: 
• Dê um nome à restrição ou deixe o servidor Oracle gerar um nome usando o formato 
SYS_Cn; 
• Crie uma restrição: 
o No momento em que a tabela for criada ou 
o Depois que a tabela tiver sido criada 
• Defina uma restrição no nível da coluna ou da tabela; 
• Exiba uma restrição no dicionário de dados. 
 
CREATE TABLE [ esquema.] tabela 
( coluna tipo_de_dados [DEFAULT expr ] 
[ restrição_de_coluna ], 
... 
[ restrição_de_tabela ][,...]); 
 
CREATE TABLE employees( 
employee_id NUMBER(6), 
first_name VARCHAR2(20), 
... 
job_id VARCHAR2(10) NOT NULL, 
CONSTRAINT emp_emp_id_pk 
PRIMARY KEY (EMPLOYEE_ID)); 
 
Definindo restrições: 
• Nível de restrição da coluna 
 
coluna [CONSTRAINT nome_da_restrição ] tipo_de_restrição , 
 
SQL Básico 
 
18 
• Nível de restrição da tabela 
 
coluna,... [CONSTRAINT nome_da_restrição ] tipo_de_restrição ( coluna , ...), 
 
Restrição NOT NULLRestrição NOT NULLRestrição NOT NULLRestrição NOT NULL 
• Assegura que valores nulos não sejam permitidos para as colunas; 
• É definida no nível da coluna: 
 
CREATE TABLE employees( 
employee_id NUMBER(6), 
last_name VARCHAR2(25) NOT NULL, 
salary NUMBER(8,2), 
commission_pct NUMBER(2,2), 
hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL , 
 
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. 
 
Você pode especificar o nome da restrição ao especificá-la. 
 
... department_id NUMBER(7,2) CONSTRAINT emp_deptno_nn NOT NULL ... 
 
 
RRRRestrição estrição estrição estriçã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. 
 
• Definida no nível da tabela ou da coluna: 
 
CREATE TABLE employees( 
employee_id NUMBER(6), 
last_name VARCHAR2(25) NOT NULL, 
email VARCHAR2(25), 
salary NUMBER(8,2), 
commission_pct NUMBER(2,2), 
hire_date DATE NOT NULL, 
... 
CONSTRAINT emp_email_uk UNIQUE(email)); 
 
RRRRestrição de estrição de estrição de estrição de PRIMARY KEY 
Uma restrição PRIMARY KEY cria uma chave primária para a tabela. Somente uma chave 
primária pode ser criada para cada tabela. A restrição PRIMARY KEY é uma coluna ou conjunto de 
colunas que identifica exclusivamente cada linha em uma tabela. Essa restrição impõe a 
exclusividadeda coluna ou combinação de colunas e assegura que nenhuma coluna que seja parte 
da chave primária possa conter um valor nulo. 
 
• Definida no nível da tabela ou da coluna: 
 
CREATE TABLE departments ( 
department_id NUMBER(4), 
department_name VARCHAR2(30) 
SQL Básico 
 
19 
CONSTRAINT dept_name_nn NOT NULL, 
manager_id NUMBER(6), 
location_id NUMBER(4), 
CONSTRAINT dept_id_pk PRIMARY KEY(department_id)); 
 
RRRRestrição de estrição de estrição de estrição de FOREIGN KEY 
FOREIGN KEY, ou uma restrição de integridade referencial, designa uma coluna ou combinação 
de colunas como a chave estrangeira e estabelece um relacionamento entre a chave primária ou uma 
chave exclusiva na mesma tabela ou uma tabela diferente. No exemplo DEPARTMENT_ID será 
definida como chave estrangeira na tabela EMPLOYEES (tabela filha ou dependente); ela faz 
referência à coluna DEPARTMENT_ID da tabela DEPARTMENTS (tabela mãe ou referenciada). Um 
valor de chave estrangeira deve corresponder a um valor existente na tabela mãe ou ser NULL. 
 
• Definida no nível da tabela ou da coluna: 
 
CREATE TABLE employees( 
employee_id NUMBER(6), 
last_name VARCHAR2(25) NOT NULL, 
email VARCHAR2(25), 
salary NUMBER(8,2), 
commission_pct NUMBER(2,2), 
hire_date DATE NOT NULL, 
... 
department_id NUMBER(4), 
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) 
REFERENCES departments(department_id), 
CONSTRAINT emp_email_uk UNIQUE(email)); 
 
Palavras-chave da restrição de FOREIGN KEY: 
• FOREIGN KEY: define a coluna na tabela filha no nível de restrição da tabela; 
• REFERENCES: identifica a tabela e a coluna na tabela mãe; 
• ON DELETE CASCADE: deleta as linhas dependentes da tabela filha quando uma linha da 
tabela mãe é deletada; 
• ON DELETE SET NULL: converte valores de chave estrangeira dependentes em valores 
nulos. 
 
RRRRestriçãoestriçãoestriçãoestriçã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. 
 
• Define uma condição que cada linha deve satisfazer; 
• As expressões a seguir não são permitidas: 
o Referências às pseudocolunas CURRVAL, NEXTVAL, LEVEL e ROWNUM; 
o Chamadas para as funções SYSDATE, UID, USER e USERENV; 
o Consultas que se referem a outros valores em outras linhas. 
 
..., salary NUMBER(2) 
CONSTRAINT emp_salary_min 
CHECK (salary > 0),... 
 
Use a instrução ALTER TABLE para: 
SQL Básico 
 
20 
• 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 
 
ALTER TABLE tabela 
ADD [CONSTRAINT restrição ] tipo ( coluna ); 
ALTER TABLE tabela 
ADD [CONSTRAINT restrição ] tipo ( coluna ); 
 
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. 
 
ALTER TABLE employees 
ADD CONSTRAINT emp_manager_fk 
FOREIGN KEY(manager_id) 
REFERENCES employees(employee_id); 
Table altered. 
 
Eliminando uma rEliminando uma rEliminando uma rEliminando uma restriçãoestriçãoestriçãoestrição 
• Remova a restrição de gerente da tabela EMPLOYEES; 
 
ALTER TABLE employees 
DROP CONSTRAINT emp_manager_fk; 
Table altered. 
 
• Remova a restrição de PRIMARY KEY da tabela DEPARTMENTS e elimine a restrição de 
FOREIGN KEY associada da coluna EMPLOYEES.DEPARTMENT_ID. 
 
ALTER TABLE employees 
DROP CONSTRAINT emp_manager_fk; 
Table altered. 
 
Desativando Desativando Desativando Desativando rrrrestriçõesestriçõesestriçõesestriçõ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. 
 
ALTER TABLE employees 
DISABLE CONSTRAINT emp_emp_id_pk CASCADE; 
Table altered. 
 
Ativando rAtivando rAtivando rAtivando restriçõesestriçõesestriçõesestrições 
• Ative uma restrição de integridade desativada no momento na definição da tabela, usando a 
cláusula ENABLE. 
 
ALTER TABLE employees 
ENABLE CONSTRAINT emp_emp_id_pk; 
Table altered. 
 
• Um índice UNIQUE ou PRIMARY KEY será automaticamente criado se você ativar uma 
restrição de chave UNIQUE ou PRIMARY KEY. 
 
SQL Básico 
 
21 
RestriRestriRestriRestrições em cções em cções em cções em cascataascataascataascata 
• 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. 
 
ALTER TABLE test1 
DROP (pk) CASCADE CONSTRAINTS; 
Table altered. 
 
ALTER TABLE test1 
DROP (pk, fk, col1) CASCADE CONSTRAINTS; 
Table altered. 
 
Consulte a tabela USER_CONSTRAINTS para ver todos os nomes e definições de restrições. 
 
SELECT constraint_name, constraint_type, 
search_condition 
FROM user_constraints 
WHERE table_name = 'EMPLOYEES'; 
 
Veja as colunas associadas aos nomes de restrições na view USER_CONS_COLUMNS. 
 
SELECT constraint_name, column_name 
FROM user_cons_columns 
WHERE table_name = 'EMPLOYEES'; 
 
ExercíciosExercíciosExercíciosExercí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. 
 
2. Crie uma restrição PRIMARY KEY na tabela DEPARTMENTS usando a coluna 
DEPARTMENT_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. 
 
4. Confirme se as restrições foram adicionadas, consultado USER_CONSTRAINTS. Observe os 
tipos e nomes das restrições. 
 
5. Exiba os tipos e nomes de objeto a partir da view de dicionário de dados USER_OBJECTS 
para as tabelas EMPLOYEES e DEPARTMENTS. 
 
 
SQL Básico 
 
22 
6. Criando instruções SQL Básicas6. Criando instruções SQL Básicas6. Criando instruções SQL Básicas6. Criando instruções SQL Básicas 
 
SelectSelectSelectSelect 
 
 Permite a seleção em uma ou mais tabelas. 
 
SELECT *|{[DISTINCT] coluna|expressão [ apelido ],...} 
FROM tabela; 
 
SELECT é uma lista de uma ou mais colunas 
DISTINCT suprime os itens duplicados 
* seleciona todas as colunas 
coluna seleciona uma ou mais colunas nomeadas (específicas) 
apelido fornece cabeçalhos diferentes às colunas selecionadas 
FROM tabela especifica a tabela contendo as colunas 
 
Criando e executando instruções SQL 
• Instruções SQL não fazem distinção entre maiúsculas e minúsculas; 
• Podem ser digitadas em uma ou mais linhas. Geralmente separadas para melhor 
visualização; 
• As palavras-chave não podem ser abreviadas ou dividas de uma linha para outra; 
• Coloque um ponto-e-vírgula ( ; ) no final da última cláusula. 
 
 Para selecionar todas as colunas: 
SELECT * 
FROM departments 
 
 Para selecionar colunas específicas: 
 
SELECT department_id, location_id 
FROM departments 
 
 Você pode criar expressões aritméticas usando os operadores +, -, * e /. 
 
SELECT last_name, salary, salary + 300 
FROM employees; 
 
Last_name Salary Salary + 300 
King 24000 24300 
Kochhar 17000 17300 
De Haan 17000 17300 
Hunold 9000 9300 
Ernst 6000 6300 
 
 
SQL Básico 
 
23 
Precedência de operadoresPrecedência de operadoresPrecedência de operadoresPrecedê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. 
 
SELECT last_name, salary, 12 * salary + 100 
FROM employees; 
 
Last_name Salary 12* Salary + 100 
King 24000 288100 
Kochhar 17000 204100 
De Haan 17000 204100 
Hunold 9000 108100 
Ernst 6000 72100 
 
 
 Usando parênteses: 
 
SELECT last_name, salary, 12 * (salary + 100) 
FROM employees; 
 
Last_name Salary 12* (Salary + 100) 
King 24000 289200 
Kochhar 17000 205200 
De Haan 17000 205200 
Hunold 9000 109200 
Ernst 6000 73200 
 
 
 Expressões aritméticas que contêm um valor nulo são avaliadas como nulas: 
 
SELECT last_name, commission_pct, 12 * salary * com mission_pct 
FROM employees; 
 
Last_name Commission_pct 12* Salary * Commission_pc t 
King 
Kochhar 
De Haan 0,2 408000 
Hunold 0,3 324000 
Ernst 0,2 144000 
 
 
Um apelido de colunaUm apelido de colunaUm apelido de colunaUm apelido de coluna 
• Renomeia um cabeçalho de coluna; 
• É útil para cálculos; 
SQL Básico 
 
24 
• 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. 
 
SELECT last_name as name , commission_pct as comm 
FROM employees; 
 
Name Comm 
King 
Kochhar 
De Haan 0,2 
Hunold 0,3 
Ernst 0,2 
 
 
SELECT last_name as 'Name' , salary * 12 'Annual Sa lary' 
FROM employees; 
 
Name Annual Salary 
King 288000 
Kochhar 204000 
De Haan 204000 
Hunold 108000 
Ernst 72000 
 
 
Um operador de concatenaçãoUm operador de concatenaçãoUm operador de concatenaçãoUm 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. 
 
SELECT last_name||job_id as 'Employees' 
FROM employees; 
 
Employees 
KingAD_PRES 
KochharAD_VP 
De HaanAD_VP 
HunoldIT_PROG 
ErnstIT_PROG 
 
Strings de caracteres literaisStrings de caracteres literaisStrings de caracteres literaisStrings de caracteres literais 
• Um literal é um caractere, um número ou uma data incluída na lista SELECT; 
• Os valores literais de caracteres e datas devem estar entre aspas simples; 
SQL Básico 
 
25 
• Cada string de caracteres é gerada uma vez para cada linha retornada. 
 
SELECT last_name || ' is a ' || job_id as 'Employee s Details' 
FROM employees; 
 
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 duplicadasLinhas duplicadasLinhas duplicadasLinhas 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 
 
 Elimine linhas duplicadas usando a palabra-chave DISTINCT na cláusula SELECT. 
 
SELECT DISTINCT department_id 
FROM employees; 
 
Department_id 
10 
20 
50 
60 
80 
 
 
Use o comando DESCRIBE para exibir esta estrutura. 
DESC [RIBE] nome da tabela. 
 
Ex.: 
 
Desc dept 
 
SQL Básico 
 
26 
Name Null? Type 
----------------- ---------------- ------------------------- 
DEPTNO NOT NULL NUMBER(2) 
DNAME VARCHAR2(14) 
LOC VARCHAR2(13) 
 
 
 
Acima está a estrutura da tabela dept. No resultado: 
 
• 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íciosExercíciosExercíciosExercícios 
1. A instrução SELECT será executada corretamente? 
Select ename, job, sal Salary 
From emp; 
 
2. Há quatro erros de codificação nesta instrução. Você pode identificá-los? 
Select empno, ename 
 Salary x 12 Salario Anual 
From emp; 
 
3. Mostre a estrutura da tabela DEPT. Selecione todos os dados da tabela DEPT. 
 
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. 
 
SQL Básico 
 
27 
7777 Restrigindo e classificando dadosRestrigindo e classificando dadosRestrigindo e classificando dadosRestrigindo e classificando dados 
 
LLLLimitando as linhas selecionadasimitando as linhas selecionadasimitando as linhas selecionadasimitando as linhas selecionadas 
• Restrinja as linhas retornadas usando a cláusula WHERE; 
 
SELECT *| {DISTINCT coluna | expressão [apelido], . ..} 
FROM tabela 
WHERE condição 
 
• A cláusula WHERE segue a cláusula FROM. 
 
 Recuperar todos os funcionários do departmento 90: 
 
SELECT employee_id, last_name, job_id, department_i d 
FROM employees 
WHERE department_id = 90; 
 
 
Employee_id Last_name Job_id Department_id 
100 King AD_PRES 90 
101 Kochhar AD_VP 90 
102 De Haan AD_VP 90 
 
 
Strings de caracteres e datasStrings de caracteres e datasStrings de caracteres e datasStrings de caracteres e datas 
• As strings de caracteres e valores de data aparecem entre aspas simples; 
• Os valores de caractere fazem distinção entre maiúsculas e minúsculas e os valores de data 
fazem distinção entre formatos; 
• O formato de data default é DD-MON-YY. 
 
SELECT last_name, job_id, department_id 
FROM employees 
WHERE last_name = 'Kochhar'; 
 
Condições de comparaçãoCondições de comparaçãoCondições de comparaçãoCondições de comparação 
 
 Usando condições de comparação: 
 
SELECT last_name, salary 
FROM employees 
WHERE salary <= 3000; 
 
 Outras condições de comparação: 
 
Operador Significado 
Between ... and ... Entre dois valores (inclusive) 
SQL Básico 
 
28 
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. 
 
SELECT last_name, salary 
FROM employees 
WHERE salary BETWEEN 2500 AND 3500; 
 
• Use a condição de associação IN para testar valores em uma lista: 
 
SELECT employee_id, last_name, salary, manager_id 
FROM employees 
WHERE manager_id IN (100, 101, 201); 
 
• 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%'; 
 
 Usando a condição NULL: 
 
SELECT last_name, manager_id 
FROM employees 
WHERE manager_id IS NULL; 
 
 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 
 
 
 Operador AND: exige que ambas as condições sejam verdadeiras. 
 
SELECT employee_id, last_name, job_id, salary 
FROM employees 
WHERE salary >= 10000 
AND job_id LIKE '%MAN%'; 
 
Employee_id Last_name Job_id Salary 
SQL Básico 
 
29 
Employee_id Last_name Job_id Salary 
149 Zlotkey SA_MAN 10500 
201 Hartstein MK_MAN 13000 
 
 
 Operador OR: exige que uma das condições seja verdadeira. 
 
SELECT employee_id, last_name, job_id, salary 
FROM employees 
WHERE salary >= 10000 OR job_id LIKE '%MAN%'; 
 
 
Employee_id Last_name Job_id Salary 
100 King AD_PRES 24000 
101 Kochhar AD_VP 17000 
102 De Haan AD_VP 17000 
124 Mourgos ST_MAN 5800 
149 ZlotkeySA_MAN 10500 
174 Abel SA_REP 11000 
201 Hartstein MK_MAN 13000 
205 Higgins AC_MGR 12000 
 
 
 Operador NOT 
 
SELECT last_name, job_id 
FROM employees 
WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP '); 
 
 
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 
 
 
 Regras de precedência (sobreponha regras de precedência usando parênteses): 
SQL Básico 
 
30 
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 
 
 
SELECT last_name, job_id, salary 
FROM employees 
WHERE job_id = 'SA_REP' OR job_id = 'AD_PRES' AND s alary > 15000; 
 
 
Last_name Job_id Salary 
King AD_PRES 24000 
Abel SA_REP 11000 
Taylor SA_REP 8600 
Grant SA_REP 7000 
 
 
 Use parênteses para forçar a prioridade: 
 
SELECT last_name, job_id, salary 
FROM employees 
WHERE (job_id = 'SA_REP' OR job_id = 'AD_PRES') 
 AND salary > 15000; 
 
Last_name Job_id Salary 
King AD_PRES 24000 
 
 
Order byOrder byOrder byOrder by 
 
 Cláusula ORDER BY: 
• Classifique linhas com a cláusula ORDER BY: 
• ASC: ordem crescente, default; 
• DESC: ordem decrescente; 
• A cláusula ORDER BY aparece por último na instrução SELECT. 
 
SELECT last_name, job_id, department_id, hire_date 
FROM employees 
ORDER BY hire_date; 
SQL Básico 
 
31 
 
Last_name Job_id Department_id Hire_date 
Zlotkey SA_MAN 80 29-jan-00 
Mourgos ST_MAN 50 16-nov-99 
Grant SA_REP 24-may-99 
Lorentz IT_PROG 60 07-feb-99 
Vargas ST_CLERK 50 09-jul-98 
Taylor SA_REP 80 24-mar-98 
Matos ST_CLERK 50 15-mar-98 
Fay MK_REP 20 17-aug-97 
Davies ST_CLERK 50 29-jan-97 
 
 
 Classificando por apelido de coluna: 
SELECT employee_id, last_name, salary*12 annsal 
FROM employees 
ORDER BY annsal; 
 
Employee_id Last_name Annsal 
144 Vargas 30000 
143 Matos 31200 
142 Davies 37200 
141 Rajs 42000 
107 Lorentz 50400 
200 Whalen 52800 
124 Mourgos 69600 
104 Ernst 72000 
202 Fay 72000 
178 Grant 84000 
 
 
 Classificando por várias colunas: 
 
SELECT last_name, department_id, salary 
FROM employees 
ORDER BY department_id, salary DESC; 
 
 Last_name Department_id Salary 
Whalen 10 4400 
Hartstein 20 13000 
Fay 20 6000 
Mourgos 50 5800 
Rajs 50 3500 
SQL Básico 
 
32 
 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íciosExercíciosExercíciosExercí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. 
 
5. Exiba o nome do funcionário e o número do departamento de todos os funcionários entre os departamentos 
10 e 30 por ordem alfabética de nome. 
 
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. 
 
7. Exiba o nome e a data de admissão de cada funcionário admitido em 1998. 
 
8. Exiba o nome e o cargo de todos os funcionários que não possuem em gerente. 
 
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. 
 
 
SQL Básico 
 
33 
8888 Funções SQFunções SQFunções SQFunções SQLLLL 
 
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. 
 
 
 nome_função [(arg1, arg2, ...)] 
 
 
SQL Básico 
 
34 
 
 
 
 
 
SQL Básico 
 
35 
 
Funções de Caracter (Conversão de Maiúsculas e Minúsculas)Funções de Caracter (Conversão de Maiúsculas e Minúsculas)Funções de Caracter (Conversão de Maiúsculas e Minúsculas)Funções de Caracter (Conversão de Maiúsculas e Minúsculas) 
 
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 
 
 
 Usando funções de manipulação de maiúsculas e minúsculas: exibir o número, o nome e o 
número do departamento do funcionários Higgins: 
 
SELECT employee_id, last_name, department_id 
FROM employees 
WHERE last_name = 'higgins'; 
no rows selected 
 
SELECT employee_id, last_name, department_id 
FROM employees 
WHERE LOWER(last_name) = 'higgins'; 
 
Employee_id Last_name Deparment_id 
205 Higgins 110 
 
Funções de Caracter (Manipulação de caractere)Funções de Caracter (Manipulação de caractere)Funções de Caracter (Manipulação de caractere)Funções de Caracter (Manipulação de caractere) 
 
Funcção Objetivo 
CONCAT Concatena o primeiro valor do caractere ao segundo valor do caractere, equivalente ao 
operador de concatenação ( || ). 
SUBSTR 
(coluna,m,n) 
Retorna caracteres específicos a partir do valor de caractere começando na posição m, até 
n caracteres depois. 
LENGHT Retorna o número de caracteres do valor 
INSTR Retorna a posição numérica do caractere nomeado. 
LPAD / RPAD 
(coluna,n,string) 
Preenche o valor de caractere com a string, justificando à (esquerda ou direita), 
preenchendo o tamanho de n posições faltantes da qtde da coluna. 
 
Exemplos: 
 
Função Resultado 
SQL Básico 
 
36 
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 
 
 
 Usando as funções de manipulação de caracteres: 
 
SELECT employee_id, CONCAT(first_name, last_name) N AME, job_id, LENGTH 
(last_name), INSTR(last_name, 'a') "Contains 'a'?" 
FROM employees 
WHERE SUBSTR(job_id, 4) = 'REP'; 
 
Employee_id Name Job_id Length(last_name) Contains 'a'? 
174 EllenAbel SA_REP 4 0 
176 JonathanTaylor SA_REP 3 2 
178 KimberelyGrant SA_REP 5 3 
202 PatFay MK_REP 3 2 
 
 
Funções numéricasFunções numéricasFunções numéricasFunçõ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 decimalserã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. 
 
 Usando a função round: 
 
SELECT ROUND(45.923,2), ROUND(45.923,0),ROUND(45.92 3,-1) 
FROM DUAL; 
 
Round(45.923,2) Round(45 .923,0) Round(45.923, -1) 
45.92 46 50 
 
 Dual é uma tabel fictícia usada para exibir resultados de funções e cálculos. 
 
 Usando a função trunc: 
SQL Básico 
 
37 
 
SELECT TRUNC(45.923,2), TRUNC(45.923),TRUNC(45.923, -2) 
FROM DUAL; 
 
Trunc(45.923,2) Trunc(45.923) Trunc(45.923,-2) 
45.92 45 0 
 
 
 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). 
 
SELECT last_name, salary, MOD(salary, 5000) 
FROM employees 
WHERE job_id = 'SA_REP'; 
 
Last_name Salary Mod(salary,5000) 
Abel 11000 1000 
Taylor 8600 3600 
Grant 7000 2000 
 
 
Trabalhando com datasTrabalhando com datasTrabalhando com datasTrabalhando com datas 
• O banco de dados Oracle armazena datas em um formato de número interno: século, ano, mês, 
dia, horas, minutos segundos; 
• O formato de exibição da data default é DD-MON-YY; 
• SYSDATE é uma função de retorno de data e hora; 
• DUAL é uma tabela fictícia usada para visualizar SYSDATE. 
 
SELECT last_name, hire_date 
FROM employees 
WHERE last_name like 'G%'; 
 
Last_name Hire_date 
Gietz 07-JUN-94 
Grant 24-MAY-99 
 
 Sysdate é uma função que retorna: 
• Data; 
• Hora. 
 
 Aritmética com datas: 
• Adicionar ou subtrair um número de, ou para, uma data para um valor de data resultante; 
• Subtrair duas datas para localizar o número de dias entre as datas; 
• Adicionar horas para uma data dividindo o número de horas por 24. 
 Usando operadores aritméticos com datas: 
 
SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS 
FROM employees 
SQL Básico 
 
38 
WHERE department_id = 10; 
 
Last_name Weeks 
King 744.245395 
Kochhar 626.102538 
De Haan 453.245395 
 
O exemplo exibe o nome e o número de semanas empregadas por todos os funcionários do 
departamento 10. Ele subtrai a data atual (SYSDATE) a partir da data na qual o funcionário foi 
admitido e divide o resultado por 7 a fim de calcular o número de semanas que o trabalhador está 
empregado. 
 
 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 
 
 
 Usando funções de data: 
• MONTHS_BETWEEN ('01-sep-95','11-jan-94') = 19.67741494 
• ADD_MONTHS ('11-JAN-94',6) = '11-JUL-94' 
• NEXT_DAY ('01-SEP-95','FRIDAY') = '08-SEP-95' 
• LAST_DAY('01-SEP-95') = '28-FEB-95 
 
 Suponha que SYSDATE = '25-JUL-95': 
• ROUND(SYSDATE,'MONTH') 01-AUG-95 
• ROUND(SYSDATE ,'YEAR') 01-JAN-96 
• TRUNC(SYSDATE ,'MONTH') 01-JUL-95 
• TRUNC(SYSDATE ,'YEAR') 01-JAN-95 
 
 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 
SQL Básico 
 
39 
 
Conversão de dados explícitaConversão de dados explícitaConversão de dados explícitaConversão de dados explícita 
 
 
 
 
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. 
 
 
Função TO_CHAR com Datas. 
 
Elemento Descrição 
SCC ou CC Século; Prefixos S data AC com - 
Anos em datas YYYY ou 
SYYYY 
Ano; Prefixos S data AC com - 
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 
SQL Básico 
 
40 
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: 
 
SELECT last_name, TO_CHAR(hire_date, 'fmDD Month YY YY') AS HIREDATE 
FROM employees; 
 
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 
 
Obs.: O fm alinha as informações das colunas. 
 
 
 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. 
 
Element o Descrição Exemplo Resultado 
9 Posição numérica (número de 9s determinam o 
tamanho da exibição) 
999999 1234 
0 Exibe zeros à esquerda 099999 001234 
$ Sinal de dólar flutuante $99999 $1234 
L Símbolo da moeda local flutuante (Moeda do Banco) L99999 FF1234 
SQL Básico 
 
41 
. 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 
 
 
SELECT TO_CHAR(salary, '$99,999.00') SALARY 
FROM employees 
WHERE last_name = 'Ernst'; 
 
Salary 
$6,000.00 
 
 
 Usando as funções TO_NUMBER e TO_DATE: 
• Converter uma string de caracteres em um formato de número usando a função TO_NUMBER: 
TO_NUMBER(caract[, 'modelo_formato']); 
• Converter uma string de caracteres em um formato de data usando a função TO_DATE: 
TO_DATE(caract[, 'modelo_formato']); 
 
 Formato de data RR: 
Ano atual Data especifada Formato RR Formato YY 
1995 27-oct-95 1995 1995 
1995 27-oct-17 2017 1917 
2001 27-oct-17 2017 2017 
2001 27-oct-95 1995 2095 
 
 Se o ano de dois dígitos especifado for: 
0-49 50-99 
Se os dois dígitos do ano 
atual forem: 
0-49 A data retornada estará no 
século atual 
A data retornada estará no 
século anterior 
50-99 A data retornada estará no 
século seguinte 
A data retornada estará no 
século atual 
 
 
 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: 
 
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY') 
FROM employees 
WHERE hire_date < TO_DATE('01-Jan-90', 'DD-Mon-RR'); 
 
Last_name to_char(hire_date) 
SQL Básico 
 
42 
Last_name to_char(hire_date) 
King 17-jun-1987 
Kochhar 21-sep-1989 
Whalen 17-sep-1987 
 
 
Função NVLFunção NVLFunção NVLFunção NVL 
 
• Converte um valor NULO para um valor real; 
• Os tipos de dados que podem ser usados são: datas, caracteres e números; 
• NVL(expr1, expr2) 
expr1: é o valor de origem ou expressão que pode conter nulo. 
Expr2: é o valor de destino para a conversão de nulo. 
 
 
Tipo de dados Exemplo de Conversão 
NUMBER NVL ( column_number, 9) 
DATE NVL (column_date, ‘01-JAN-95’) 
CHAR ou VARCHAR2 NVL (column_caracter, ‘Não preenchido`) 
 
Exemplos: 
 
select last_name, comm 
from emp; 
 
Last_name Comm 
King 
Blake 
Martin 1400 
 
select last_name, NVL(comm, 0) 
from emp; 
 
Last_name Comm 
King 0 
Blake 0 
Martin 1400 
 
 
SELECT last_name, salary, 
NVL(commission_pct, 0),(salary*12) + (salary*12*NVL (commission_pct, 0)) 
AN_SAL 
FROM employees; 
 
 
Last_name Salary Nvl(commission_pct,0) an_sal 
King 24000 0 288000 
Kochhar 17000 0 204000 
De Haan 17000 0 204000 
SQL Básico 
 
43 
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 
 
 
 Expressões condicionais: propiciam o uso da lógica IF-THEN-ELSE em uma instrução SQL. 
 
A expressão CASEA expressão CASEA expressão CASEA expressão CASE 
Facilita as pesquisas condicionais funcionando como uma instrução IF-THEN-ELSE: 
 
CASE expr WHEN comparação_expr1 THEN retorna_expr1 
 [WHEN comparação_expr2 THEN retorna_expr2 
WHEN comparação_exprn THEN retorna_exprn 
ELSE else_expr ] 
END 
 
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; 
 
Last_name Job_id Salary Revised_salary 
Lorentz IT_PROG 4200 4620 
Mougos ST_MAN 5800 5800 
Rajs ST_CLERK 3500 4025 
 
A função DECODEA função DECODEA função DECODEA função DECODE 
Facilita as pesquisas condicionais funcionando como uma instrução CASE ou IF-THEN-ELSE 
 
DECODE(col|expressão, pesquisa1, resultado1 
 [ , pesquisa2, resultado2,..., ] 
 [, default ]) 
 
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; 
 
SQL Básico 
 
44 
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 
 
 
 Exibir a alíquota de imposto aplicável para cada funcionário 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; 
 
Aninhando funçõesAninhando funçõesAninhando funçõesAninhando 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) 
 
 
SELECT last_name, NVL(TO_CHAR(manager_id), 'Sem ger ente') 
FROM employees 
WHERE manager_id IS NULL; 
 
Last_ name Nvl(to_char(manager_id), ' Sem gerente ') 
King Sem gerente 
 
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. 
 
select TO_CHAR ( NEXT_DAY (ADD_MONTHS( hiredate, 6 ), ‘FRIDAY’), ‘fmdDay, 
Month ddth, YYYY) “Rever depois de 6 meses” 
from emp 
order by hiredate; 
 
ExercíciosExercíciosExercíciosExercícios 
 
1. Crie uma consulta para exibir a data atual. Coloque um label na coluna como Data. 
SQL Básico 
 
45 
 
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. 
 
 
SQL Básico 
 
46 
9999. . . . ExibiExibiExibiExibindo dados de várias tabelasndo dados de várias tabelasndo dados de várias tabelasndo dados de várias tabelas 
 
Definindo JunçõesDefinindo JunçõesDefinindo JunçõesDefinindo 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; 
 
 
 
 
Produto cartesiano: Um produto cartesiano será formado quando: 
• Uma condição de junção for omitida; 
• Uma condição de junção for inválida; 
SQL Básico 
 
47 
• 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. 
 
Gerando um produto cartesiano: 
 
 
Unindo tabelas usando a sintaxe do Oracle: 
• Crie uma condição de junção na cláusula WHERE; 
• Coloque o nome da tabela antes do nome da coluna quando aparecer o mesmo nome de coluna 
em mais de uma tabela. 
 
 
SQL Básico 
 
48 
 
SELECT employees.employee_id, employees.last_name, employees.department_id, 
 departments.department_id, departments.location_id 
FROM employees, departments 
WHERE employees.department_id = departments.departm ent_id; 
 
Exercício : montar o resultado da consulta 
 
 
Qualificando nomes de colunas ambíguos: 
• Use prefixos de tabela para qualificar nomes de colunas que estão em várias tabelas; 
• Diferencie colunas que possuem nomes idênticos, mas que residam em tabelas diferentes usando 
apelidos de coluna. 
 
Tipos de JunçõesTipos de JunçõesTipos de JunçõesTipos de Junções 
 
Junção Idêntica Junção não-idêntica Junção Externa Autojunção 
(EQUIJOIN) (NON-EQUIJOIN) (OUTER JOIN) (SELF JOIN) 
 
O O O O que é uma Junção idêntica (EQUIJOIN)?que é uma Junção

Continue navegando