Arquivos Mensais: fevereiro \27\UTC 2018

Banco de Dados II – Aula 02

LINHAS DUPLICADAS

  • Geralmente, o problema de linhas duplicadas (ou valores duplicados) no retorno da instrução SELECT deve-se à má modelagem de dados;
  • O ideal seria que não existissem valores duplicados em tabelas;
  • Podemos utilizar o commando DISTINCT para fazer a distinção desses valores;
  • Utilizamos quando temos valores repetidos entre as tuplas;
  • Não se coloca geralmente a chave primária na cláusula SELECT;
  • O DISTINCT é aplicado para todas as colunas na cláusula SELECT;
  • SINTAXE:
SELECT   DISTINC [NOME_COLUNA]
FROM   [NOME_TABELA]
  • EXEMPLO:
SELECT   DISTINCT DEPARTMENT_ID
FROM     employees

SELECT   DISTINCT DEPARTMENT_ID,   JOB_ID
FROM     employees
  • Aconselhado utilizar somente para análise de dados;
  • É um comando que consome muito processamento;
  • O uso intensivo pode causar degradação do processador;

RESTRINGINDO E CLASSIFICANDO DADOS

A CLÁUSULA WHERE SERVE PARA:

  • Limitar linhas recuperadas de uma consulta;
  • Aconselhado sempre utilizar o que for possível para se fazer os filtros de retorno de linhas;
  • É especificado após a cláusula FROM;
  • Suporta comparer colunas, literais, variáveis, expressões aritméticas ou funções;
  • É necessário ter: o nome_da_coluna, condição_de_comparação; Nome_da_coluna, constant ou lista de valores;
  • É opcional na SELECT, porém aconselhável utilizar;
  • Caso não seja utilizada, é tornado todas as linhas da tabela, podendo causar grande lentidão no retorno de dados;
  • EXEMPLO:
  • SELECT  * FROM  employees (será retornado todas linhas da tabela employees)
  • EXEMPLO:
  • SELECT  *FROM  employeesWHERE  department_id = 60;(será retornado somente as linhas que contém o department_id = 60)

CONDIÇÕES DE COMPARAÇÃO

  • Servem para fazer comparações de valores dentro da cláusula WHERE;
  • Os possíveis operadores que podem ser utilizados: =, >, =, <=, ou !=, BETWEEN AND, IN, LIKE, IS NULL
  • SINTAXE:Geralmente é utilizado:… WHERE [campo] [operador] [valor];
  • Podendo ser também:… WHERE [valor] [operador] [campo]; ou… WHERE [valor] [operador] [valor]; ou… WHERE [campo] [operador] [campo]; etc
  • EXEMPLOS:… WHERE job_id = ‘AD_VP’… WHERE1000 >= salary;… WHERE department_id != 80;… WHERE hire_date  < ’17-jun-03’;
  • BETWEEN
    • Serve para retornar linhas entre faixas de valores;
    • Os dados podem ser do tipo, numérico, data e caracteres;
    • Substitui as comparações “>= AND <=“
    • EXEMPLO:…WHERE employee_idBETWEEN 1 AND 200;seria o mesmo que:…WHERE employee_id >= 1AND employee_id <= 200;
    • EXEMPLO:…WHERE hire_date BETWEEN’15-JAN-03’ AND ’30-JAN-03’;… WHERE last_name BETWEEN‘A’ AND ‘E’;
  • CONDIÇÃO IN
    • Retorna os valores que estão dentro da lista do IN;
    • Pode ser usado por qualquer tipo de dado;
    • Substitui os comandos [CAMPO1] = [VALOR1] OR [CAMPO1] = [VALOR2] OR …;
    • EXEMPLO:SELECT  first_name, last_nameFROM   employeesWHERE   first_name IN (‘Steven’,’Neena’);
    • EXEMPLO:SELECT  first_name, last_name, employee_idFROM   employeesWHERE   employee_id IN (1, 100, 200, 300);
  • A CONDIÇÃO LIKE:
    • Serve para retornar linhas que sejam parecidas (fazendo parte) com a string desejada;
    • Geralmente usado quando não sabemos exatamente o que estamos procurando, mas sabemos pelo menos parte da string;
    • Possui 2 símbolos (coringas) que geralmente são utilizados em conjunto com o LIKE:
    • % –> representado por zero ou mais caracteres;
    • _ –> representado por um character;
    • Quando queremos procurar uma string que contenha um dos símbolos coringa, temos que utilizar a opção ESCAPE;
    • EXEMPLO:SELECT  first_name, last_nameFROM  employeesWHERE  first_name LIKE ‘A%’(retorna todos os first_name iniciados com A)
    • EXEMPLO:SELECT  first_name, last_nameFROM  employeesWHERE  last_name LIKE ‘%a’(retorna todos os last_name terminados com A)
    • EXEMPLO:SELECT  first_name, last_nameFROM  employeesWHERE  last_name LIKE ‘%th%’(retorna todos os last_name que tenham “th” em qualquer parte da string)
    • EXEMPLO:SELECT  first_name, last_nameFROM  employeesWHERE  first_name LIKE ‘_t%’(retorna todos os first_name que tenham qualquer character na primeira posição da string, contenham “t” na segunda posição da string e que terminem com qualquer caracter)
    • EXEMPLO:SELECT  first_name, last_name, job_idFROM  employeesWHERE  job_id LIKE ‘IT\_%’ ESCAPE ‘\’;(retorna todos os job_id tenham IT_ no inicio e terminem com qualquer/quaisquer character(es). O _ após o símbolo \ está sendo interpretado como um character comum, e não um character coringa)
  • CONDIÇÕES NULL
    • Não é possível utilizar = ou para se comparar NULL;
    • Utiliza-se IS NULL ou IS NOT NULL;
    • EXEMPLO:… WHERE commission_pct IS NOT NULL;… WHERE hire_date IS NULL;… WHERE phone_number IS NOT NULL;

