elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Página de elhacker.net en Google+ Google+


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  AND y OR ejemplos para entender el funcionamiento
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: AND y OR ejemplos para entender el funcionamiento  (Leído 529 veces)
gAb1


Desconectado Desconectado

Mensajes: 725


Ver Perfil
AND y OR ejemplos para entender el funcionamiento
« en: 26 Noviembre 2015, 15:43 »

Estoy tratando de filtrar resultados usando 3 columnas como filtros pero no funciona como me esperaba...

Por ejemplo, en la tabla tengo un solo ejemplo: col1 es 2, col2 es 0 y col3 es 3.

Si hago:

Código
  1. AND col1 = 1 OR col1 = 3
  2. AND col3 = 3

No se muestra el ejemplo. Pero si hago:

Código
  1. AND col1 = 1 OR col1 = 3
  2. AND col3 = 1 OR col3 = 3

Si que se muestra... ¿por qué ahora si pero antes no? No le veo ningún sentido... No hay ninguna col3 con valor 1 pero si con 3, ¿por qué no se muestra cuando solo busco el valor 3? Pero si busco el valor 1 y 3 ¿si que se muestra? Por favor explicarmelo o me volveré más loco aun  :-\

Si cualquiera de los AND no se cumple (no se muestra nada) o como funciona exactamente?

¿Funcionará igual si uso IN() en lugar de OR? Mejor cuando lo entienda uso el IN().

Gracias!


En línea

Carloswaldo
Traductor
Moderador Global
***
Desconectado Desconectado

Mensajes: 4.718


Nos reservamos el derecho de ban.


Ver Perfil WWW
Re: AND y OR ejemplos para entender el funcionamiento
« Respuesta #1 en: 26 Noviembre 2015, 18:19 »

Creo que lo primero que tienes que empezar haciendo es aprender un poco de lógica matemática. Acá se manejan valores de Verdadero y Falso, y los operadores lógicos como AND y OR toman 2 valores y realizan una operación sobre ellos. Tal como 2 + 2 = 4, puedes tener operaciones T and T = T. Lo bueno es que los valores binarios solo son 2 y puedes tener una tabla de los resultados porque son solo unos cuantos.

AND se cumple solo cuando ambos valores son verdaderos:

T and T = T
T and F = F
F and T = F
F and F = F

OR se cumple cuando al menos uno de los valores es verdadero:

T or T = T
T or F = T
F or T = T
F or F = F

en tus ejemplos tienes un AND al principio pero no sabemos qué es lo que hay antes de ese AND, ni si es verdadero o falso.

Otra cosa que tienes que tener en cuenta al usar varios operadores lógicos es que para mejor lectura debes agruparlos con paréntesis. Claro que si no usas paréntesis los operadores tienen un orden de resolución, pero es mejor que sea legible.

Links:

http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/introduccion/operadores1.htm
http://www.bennadel.com/blog/126-sql-and-or-order-of-operations.htm


En línea

gAb1


Desconectado Desconectado

Mensajes: 725


Ver Perfil
Re: AND y OR ejemplos para entender el funcionamiento
« Respuesta #2 en: 26 Noviembre 2015, 21:40 »

No sé que tipo de lógica matemática lleva el OR (sin paréntesis), pero con IN() funciona exactamente como quiero:

Por ejemplo (tomando en cuenta el ejemplo: type es 2, status es 0 y bhk es 3)

Código
  1. AND t2.TYPE = 1 OR t2.TYPE = 2
  2. AND t2.STATUS = 0 --OR t2.status = 1
  3. AND t2.bhk = 1

No devuelve nada, pero si le añado el OR si que devuelve, ¿qué tipo de lógica es esa?

Si hacemos lo mismo pero con IN() funciona perfectamente:

Código
  1. AND t2.TYPE IN (1, 2)
  2. AND t2.STATUS IN (0) -- (0, 1)
  3. AND t2.bhk IN (1)

No devuelve nada, ni con 0 solo, ni con 0 y 1... Esto si lo veo lógico.

Para que devuelva con el IN:

Código
  1. AND t2.TYPE IN (1,2)  -- 2
  2. AND t2.STATUS IN (0)  -- 0
  3. AND t2.bhk IN (1,3)  -- 3

Ahora devuelve el ejemplo porque todos los AND son TRUE. Esto es lo que necesitaba.

Exacto, acaba de leer que necesito parentesis para que el OR haga lo que necesito, pero es más facil usar IN.

Gracias!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines