quarta-feira, 18 de fevereiro de 2015

Aula 1 - Certificação 1Z0-051

O domínio sobre a linguagem SQL (Structured Query Language) é o básico que um DBA precisa ter para recuperar informações do Banco de Dados.

O SQL é composto por 5 linguagens: DDL (Data Definition Language), DML (Data Manipulation Language), DQL (Data Query Language), DCL (Data Control Language) e DTL (Data Transaction Language).

Contudo a Oracle entende que a instrução SELECT está no conjunto de instruções DML, e não na DQL, que seria uma linguagem à parte que abordaria somente esta instrução. De fato podemos manipular dados com a instrução SELECT, portanto, para que possamos continuar essa primeira aula, a teoria sobre a linguagem DQL está eliminada.

A cada final de aula farei 3 (três) perguntas relacionadas à aula em questão e, possivelmente, às anteriores.

DML - Linguagem de Manipulação de Dados


Essa linguagem é composta pelas seguintes instruções:

Insert - Instrução usada para inserção de dados em tabelas;
Update - Instrução usada para atualização de dados contidos em tabelas;
Delete - Instrução usada para deletar dados contidos em tabelas;
Select - Instrução usada para recuperar dados contidos em tabelas;
Merge - Instrução usada para comparar e atualizar tabelas, deixando-as idênticas.

Logicamente a instrução mais complexa é a SELECT, pois dispõem de uma variedade de possibilidades para elaboração de consultas, portanto será a primeira a ser estudada.

Os recursos possíveis usando uma instrução SELECT são:

Projeção - retorna algumas ou todas as colunas, conforme a necessidade.

Seleção - retorna apenas as linhas(ou tuplas) que você queira.

Join - retorna dados armazenados em tabelas distintas.



Instrução SELECT simples

  SELECT coluna(s) FROM tabela;

O SELECT identifica as colunas que devem ser retornadas, enquanto o FROM identifica qual tabela você deseja que o Oracle consulte.

Você pode suprimir duplicação usando a cláusula DISTINCT ou seu sinônimo UNIQUE:

  SELECT DISTINCT coluna(s) FROM tabela;

ou

 SELECT UNIQUE coluna(s) FROM tabela;

ou mandar o Oracle retornar todas as colunas da tabela usando a seguinte instrução:

  SELECT * FROM tabela;

Tente realizar a seguinte consulta em seu BD Oracle:

  SELECT * FROM departments;



Obs.: 
1- As instruções SQL não são sensitive case, ou seja, não fazem diferenciação entre palavras maiúsculas ou minúsculas; 
2 - No programa SQL Developer, o ponto e vírgula(;), ao final das instruções, é opcional; 
3 - É possível pressionar F9 para mostrar o resultado em Grid (Query Result) ou F5 para mostrar em Script (Script Output).


Expressões e operadores

Podemos utilizar operadores aritméticos em instruções SQL, como Adição(+), Subtração(-), Multiplicação(*) e Divisão(/).

É muito comum precisarmos prever como seria um determinado resultado usando operações aritméticas em campos numéricos ou mesmo utilizar esses operadores em outras instruções DML, como INSERT e UPDATE.

Por exemplo, façamos a seguinte consulta no banco para recuperar as informações de salário e sobrenome de todos os funcionários e também uma coluna mostrando seu salário com uma subtração provinda de impostos que totalizam 20% do salário base:

 SELECT last_name, salary, salary*0.8 FROM employees;

ou

 SELECT last_name, salary, salary/100*80 FROM employees;

como preferir.



Observe que essa nova coluna não pertence à tabela de forma alguma, ela é uma coluna temporária criada para mostrar um resultado de alguma operação casual.

Agora, por sua conta, mostre a diferença entre o salário antigo e o novo salário com os descontos.

O resultado deve ser este:


A precedência dos operadores aritméticos em instruções SQL têm as mesmas regras da matemática, divisão e multiplicação vêm primeiro, seguidas da adição e subtração, sempre sendo resolvidas da esquerda para a direita, mas podem sofrer mudança de ordem quando são adicionados parênteses à consulta.

 SELECT last_name, 1.5 * salary + 500  FROM employees; 

é diferente de 

 SELECT last_name, 1.5 * (salary + 500)  FROM employees; 

Devemos tomar cuidado com operações aritméticas quando há a possibilidade de encontrarmos registros NULOS. Nulo não é a mesma coisa que 0 ou espaço em branco. Nulo é simplesmente Nulo para o banco, um valor indisponível, não aplicável. Quando retornado de consulta que contenha operador aritmético o resultado será NULO também.

Faça o teste com os atributos SALARY e COMMISSION_PCT do nosso esquema de testes HR. Todos os registros que tiverem comissão Nula retornará um valor literal NULL como resultado.

 SELECT last_name, salary, commission_pct, salary+commission_pct FROM employees;


Nomeando uma Coluna

