Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #93708
    tidinas
    Participante

      Olá senhores (há senhoras?)! rss

      Estou com uma dúvida basica sobre os operadores lógicos AND e OR, quando utilizados por mais de três vezes na mesma sentença. Entendam a minha dúvida observando o comando abaixo:

      SELECT LAST_NAME, SALARY, DEPARTMENT_ID
      FROM EMPLOYEES
      WHERE DEPARTMENT_ID<50 OR SALARY>5000 AND LAST_NAME = ‘Popp’;

      O que eu achava que acontecia no processamento do comando acime era: Selecione LAST_NAME, SALARY, DEPARTMENT_ID da tabela EMPLOYEES onde DEPARTMENT_ID seja menor que 50 OU SALARY for maior que 5000 E o LAST_NAME for igual a Popp. Então, deveria ser retornado somente a linha onde LAST_NAME é Popp, já que só tem um nome cadastrado como Popp e que o salario dele é maior que 5000 embora o departamento seja maior que 50.

      A dúvida é: qual a ordem que a linguagem SQL processa as informações? Qual o caminho que percorrido até o resultado?

      #93710
      Avatar photoLeonardo Litz
      Participante

        Olá Tidinas…

        Seguinte, nesta sua condição. O Oracle irá testar primeiro se o DEPARTAMENT_ID é menor que 50 e depois irá testar em conjunto se o SALARY é maior que 5000 e o LAST_NAME = ‘POPP’. Utilizando os parenteses para exemplificar, ficaria assim:

        SELECT LAST_NAME, SALARY, DEPARTMENT_ID
        FROM EMPLOYEES
        WHERE DEPARTMENT_ID5000 AND LAST_NAME = 'Popp');

        Em outras palavras, separa-se uma varidação antes do OR e outra depois do.

        Vlw Leonardo Litz

        #93711
        rwarstat
        Participante

          Pelo que entendi, tu precisa trazer as ifnromações quando LAST_NAME = ‘Popp’ e indiferente se DEPARTMENT_ID5000, correto?
          Se for isso, o comando correto é

          SELECT LAST_NAME, SALARY, DEPARTMENT_ID
          FROM EMPLOYEES
          WHERE (DEPARTMENT_ID5000) AND LAST_NAME = 'Popp';

          Abraço,
          Roberto

          #93722
          burga
          Participante

            Na verdade o que ocorre é que o oracle sempre irá realizar os operadores AND primeiro, ou seja, na sua consulta o primeiro filtro será SALARY>5000 AND LAST_NAME = ‘Popp’ e depois pegará o resultado do AND e fará o OR com DEPARTMENT_ID<50.

            Para que o OR seja executado antes do AND é necessário acrescentar parênteses como o Roberto mostrou.

            #93729
            tidinas
            Participante

              perfeito pessoal, obrigado!

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.