OPERADORES LÓGICOS E REGRAS DE PRECEDÊNCIA

OPERADORES LÓGICOS

  • Combina duas ou mais condições na cláusula WHERE;
  • O retorno da SELECT será sempre o resultado verdadeiro;
  • São eles: AND, NOT e OR;

OPERADOR AND

  • Significa E;
  • Retornará linhas na SELECT se todas as condições forem verdadeiras;
  • Uma única condição falsa invalída esse operador;
  • EXEMPLO DE ANDSELECT   *FROM   employeesWHERE   salary >= 5000AND job_id = ‘AC_ACCOUNT’;

OPERADOR OR

  • Significa OU;
  • Retornará linhas na SELECT se todas ao menus uma condição for verdadeiras;
  • Uma única condição falsa talvez não invalíde esse operador;
  • EXEMPLO DE ANDSELECT   *FROM   employeesWHERE   salary >= 5000OR job_id = ‘AC_ACCOUNT’;

OPERADOR NOT

  • Significa NÃO;
  • Utiliza em conjunto com as condições de comparação BETWEEN, LIKE, IS NULL e IN;
  • O operador irá retornar o que NÃO for atendido pela condição dada na SELECT;
  • Pode ser interpretado como: o que não estiver em (IN), o que não estiver entre (BETWEEN), o que não for como (LIKE);
  • EXEMPLO DE NOTSELECT   *FROM   employeesWHERE   first_name NOT LIKE ‘Bruce’;SELECT   *FROM   employeesWHERE   job_id NOT IN   (‘IT_PROG’,’AD_VP’,’FI_ACCOUNT’);
  • EXEMPLO DE NOTSELECT   *FROM   employeesWHERE   salary NOT BETWEEN5000 AND 20000;
  • EXEMPLO DE NOTSELECT   *FROM   employeesWHERE   NOT salary  > 10000;

ORDEM DE PRECEDÊNCIA DE OPERADORES

  • Obedecem a sequencia na instrução SELECT que será resolvida as expressões;
  • Pode ser sobreposta a ordem com parenteses;
  • As expressões são resolvidas da esquerda para a direita;

ScreenHunter_316 Feb. 26 00.02

  • EXEMPLO DE ORDEM DE PRECEDÊNCIA:
  • SELECT   *FROM   employeesWHERE   salary  > 5000AND job_id = ‘IT_PROG’;
  • SELECT   *FROM   employeesWHERE   job_id = ‘IT_PROG’OR job_id = ‘SA_MAN’;
  • SELECT   *FROM   employeesWHERE   first_name = ‘Bruce’OR manager_id = 100AND job_id = ‘SA_MAN’;

CLÁUSULA ORDER BY

  • Serve para ordenar as linhas recuperadas;
  • O padrão é ordem crescente (ascendente);
  • A ordenação é a última cláusula de uma SELECT a ser executada;
  • Podem ser usados ASC (opcional), pois é o padrão, ou DESC (descendente) em conjunto com a cláusula ORDER BY;
  • Pode ser utilizado para ser ordenado mais de uma coluna, inclusive de diferente ordens na mesma instrução;
  • EXEMPLOS DE ORDER BY
  • SELECT   first_name,last_name,job_idFROM   employeesORDER BY   first_name;
  • SELECT   first_name,last_name,job_idFROM   employeesORDER BY   last_name DESC;
  • SELECT   first_name,last_name,job_idFROM   employeesORDER BY   first_name ASC,last_name DESC;

Vídeo 01

Video 02

Anúncios

Banco de Dados II – Aula 01

REVISÃO DE INSTRUÇÕES BÁSICAS DO COMANDO SELECT

SELECT POSSUI 3 RECURSOS BASICAMENTE:

  • PROJEÇÃO: Escolha das colunas que serão retornadas;
  • SELEÇÃO: Limitação de linhas que irão ser retornados;
  • JOIN: Junção entre tabelas de acordo com o modelo relacional;

SELECT BÁSICO PARA O ORACLE:

SELECT [NOME_DA_COLUNA]
FROM   [NOME_DA_TABELA]

(Obrigatório ter uma tabela para retorno)

INSTRUÇÕES BÁSICAS DO COMANDO SELECT

  • Ao utilizar o caracter “*” após o comando SELECT, será retornado todas as colunas da tabela;
  • Caso esteja utilizando JOIN, será retornado todas as colunas de todas as tabelas;

SELECIONANDO COLUNAS ESPECÍFICAS

  • Necessário declarar dentro do SELECT
SELECT [NOME_COL1], [NOME_COL2], …
FROM   [NOME_TABELA];

INSTRUÇÕES SELECT

  • NÃO SÃO CASE-SENSITIVE;
  • Os dados SÃO CASE-SENSITIVE;
  • Podem ocupar uma ou mais linhas;
  • Para melhor indentação, as cláusulas são colocadas em linhas diferentes;
  • Para o iSQL-Plus, o terminador é “;” (opcional) para um único comando;
  • Para o SQL-Plus, o terminador é “;” (obrigatório)

FORMATAÇÃO SUGESTIVA

SELECT   [NOME_COL1],
         [NOME_COL2],
         [NOME_COL3], …
FROM     [NOME_TABELA]
WHERE    [CONDIÇÃO1]
         AND  [CONDIÇÃO2]
         OR  [CONDIÇÃO3];

EXPRESSÕES ARITMÉTICAS

  • Podemos utilizar os operadores aritméticos dentro da instrução SELECT, basicamente para manipular dados do tipo numéricos e datas;
  • Basicamente são:
    • + –>  soma
    • – –> subtração
    • * –> multiplicação
    • / –> divisão
  • Utilizado para modificar (em uma SELECT, somente em visualização) os dados no retorno de uma SELECT;
  • Podem ser utilizadas na cláusula SELECT, WHERE, ORDER BY, GROUP BY (EXCETO na cláusula FROM)EXEMPLO DE UTILIZAÇÃO
SELECT   first_name,
         salary,
         salary + 300                    --> CAMPO VIRTUAL
FROM     employees;

ORDEM DOS OPERADORES

  • Caso ocorra de uma expressão aritmética conter vários operadores, a ordem é seguida pela regra matemática;
    • * e / –> primeira procedência;
    • + e – –> segunda procedência;
    • Operadores com a mesma prioridade, a operação é resolvida da esquerda para a direita;
    • Pode-se inverter a prioridade dos operadores utilizando os simbolos parênteses “(” e “)”;
    • EXEMPLOS
      10 + 300 / 50 = 16
      (10 + 300) / 50 = 6,2
      200 + 300 / 5 *4 = 440
      (200 + 300) / 5 * 4 = 400

 VALORES NULOS

  • É diferente do valor 0 (zero);
  • É diferente de “ ” (espaço em branco);
  • É a ausência total de um dado;
  • Não conseguimos fazer operações (soma, multiplicação, divisão) com valores nulos;
  • Qualquer tipo de dado pode ser nulo;
  • É possível impeder valores nulos com CONSTRAINTS (restrições);
  • As CONSTRAINTS são PRIMARY KEY e NOT NULL;
  • O ideal seria que não existisse valores nulos em nenhum campo, porém maioria das regras de negócio impedem essa teoria;
  • A utilização de campos com valores nulos em expressões aritméticas resultará em nulo;
  • Mesmo em tipos de variáveis booleanas, o nulo não pode ser comparado, ou seja, um valor nulo é diferente de TRUE e FALSE;