Muitas vezes nos deparamos com nomenclaturas padronizadas que não fazem muito sentido para outrem que não esteja familiarizado com a categorização interna de nomeação de esquemas e tabelas no Banco de Dados. Visando este cenário, ou apenas a possibilidade do próprio DBA ter mais facilidade em distinguir os campos de sua consulta, há possibilidade de nomear qualquer coluna em uma consulta realizada naquele momento. Logicamente essa nomeação é temporária e não afeta o nome original dos campos.

A sintaxe é simples:

 SELECT last_name AS nome FROM employees;

ou sem a palavra opcional 'AS'

 SELECT last_name nome FROM employees;

ou então entre aspas duplas

 SELECT last_name "nome" FROM employees;

Utilizamos aspas duplas quando queremos que apareça na coluna exatamente aquilo que escrevemos, por exemplo:

 SELECT last_name "É o $nome$ do #Empregado#" FROM employees;


Operador de Concatenação

A concatenação é realizada utilizando duas barras verticais entre as colunas, resultando em uma expressão de caractere:

  SELECT last_name || department_id concatenando FROM employees;

As colunas são combinadas para criar uma única saída no visualizador. Podemos utilizar a palavra-chave AS antes do nome 'concatenando' para facilitar a leitura da instrução SELECT, mas isso é opcional.

Quando uma coluna tem possíveis campos NULOS o resultado são apenas as colunas que possuem dados. A concatenação não resulta erros, apenas ignora o valor nulo e mostra os valores recuperados na instrução.

Podemos facilitar a leitura de certos resultados vindos do banco acrescentando literais de caractere à nossa instrução. Fazemos isso incrementando a nossa instrução DML com palavras entre aspas simples, apenas os literais de números não precisam de aspas. Lembre-se que cada linha retornada terá esse literal acrescentado na visualização.

  SELECT last_name || ' trabalha no departamento ' || department_id "Empregado" FROM employees;

Caso seja necessário utilizar aspas simples como literal de caractere, podemos usar o operador de cotação (q) para este fim. A sintaxe é simples e pode ser seguido de qualquer delimitador mais conveniente para o momento ou então utilizar pares de caractere como ( ), [ ], < >, etc, para facilitar o entendimento.  

  SELECT last_name || q'( é o sobre'nome de )' || first_name "Empregado" FROM employees;


Comando DESCRIBE

Há momentos que necessitamos saber qual é a estrutura de uma tabela, view ou mesmo um sinônimo existente no banco e, obviamente, que possuamos acesso. Para isto, usamos o comando DESCRIBE ou DESC.

 DESC employees;

ou

 DESCRIBE employees;

Ambos funcionam no SQL Developer da mesma forma e resultam em algo assim:




QUESTIONÁRIO

1- Virou o ano e todos os funcionários devem receber um aumento de dissídio equivalente a 6% sobre seus respectivos salários. Traga em sua instrução as colunas LAST_NAME, SALARY e o resultado do aumento. Nomeie a última coluna para Salário Atualizado, respeitando as letras maiúsculas e as minúsculas.

2- Descreva a estrutura da tabela DEPARTMENT e depois traga todos os números de departamentos da tabela EMPLOYEES, sem repetí-los. Traga cada resultado com a seguinte definição: Department's ID xx, onde xx é o número do departamento. Nomeie a coluna para Número do Departamento.

3- Recupere todos os dados da tabela EMPLOYEES separando-os por vírgula (,) numa mesma coluna e a renomeie esta coluna para TODAS AS INFORMAÇÕES DO EMPREGADO.


***Respostas na Próxima Aula***

Curso básico Oracle - Certificação 1Z0-051 (Introduction to SQL)

Primeiramente, obrigado por acessar o meu blog.

Meu nome é Douglas, sou Analista de Geomática em uma empresa de Planejamento Metropolitano aqui de São Paulo. Recentemente passei a trabalhar diretamente com Oracle 11g Spatial e programação de sistemas geoespaciais.

Estou estudando para a certificação 1Z0-051 e resolvi transcrever todas as minhas aulas em meu blog para ajudar outras pessoas, que também almejam essa certificação, e a mim mesmo, pois quando se ensina realmente se aprende.

Para acompanhar as aulas será necessário ter em seu computador uma máquina virtual com Oracle 11g e SQL Developer instalados.

1- Prepare uma máquina virtual utilizando Oracle VM VirtualBox ou Virtualização da VMware.

2- Baixe e instale o pacote Oracle Database 11g Release 2.

3- Instale também o SQL Developer e suas dependências, pois será por ele que definiremos a estrutura e manipularemos os dados do BD Oracle.

4- Crie uma conexão com o SYSTEM para poder desbloquear o usuário HR, o qual será nosso esquema de estudo para essa primeira certificação.

5- Utilize essa instrução SQL para desbloquear o esquema HR: ALTER USER HR IDENTIFIED BY password ACCOUNT UNLOCK;

Estou considerando que você, querido leitor, já tenha conhecimentos básicos de SQL ou pelo menos algum conhecimento em informática para ter chegado até esse ponto.

Finalmente a tela que deverá estar aparecendo é a seguinte:


Iremos agora para a primeira aula conceitual sobre a linguagem SQL.