
Fundamentos do Oracle
Os fundamentos do Oracle abrangem todas as técnicas e comandos básicos usados para gerenciar e manipular dados dentro do Oracle Database. Isso inclui a criação, modificação, e exclusão de tabelas, além de consultas de dados usando SQL.
Passo a Passo: Trabalhando com o Oracle Database
1. Instalação do Oracle Database
Para começar, é necessário instalar o Oracle Database no seu sistema. Acesse o site oficial da Oracle e baixe o instalador adequado para o seu sistema operacional.
2. Conectando ao Oracle Database
Após a instalação, você pode conectar ao Oracle Database usando uma ferramenta como SQL*Plus, SQL Developer, PL/SQL Developer ou outra interface de sua preferência.
Criando e Gerenciando Tabelas
Criando Tabelas
A primeira etapa para trabalhar com dados é criar uma tabela. A instrução CREATE TABLE
é usada para definir a estrutura da tabela. Veja um exemplo:
CREATE TABLE funcionarios ( id NUMBER, nome VARCHAR2(100), data_nascimento DATE, email VARCHAR2(100), codigo_cargo NUMBER, salario NUMBER(12,3) );
Conforme mostra abaixo, esta instrução cria uma tabela chamada funcionarios
com seis colunas: id
, nome
, data_nascimento
, email
, codigo_cargo
e salario
.
Colunas | Tipo |
---|---|
ID | number, optional |
NOME | varchar2(100), optional |
DATA_NASCIMENTO | date, optional |
varchar2(100), optional | |
CODIGO_CARGO | number, optional |
SALARIO | number(12,3), optional |
Observação: Se você quiser adicionar comentários à tabela e às suas colunas para tornar a estrutura mais compreensível, especialmente em tabelas mais complexas, pode usar a instrução
COMMENT
. Aqui está como você pode fazer isso:
Exemplo de Comentários:
-- Comentário na tabela COMMENT ON TABLE funcionarios IS 'Tabela que armazena informações dos funcionários'; -- Comentários nas colunas COMMENT ON COLUMN funcionarios.id IS 'Identificador único do funcionário'; COMMENT ON COLUMN funcionarios.nome IS 'Nome completo do funcionário'; COMMENT ON COLUMN funcionarios.data_nascimento IS 'Data de nascimento do funcionário'; COMMENT ON COLUMN funcionarios.email IS 'Endereço de e-mail do funcionário'; COMMENT ON COLUMN funcionarios.codigo_cargo IS 'Código do cargo do funcionário'; COMMENT ON COLUMN funcionarios.salario IS 'Salário do funcionário';
Esses comentários ajudam a documentar tanto a tabela quanto as colunas, facilitando o entendimento sobre o propósito de cada um.
Definindo a Chave Primária
Para definir a coluna id
como chave primária após a criação da tabela, utilizamos a instrução ALTER TABLE
para adicionar uma restrição à tabela existente. Veja um exemplo:
ALTER TABLE funcionarios ADD CONSTRAINT pk_funcionarios PRIMARY KEY (id);
Conforme mostra abaixo, essa instrução adiciona uma chave primária denominada pk_funcionarios
à tabela funcionarios
, assegurando que os valores na coluna id
sejam únicos e não nulos.
Nome | Tipo | Colunas |
---|---|---|
PK_FUNCIONARIOS | Primary | ID |
Para gerenciar os cargos dos funcionários de forma mais eficiente, vamos criar uma tabela adicional chamada cargos
.
Utilizaremos novamente a instrução CREATE TABLE
para definir a estrutura dessa nova tabela. Veja um exemplo:
CREATE TABLE cargos ( codigo NUMBER PRIMARY KEY, descricao VARCHAR2(100) );
Como podemos observar, a chave primária (PRIMARY KEY
) é definida diretamente durante a criação da tabela cargos
, assegurando que os valores na coluna codigo
sejam únicos e não nulos.
Colunas | Tipo |
---|---|
CODIGO | number, mandatory |
DESCRICAO | varchar2(100), optional |
Definindo a Chave Estrangeira
Para garantir a integridade referencial, é necessário definir uma chave estrangeira na tabela funcionarios
que referencie a tabela cargos
. Veja um exemplo:
ALTER TABLE funcionarios ADD CONSTRAINT fk_codigo_cargo FOREIGN KEY (codigo_cargo) REFERENCES cargos(codigo);
Como demonstrado abaixo, essa instrução adiciona uma chave estrangeira na tabela funcionarios
, garantindo que os valores em codigo_cargo
correspondam aos valores codigo
na tabela cargos
.
Nome | Tipo | Colunas | Tabelas de referência | Colunas de referência |
---|---|---|---|---|
FK_CODIGO_CARGO | Foreign | CODIGO_CARGO | CARGOS | CODIGO |
Inserindo Dados
Inserindo Registros na Tabela
Para inserir dados em uma tabela, utiliza-se a instrução INSERT INTO
. Veja um exemplo:
insert into funcionarios (ID, NOME, DATA_NASCIMENTO, EMAIL, CODIGO_CARGO, SALARIO) values (1, 'Carlos Silva', to_date('10-05-1980', 'dd-mm-yyyy'), 'carlos.silva@example.com', 1, 3000.000); insert into funcionarios (ID, NOME, DATA_NASCIMENTO, EMAIL, CODIGO_CARGO, SALARIO) values (2, 'Ana Souza', to_date('15-08-1990', 'dd-mm-yyyy'), 'ana.souza@example.com', 2, 2500.000); insert into funcionarios (ID, NOME, DATA_NASCIMENTO, EMAIL, CODIGO_CARGO, SALARIO) values (3, 'Pedro Lima', to_date('20-03-1985', 'dd-mm-yyyy'), 'pedro.lima@example.com', 3, 6500.000); insert into funcionarios (ID, NOME, DATA_NASCIMENTO, EMAIL, CODIGO_CARGO, SALARIO) values (4, 'Mariana Costa', to_date('05-12-1992', 'dd-mm-yyyy'), 'mariana.costa@example.com', 4, 7000.000); insert into funcionarios (ID, NOME, DATA_NASCIMENTO, EMAIL, CODIGO_CARGO, SALARIO) values (5, 'Roberto Alves', to_date('25-07-1988', 'dd-mm-yyyy'), 'roberto.alves@example.com', 5, 3000.000); insert into funcionarios (ID, NOME, DATA_NASCIMENTO, EMAIL, CODIGO_CARGO, SALARIO) values (6, 'Fernanda Santos', to_date('28-09-1983', 'dd-mm-yyyy'), 'fernanda.santos@example.com', 3, 3000.000); insert into funcionarios (ID, NOME, DATA_NASCIMENTO, EMAIL, CODIGO_CARGO, SALARIO) values (7, 'Lucas Oliveira', to_date('15-07-1989', 'dd-mm-yyyy'), 'lucas.oliveira@example.com', 3, 4500.000); insert into funcionarios (ID, NOME, DATA_NASCIMENTO, EMAIL, CODIGO_CARGO, SALARIO) values (8, 'Camila Pereira', to_date('10-04-1985', 'dd-mm-yyyy'), 'camila.pereira@example.com', 3, 1950.000);
Conforme mostra abaixo, estas instruções inserem oito registros na tabela funcionarios
.
ID | NOME | DATA_NASCIMENTO | CODIGO_CARGO | SALARIO | |
---|---|---|---|---|---|
1 | Carlos Silva | 10/05/1980 | carlos.silva@example.com | 1 | 3000,000 |
2 | Ana Souza | 15/08/1990 | ana.souza@example.com | 2 | 2500,000 |
3 | Pedro Lima | 20/03/1985 | pedro.lima@example.com | 3 | 6500,000 |
4 | Mariana Costa | 05/12/1992 | mariana.costa@example.com | 4 | 7000,000 |
5 | Roberto Alves | 25/07/1988 | roberto.alves@example.com | 5 | 3000,000 |
6 | Fernanda Santos | 28/09/1983 | fernanda.santos@example.com | 3 | 3000,000 |
7 | Lucas Oliveira | 15/07/1989 | lucas.oliveira@example.com | 3 | 4500,000 |
8 | Camila Pereira | 10/04/1985 | camila.pereira@example.com | 3 | 1950,000 |
Agora, vamos inserir alguns registros na tabela cargos
. Veja um exemplo:
insert into cargos (CODIGO, DESCRICAO) values (1, 'Analista de Sistemas'); insert into cargos (CODIGO, DESCRICAO) values (2, 'Desenvolvedor'); insert into cargos (CODIGO, DESCRICAO) values (3, 'Gerente de Projetos'); insert into cargos (CODIGO, DESCRICAO) values (4, 'Administrador de Banco de Dados'); insert into cargos (CODIGO, DESCRICAO) values (5, 'Engenheiro de Software');
Conforme mostra abaixo, estas instruções inserem cinco registros na tabela cargos
.
CODIGO | DESCRICAO |
---|---|
1 | Analista de Sistemas |
2 | Desenvolvedor |
3 | Gerente de Projetos |
4 | Administrador de Banco de Dados |
5 | Engenheiro de Software |
Consultando Dados
Consultas Básicas
A instrução SELECT
é usada para consultar dados de uma tabela. Veja um exemplo:
SELECT nome, salario FROM funcionarios;
Conforme mostra abaixo, esta consulta retorna os nomes e salários de todos os funcionários.
NOME | SALARIO |
---|---|
Carlos Silva | 3000,000 |
Ana Souza | 2500,000 |
Pedro Lima | 6500,000 |
Mariana Costa | 7000,000 |
Roberto Alves | 3000,000 |
Fernanda Santos | 3000,000 |
Lucas Oliveira | 4500,000 |
Camila Pereira | 1950,000 |
No exemplo anterior, filtramos apenas as colunas
nome
e salario
. Agora se quisermos exibir todas as colunas da tabela, podemos utilizar o asterisco *
:
SELECT * FROM funcionarios;
Esse comando retornará todos os dados de todas as colunas da tabela funcionarios
.
Principais Conceitos de SQL no Oracle
Cláusula WHERE
A cláusula WHERE
é usada para filtrar registros com base em condições específicas. Veja um exemplo:
SELECT nome, salario FROM funcionarios WHERE salario > 5000;
Conforme podemos ver, esta consulta retorna os nomes e salários dos funcionários cujo salário é superior a 5000.
NOME | SALARIO |
---|---|
Pedro Lima | 6500,000 |
Mariana Costa | 7000,000 |
Cláusula ORDER BY
A cláusula ORDER BY
é usada para ordenar os resultados de uma consulta com base em uma ou mais colunas. Veja um exemplo:
SELECT nome, salario, data_nascimento FROM funcionarios ORDER BY salario DESC, nome ASC;
Como podemos ver, esta consulta retorna os nomes, salários e datas de nascimento dos funcionários, ordenados em ordem decrescente de salário. Em casos onde os salários são iguais, os resultados são então ordenados em ordem crescente de nome.
NOME | SALARIO | DATA_NASCIMENTO |
---|---|---|
Mariana Costa | 7000,000 | 05/12/1992 |
Pedro Lima | 6500,000 | 20/03/1985 |
Lucas Oliveira | 4500,000 | 15/07/1989 |
Carlos Silva | 3000,000 | 10/05/1980 |
Fernanda Santos | 3000,000 | 28/09/1983 |
Roberto Alves | 3000,000 | 25/07/1988 |
Ana Souza | 2500,000 | 15/08/1990 |
Camila Pereira | 1950,000 | 10/04/1985 |
Operações JOIN
Operações JOIN
são usadas para combinar registros de duas ou mais tabelas com base em uma coluna relacionada. Veja um exemplo:
SELECT f.nome, c.descricao AS cargo FROM funcionarios f JOIN cargos c ON f.codigo_cargo = c.codigo;
Conforme mostra a imagem, esta consulta retorna os nomes dos funcionários e os nomes dos cargos correspondentes.
NOME | CARGO |
---|---|
Carlos Silva | Analista de Sistemas |
Ana Souza | Desenvolvedor |
Mariana Costa | Administrador de Banco de Dados |
Roberto Alves | Engenheiro de Software |
Fernanda Santos | Gerente de Projetos |
Lucas Oliveira | Gerente de Projetos |
Camila Pereira | Gerente de Projetos |
Rafaela Lima | Gerente de Projetos |
Gustavo Costa | Gerente de Projetos |
Observação:
- A palavra-chave
AS
é utilizada para renomear uma coluna ou tabela em uma consulta SQL, facilitando a leitura dos resultados. No exemplo,f
é um alias para a tabelafuncionarios
ec
é um alias para a tabelacargos
. Usar aliases pode tornar a consulta mais concisa e melhorar a clareza, especialmente em consultas complexas com várias tabelas. - Sempre é uma boa prática incluir o nome da tabela ou seu alias antes do nome da coluna quando utilizamos
JOINs
. Isso ajuda a evitar erros de coluna ambígua e torna a consulta mais clara.
Funções de Agregação
Funções de agregação como SUM
, AVG
, MIN
, MAX
, e COUNT
são usadas para calcular valores a partir de conjuntos de dados. Veja um exemplo:
SELECT codigo_cargo, AVG(salario) AS media_salarial FROM funcionarios GROUP BY codigo_cargo;
Conforme mostra a imagem, esta consulta retorna a média salarial de cada cargo.
CODIGO_CARGO | MEDIA_SALARIAL |
---|---|
1 | 3000 |
2 | 2500 |
4 | 7000 |
5 | 3000 |
3 | 3987,5 |
Para um guia completo sobre funções de agregação, confira este post.
Subconsultas
Subconsultas são consultas aninhadas dentro de outras consultas. Veja um exemplo:
SELECT nome FROM funcionarios WHERE salario > (SELECT AVG(salario) FROM funcionarios);
Conforme mostra abaixo, esta consulta retorna os nomes dos funcionários cujo salário é maior que a média salarial de todos os funcionários.
NOME |
---|
Pedro Lima |
Mariana Costa |
Lucas Oliveira |
Modificando e Excluindo Dados
Atualizando Registros
Para atualizar dados em uma tabela existente, usa-se a instrução UPDATE
. Veja um exemplo:
UPDATE funcionarios SET salario = 7800 WHERE id = 1;
Conforme mostra abaixo, esta instrução atualiza o salário do funcionário com id = 1
(Carlos Silva).
ID | NOME | DATA_NASCIMENTO | CODIGO_CARGO | SALARIO | |
---|---|---|---|---|---|
1 | Carlos Silva | 10/05/1980 | carlos.silva@example.com | 1 | 7800,000 |
2 | Ana Souza | 15/08/1990 | ana.souza@example.com | 2 | 2500,000 |
3 | Pedro Lima | 20/03/1985 | pedro.lima@example.com | 3 | 6500,000 |
4 | Mariana Costa | 05/12/1992 | mariana.costa@example.com | 4 | 7000,000 |
5 | Roberto Alves | 25/07/1988 | roberto.alves@example.com | 5 | 3000,000 |
6 | Fernanda Santos | 28/09/1983 | fernanda.santos@example.com | 3 | 3000,000 |
7 | Lucas Oliveira | 15/07/1989 | lucas.oliveira@example.com | 3 | 4500,000 |
8 | Camila Pereira | 10/04/1985 | camila.pereira@example.com | 3 | 1950,000 |
Observação:
- Sempre lembre-se de incluir a cláusula
WHERE
para especificar quais registros devem ser atualizados. Se você não usarWHERE
, todos os registros da tabela serão atualizados com o novo valor, o que pode não ser o desejado. No exemplo, estamos atualizando apenas o salário do funcionário comid = 1
. - Após realizar uma atualização (
UPDATE
), inserção (INSERT
), ou exclusão (DELETE
), é necessário usarCOMMIT
para salvar as alterações permanentemente. Se você esquecer de fazer isso, as alterações não serão salvas. - Caso precise desfazer a atualização, inserção ou exclusão, use
ROLLBACK
para reverter as alterações feitas antes do últimoCOMMIT
.
Excluindo Registros
Para remover registros de uma tabela, utiliza-se a instrução DELETE
. Veja um exemplo:
DELETE FROM funcionarios WHERE id = 3;
Conforme mostra abaixo, esta instrução exclui o registro do funcionário com id = 3
, que é Pedro Lima.
ID | NOME | DATA_NASCIMENTO | CODIGO_CARGO | SALARIO | |
---|---|---|---|---|---|
1 | Carlos Silva | 10/05/1980 | carlos.silva@example.com | 1 | 7800,000 |
2 | Ana Souza | 15/08/1990 | ana.souza@example.com | 2 | 2500,000 |
4 | Mariana Costa | 05/12/1992 | mariana.costa@example.com | 4 | 7000,000 |
5 | Roberto Alves | 25/07/1988 | roberto.alves@example.com | 5 | 3000,000 |
6 | Fernanda Santos | 28/09/1983 | fernanda.santos@example.com | 3 | 3000,000 |
7 | Lucas Oliveira | 15/07/1989 | lucas.oliveira@example.com | 3 | 4500,000 |
8 | Camila Pereira | 10/04/1985 | camila.pereira@example.com | 3 | 1950,000 |
Observação:
- Sempre inclua a cláusula
WHERE
para especificar qual registro deve ser excluído. SemWHERE
, todos os registros da tabela serão removidos, o que pode não ser o desejado. - Após realizar a exclusão, use
COMMIT
para salvar a alteração permanentemente. Se esquecer de usarCOMMIT
, as alterações não serão salvas. - Se precisar desfazer a exclusão, utilize
ROLLBACK
para reverter as alterações feitas antes do últimoCOMMIT
.
Modificando Estruturas de Tabelas
Adicionando Colunas
Para modificar a estrutura de uma tabela existente, usa-se a instrução ALTER TABLE
. Veja um exemplo:
ALTER TABLE funcionarios ADD data_admissao DATE;
Conforme mostra abaixo, esta instrução adiciona uma nova coluna data_admissao
à tabela funcionarios
. A coluna será criada no final da tabela e todos os valores serão inicialmente nulos, ou seja, a coluna será criada sem registros.
ID | NOME | DATA_NASCIMENTO | CODIGO_CARGO | SALARIO | DATA_ADMISSAO | |
---|---|---|---|---|---|---|
1 | Carlos Silva | 10/05/1980 | carlos.silva@example.com | 1 | 7800,000 | |
2 | Ana Souza | 15/08/1990 | ana.souza@example.com | 2 | 2500,000 | |
4 | Mariana Costa | 05/12/1992 | mariana.costa@example.com | 4 | 7000,000 | |
5 | Roberto Alves | 25/07/1988 | roberto.alves@example.com | 5 | 3000,000 | |
6 | Fernanda Santos | 28/09/1983 | fernanda.santos@example.com | 3 | 3000,000 | |
7 | Lucas Oliveira | 15/07/1989 | lucas.oliveira@example.com | 3 | 4500,000 | |
8 | Camila Pereira | 10/04/1985 | camila.pereira@example.com | 3 | 1950,000 |
Observação: Caso queira atualizar os valores dessa nova coluna para registros existentes, utilize a instrução
UPDATE
, que já aprendemos anteriormente.
Adicionando Coluna com Valor Padrão e Restrição
ALTER TABLE funcionarios ADD status VARCHAR2(10) DEFAULT 'Ativo' CHECK (status IN ('Ativo', 'Desligado'));
Conforme mostrado abaixo, esta instrução adiciona uma nova coluna status
à tabela funcionarios
. A coluna será criada no final da tabela e todos os valores serão inicialmente ‘Ativo’ devido ao valor padrão especificado. Além disso, um CHECK
constraint é aplicado para garantir que a coluna status
só possa conter os valores ‘Ativo’ ou ‘Desligado’.
ID | NOME | DATA_NASCIMENTO | CODIGO_CARGO | SALARIO | DATA_ADMISSAO | STATUS | |
---|---|---|---|---|---|---|---|
1 | Carlos Silva | 10/05/1980 | carlos.silva@example.com | 1 | 7800,000 | Ativo | |
2 | Ana Souza | 15/08/1990 | ana.souza@example.com | 2 | 2500,000 | Ativo | |
4 | Mariana Costa | 05/12/1992 | mariana.costa@example.com | 4 | 7000,000 | Ativo | |
5 | Roberto Alves | 25/07/1988 | roberto.alves@example.com | 5 | 3000,000 | Ativo | |
6 | Fernanda Santos | 28/09/1983 | fernanda.santos@example.com | 2 | 3000,000 | Ativo | |
7 | Lucas Oliveira | 15/07/1989 | lucas.oliveira@example.com | 2 | 4500,000 | Ativo | |
8 | Camila Pereira | 10/04/1985 | camila.pereira@example.com | 3 | 1950,000 | Ativo |
Observação: Caso queira atualizar os valores dessa nova coluna para registros existentes, utilize a instrução
UPDATE
, que já aprendemos anteriormente.
Excluindo Colunas
Para remover uma coluna de uma tabela existente, usa-se a instrução ALTER TABLE
com a cláusula DROP COLUMN
. Veja um exemplo:
ALTER TABLE funcionarios DROP COLUMN data_admissao;
Esta instrução remove a coluna data_admissao
da tabela funcionarios
.
Observação: Não vamos executar este comando por agora, pois vamos utilizar a tabela com a coluna data_admissao
nos próximos tutoriais. Caso queira rodar este comando para testar, lembre-se de que ele irá remover a coluna e seus dados permanentemente. Se você decidir excluir a coluna, certifique-se de que os dados nela contidos não são mais necessários.
Excluindo Tabelas
Para excluir uma tabela do banco de dados, utiliza-se a instrução DROP TABLE
. Veja um exemplo:
DROP TABLE funcionarios;
Caso queira rodar para ver como funciona, lembre-se de refazer os passos anteriores: recriar a tabela e inserir os registros novamente, conforme necessário, pois vamos utilizar está tabela nos próximos tutoriais.
Considerações Finais
Dominar os fundamentos do Oracle é essencial para qualquer profissional que trabalha com bancos de dados. Este conhecimento proporciona a base necessária para realizar operações de dados eficientes e precisas, facilitando o avanço para técnicas mais avançadas e complexas.
Se você tiver alguma dúvida ou sugestão, deixe um comentário abaixo!