Usando Apelido de Colunas

Há situações que podemos apelidar colunas apenas para melhorar a descrição da coluna, outras vezes é necessário criar apelido de coluna na criação de view para uma expressão ou subconsulta.

Para colocar um apelido em uma coluna usamos opcionalmente a palavra reservada AS, ou apenas um espaço em branco após a coluna e então definimos o apelido.

Veremos algumas todas essas situações em exemplos:

-- Primeiro criamos a tabela de teste contendo as colunas teste_id, nome_completo e obs_user.
CREATE TABLE TESTE
(   TESTE_ID INT,
    NOME_COMPLETO VARCHAR2(100),
    OBS_USER VARCHAR2(80)
);
-- A consulta abaixo apelida todas as colunas, a primeira coluna TESTE_ID foi apelidada de ID.
SELECT TESTE_ID AS ID,
NOME_COMPLETO AS NOME,
OBS_USER OBSERVACAO /*Não usou AS, apenas um espaço entre a coluna e o apelido*/
FROM TESTE;

Esses apelidos são opcionais e usados apenas para melhorar a descrição das colunas. Vejamos exemplos de apelidos que são obrigatórios ao criar uma view quando temos uma expressão de cálculo ou concatenação ou uma subconsulta, todas esses tipos de colunas são obrigatórios a criação de um apelido:

Criando View

A view foi criada e o caractere curinga representa todas colunas da tabela(s) usada(s), a view pega o nome padrão das tabelas, mas se usarmos uma coluna personalizada como um cálculo, uma concatenação ou uma subconsulta teremos que colocar um apelido se não a view não será criada!

Erro ao criar a view pois não deu apelido para a coluna de cálculo

A view dá um erro ao tentar criar pois devemos colocar um nome para a coluna de cálculo, ex:

Dessa forma a view foi criada com sucesso, outra forma de fazer:

Outra forma de apelidar a coluna

A regra de definir um apelido de coluna é a mesma caso usássemos uma expressão de concatenação ou subconsulta.

Usando Declaração SQL SELECT

Vamos ver um exemplo simples. Um comando SQL válido para criar uma tabela na qual você pode armazenar essas informações pode ter esta aparência:

CREATE TABLE SHIPS
(SHIP_ID   NUMBER,
SHIP_NAME  VARCHAR2(20),
CAPACITY   NUMBER,
LENGTH     NUMBER);

Eu digo que “pode” se parecer com isso, porque há várias opções que você pode incluir aqui, incluindo declarações de chave primária ou estrangeira, filtragem de dados, atribuição de armazenamento e outras opções que vão além deste exemplo simples.. Mas esse exemplo de código funciona em um banco de dados Oracle SQL. Em seguida, aqui está um comando SQL para adicionar um registro de amostra a esta tabela:

INSERT INTO SHIPS (SHIP_ID, SHIP_NAME, CAPACITY, LENGTH) VALUES (1,'Codd Crystal', 2052, 855);

Novamente, este é um comando válido, embora uma versão simplificada. Ele insere um registro de informações sobre um navio na nova tabela SHIPS. Por fim, vamos criar um comando SQL para exibir o conteúdo da tabela SQL recém-preenchida.

SELECT SHIP_NAME, CAPACITY, LENGTH
FROM SHIPS;

Se tudo deu certo, você deve obter uma tela que se parece com a tela da Figura abaixo:

SHIP_NAME    CAPACITY LENGTH
____________ ________ ______
Codd Crystal 2052     855

1 ROWS SELECT

Como você pode ver, os dados são armazenados na tabela e ainda estão lá. SELECT apenas exibe os dados; isso não altera os dados. No nível mais simples, é disso que se trata o SQL: escrever instruções para criar objetos de banco de dados e depois trabalhar com esses objetos para armazenar e recuperar dados. A instrução SELECT é uma poderosa instrução SQL que pode ser usada para consultar dados de uma ou mais tabelas em uma única instrução.

Uma única instrução SELECT pode ser usada para transformar dados, agregar dados, juntar várias tabelas, filtrar dados indesejados e muito mais. O restante deste BLOG analisa detalhadamente uma variedade de instruções SQL que pertencem ao exame de certificação.

Usando operador de concatenação, cadeias de caracteres literais, operador de citação alternativo e a palavra-chave DISTINCT.

Concatenação:

O operador de concatenação é os dois PIPES ||. Exemplo:

select 'a'||'b'||'c' as abc_concatenado from dual;

Para concatenar também podemos usar a função CONCAT, mas só dois parâmetros podem ser passados, exemplo:

select concat('a','b','c') as abc_concatenado
from dual;
--ORA-00909: invalid number of arguments

Veja no exemplo acima a tentativa de usar três parâmetros e deu erro, pois a função permite apenas dois parâmetros, exemplo:

select concat('a','b') as abc_concatenado
from dual;
Resultado: ab

Para conseguir concatenar abc usando o CONCAT temos que aninhar a função dentro da outra, exemplo:

select concat(concat('a','b'),'c') as abc_concatenado
from dual;

Cadeia de caracteres literais:

Os caracteres literais são os que estão entre aspas simples, podemos ter como valor de uma coluna ou até mesmo o nome da coluna como caracteres literais, respeitando sempre a regra de criação de nomes de objetos em banco de dados.

select 'Renan' as nome
from dual;
Resultado: Renan

