2010-08-27 15 views
10

Me gustaría realizar una consulta SELECT con MySQL. Mi objetivo es seleccionar todos los perros en una base de datos veterinaria que sería sexo = masculino y pelaje = corto y (color = negro o tamaño = grande)SQL Select Statement con WHERE, AND, O

Nota: Quiero seleccionar perros que sean negros o de tamaño grande. No tienen que cumplir los 2 requisitos. Solo necesitan cumplir cualquiera de los dos.

He escrito la instrucción SQL a continuación, pero no estoy seguro de si estoy en lo cierto:

SELECT name, sex, fur, color FROM dogs WHERE TRUE sex='male' AND fur='short' AND color='black' OR size="big"; 

Pardon mi fraseo si es demasiado confuso.

Respuesta

23

Según Operator precedence for MySQLAND tiene mayor precedencia que OR.

Así C1 AND C2 OR C3 serán tratados como (C1 AND C2) OR C3

Para anular la precedencia predeterminada es necesario utilizar paréntesis como: C1 AND (C2 OR C3)

En su caso la consulta correcta es:

SELECT name, sex, fur, color 
FROM dogs 
WHERE sex='male' AND fur='short' AND (color='black' OR size="big"); 
+0

Thnaks codaddict. ¿Debería haber un 'AND' entre 'WHERE TRUE' y "sex = 'name'"? – dave

+0

Tiene razón, puede tener 'VERDADERO Y C1 ...' o simplemente 'C1 ....' – codaddict

1

La forma en que usa paréntesis en la descripción de su objetivo es correcta. La sintaxis es la siguiente:

SELECT name, sex, fur, color 
    FROM dogs 
    WHERE sex="male" AND fur="short" AND (color="black" OR size="big"); 
+0

Cheers cherouvim. Tener una buena. – dave

3

Asegúrese para agregar paréntesis, por lo que la condición O se evalúa correctamente.

SELECT name, sex, fur, color 
FROM dogs 
WHERE sex='male' AND fur='short' AND (color='black' OR size='big'); 
+0

Cheers Lance. Tener una buena. – dave

0

He utilizado esto y su funcionamiento;

SELECT name, sex, fur, color 
FROM dogs 
WHERE sex="male" AND fur="short" AND (color="black" || size="big"); 
Cuestiones relacionadas