ALIAS

    • É um apelido que podemos dar para uma coluna, ou seja, renomeamos em tempo de execução os nomes de colunas para melhor serem apresentados ao usuário;
    • Utilizado geralmente em colunas que contém cálculo;
    • O ALIAS NÃO altera o nome real da coluna que está na tabela;
    • Coloca-se o ALIAS depois do nome da coluna e antes da virgula (que separa colunas na cláusula SELECT), opcionalmente com a palavra “AS”;
    • Em caso do alias precisar utilizer espaço em branco ou caracteres especiais (“#” ou “$”), é necessário colocar entre aspas duplas (“ ”);
    • EXEMPLO:
      SELECT  first_name AS Nome,
      salary * 12 "Salario Anual",   --> CONTÉM UM ESPAÇO NO TEXTO ENTRE ASPAS
      last_name as “sobre#nome”
      FROM   employees;

CONCATENAÇÃO

  • Serve para fazer a junção de colunas com outras colunas, e/ou variáveis, e/ou constantes;
  • É criado uma coluna virtual, que o retorno será uma string, resultando uma única coluna;
  • Concatentando uma string com nulo, o resultado será somente a string;
  • Utilize os caracteres PIPE “||” entre as colunas ou os valores que se deseja concatenar;
  • Pode-se concatenar campos com diferentes tipos (aconselhado fazer cast de dados para string);
  • EXEMPLO:
SELECT  first_name || ' ' || last_name
        AS NOME_COMPLETO
FROM    employees;

STRING / LITERAIS

  • É um campo de qualquer tipo (número, string, data) concatenado com uma string de uma SELECT;
  • Campos do tipo caractere ou data é necessário utilizar aspas simples;
  • Cada string de caractere é retornada em todas as linhas retornadas da SELECT;

DELIMITADORES

      • Quando queremos mostrar um character de comando dentro de uma string, utilizamos o delimitadores; Por exemplo, o caracter ” ‘ ” (aspas simples);
      • Para isso, utilizamos o (q), e um delimitador podendo ser [ ], , { }, (), etc.
      • EXEMPLO:
        SELECT first_name || ' tem o código da função ' || job_id
        FROM   employees;
        
        SELECT first_name || ' tem o código da função ' || job_id     
               as "Concatenação de string"
        • EXEMPLO COM QUOTA:
    SELECT job_id || q'['s]'
    FROM   employees;
    
    SELECT job_id || q'['s é a funcao de ]' || first_name
    FROM   employees;
    
  • Exercícios – Funções com Strings

    Utilize o schema HR do banco de dados Oracle 11g XE

    Exercícios – Funções com Strings
    Utilize o schema HR do banco de dados Oracle 11g XE

    1. Selecione o nome e sobrenome dos funcionários em um único campo chamado nome completo, o email todo em minusculo com a extensão @orcl.com.br chamado email_corporativo de todos os funcionários que estejam entre a letra A e M, considerando a primeira letra do nome, por ordem do nome completo;

    2. Selecione o sobrenome dos funcionários, a quantidade de caracteres do sobrenome, que a quantidade de caracteres do sobrenome esteja entre 3 a 6;

    3. Selecione o nome dos funcionários, o email do funcionário em minusculo, o salário do funcionário, a qual a primeia letra do email seja “a” e que tenha mais de 3 caracreres o email;

    4. Selecione o nome, o job_id e o salário de todos os funcionários que tenha o job_id st_man e st_clerk, mostrando a seguinte frase exemplo:Daniel, que tem a função de Fi_Account, tem o salário de $9.000,00, colocando um apelido mais amigável para esta coluna;

    5. Selecione o nome e sobrenome dos funcionários (em um único campo), a data de admissão adicionada mais 1 ano colocando um apelido de férias_previstas, mostrando a seguinte frase: Michael Rogers tem a previsão de férias programadas para 12/12/2008;

 

Vídeo1

Video 2

Video 3

learningdatabase.com.br

Tecnologias em Banco de Dados Relacionais, Modelagem de dados dimencionais, tecnologias SQL Servere e Oracle

Aprendendo Programação

Algorítmos, C, C++,Pascal, Python, R

WikiDBA

by Virendra Yaduvanshi - Microsoft SQL Server Database Architect | Consultant | Blogger | Specialist | DBA | Speaker

Blog - Fabiano Neves Amorim

SELECT * FROM [Coisas Da Minha Cabeça] WHERE dbo.fn_TempoParaPost() < dbo.fn_TempoLivre()

Tércio Costa, Oracle Developer, OCE SQL, ACE Associate

Guia de estudos para certificação ORACLE SQL(1Z0-047, 1Z0-051, 1Z0-061 e 1Z0-071) e PL/SQL(1Z0-144, 1Z0-146 e 1Z0-148)

Strate SQL

Data Adventures with an Architect