O retorno da consulta simples acima é o caracter literal Renan que foi definido entre aspas simples, vamos ver uma coluna nomeada por caractere literal:

select dummy as "Teste"
from dual;

Acima temos o exemplo da coluna padrão DUMMY sendo nomeada de Teste, todos os nomes de colunas retornam em maiúsculas mas ao usar aspas simples podemos alterar o padrão, todas as regras de nomeação de objeto de banco de dados podem ser quebradas exceto limite de 30 caracteres ao usarmos aspas duplas, veja um exemplo:

select dummy as @teste
from dual;

Esta consulta acima retorna um erro pois fere a regra de nomeação de objetos do banco de dados, mas ao usarmos o caractere literal entre aspas simples daí podemos quebrar essa regra:

select dummy as "@teste"
from dual;

Dessa forma acima a coluna retorna nomeada de @teste.

Operador de citação alternativo

Muitas instruções SQL usam literais de caracteres em expressões ou condições. Se o literal em si contiver aspas simples, você poderá usar o operador quote (q) e escolher seu próprio delimitador de aspas. Você pode escolher qualquer delimitador conveniente, byte único ou multibyte ou qualquer um dos seguintes pares de caracteres: [], {}, () ou <>.

SELECT q''All the President's men''  
FROM DUAL
Resultado: All the President's men
SELECT q'#All the President's men#' 
FROM DUAL
Resultado: All the President's men

Não pode usar espaço, exemplo abaixo:

SELECT q' All the President's men '  
FROM  DUAL
Resultado: erro

Identificadores não podem começar com nenhum caractere ASCII que não seja letras e números. $ # _ também são permitidos após o primeiro
caractere. Identificadores entre aspas duplas podem conter
qualquer caractere que não seja uma citação dupla. Citações alternativas (q ‘# … #’) não pode usar espaços, tabulações ou retornos de carro como delimitadores.

O mecanismo Q reconhece <> como um par. Os exemplos abaixo funcionam:

select q'>teste's>' from dual;
Resultado: teste's
SELECT q'[Teste ' single quotation ]' as quote FROM DUAL;
Resultado: Teste ' single quotation 

Pode haver qualquer caractere entre aspas, como por exemplo o caractere A:

SELECT q'A tete'testeA' FROM DUAL;
Resultado: tete'teste
SELECT Q'.top's.' FROM  DUAL
Resultado: top's

Distinct

A cláusula distinct tem como a função eliminar resultados duplicados, o exemplo abaixa cria uma tabela depois insere vários valores e faz duas consultas, a primeira retorna todos os dados que foram inseridos e a segunda consulta usando distinct elimina os valores duplicados inclusive os valores ” e NULL se tornam uma linha, ou seja, NULL ou caractere vazio representam a mesma coisa e na coluna RESULTADO2 o NULL é representado por traço “-“.

Caso o distinct seja aplicado a várias colunas ele vai eliminar apenas quando todas as colunas tiverem o mesmo valor, transformando as linhas duplicadas em apenas uma linha. Exemplo:

select distinct colunaA, colunaB from tabela;

Usando expressões aritméticas e valores NULL na instrução SELECT

Você pode usar um operador aritmético com um ou dois argumentos para negar, adicionar, subtrair, multiplicar e dividir valores numéricos. Alguns desses operadores também são usados na aritmética de data e hora. Os argumentos para o operador devem ser resolvidos para tipos de dados numéricos ou para qualquer tipo de dados que possa ser implicitamente convertido em um tipo de dados numérico.

Operadores aritméticos unários retornam o mesmo tipo de dados que o tipo de dados numérico do argumento. Para operadores aritméticos binários, o Oracle determina o argumento com a precedência numérica mais alta, converte implicitamente os argumentos restantes nesse tipo de dados e retorna esse tipo de dados. A Tabela 4-2 lista operadores aritméticos.

select - (-1) from dual;
Resultado: 1
OperadorObjetivoExemplo
+ –Quando estes denotam uma expressão positiva ou negativa, são operadores unários.SELECT * FROM order_items WHERE quantity = -1; SELECT * FROM employees WHERE -salary < 0;
+ –Quando adicionam ou subtraem, são operadores binários. SELECT hire_date FROM employees WHERE SYSDATE - hire_date > 365;
* /Multiplique, divida. Estes são operadores binários. UPDATE employees SET salary = salary * 1.1;

Operações com valores NULL

Ao realizar operações com valores NULL o resultado sempre será NULL. Para isso não ocorrer faça o tratamento de dados caso NULL seja indesejado:

SELECT NVL(NULL,0) FIRST_ANSWER,
14+NULL-4 SECOND_ANSWER,
14+NVL(NULL,0)-4 THIRD_ANSWER 
FROM DUAL;
Resultado:
FIRST_ANSWER = O
SECOND_ANSWER = NULL
THIRD_ANSWER = 10

Ordenação com valores NULL

Ao usar o UNION ele ordena a primeira coluna e o resultado da consulta abaixo:

select 2 from dual
union
select null from dual
union
select 1 from dual
Resultado: 1,2,NULL

O NULL vem por último, caso deseje que retorne primeiro deverá usar NULLS FIRST, exemplo:

select 2 from dual
union all
select null from dual
union all
select 1 from dual
order by 1 nulls first
Resultado: NULL,1,2