Ejemplo Nº 022 – Condiciones más complejas en la cláusula WHERE

1 comentario

Las cláusulas WHERE pueden llegar a ser muy complejas si se combinan varios operadores AND y OR.

SELECT
   PRD_CODIGO,
   PRD_NOMBRE,
   PRD_PRECTO,
   PRD_PREVTA
FROM
   PRODUCTOS
WHERE
   PRD_PRECTO > 1000 AND (
   PRD_PREVTA >= 50000 OR
   EXTRACT(YEAR FROM PRD_FECHAX) = 2012)

Cuando se trata de una condición compleja lo más recomendable es siempre usar paréntesis para asegurarse que el orden de evaluación sea el deseado.

Por ejemplo, en este caso:

Condición1 AND Condición2 OR Condición3

¿cómo lo evalúa el Firebird, como:
(Condición1 AND Condición2) OR Condición3
o como:
Condición1 AND (Condición2 OR Condición3)
?

Para evitar confusiones y errores difíciles de detectar es mejor usar siempre paréntesis.

Ejemplo Nº 021 – Usando la cláusula WHERE con el operador NOT y la palabra clave IN

1 comentario

El operador NOT sirve para negar una condición.

SELECT
   PRD_CODIGO,
   PRD_NOMBRE,
   PRD_PREVTA
FROM
   PRODUCTOS
WHERE
   PRD_UNIMED NOT IN ('KLG', 'LTS', 'MTS')

Este SELECT nos mostrará los productos cuya Unidad de Medida no sea ni Kilogramos ni Litros ni Metros.

Ejemplo Nº 020 – Usando la cláusula WHERE con la palabra clave IN

1 comentario

En lugar de estar usando el operador OR varias veces suele ser preferible usar la palabra clave IN en su lugar, como vemos a continuación:

SELECT
   PRD_CODIGO,
   PRD_NOMBRE,
   PRD_PREVTA
FROM
   PRODUCTOS
WHERE
   PRD_PREVTA IN (1000, 2000, 3000, 4000)

Que es equivalente a escribir este otro SELECT:

SELECT
   PRD_CODIGO,
   PRD_NOMBRE,
   PRD_PREVTA
FROM
   PRODUCTOS
WHERE
   PRD_PREVTA = 1000 OR
   PRD_PREVTA = 2000 OR
   PRD_PREVTA = 3000 OR
   PRD_PREVTA = 4000

Como ves, usando la palabra clave IN se ahorra escritura. Además, al ser más larga la segunda forma es más propensa a errores. Por esos motivos, en lugar de estar escribiendo varios OR es preferible escribir un solo IN.

 

 

 

Ejemplo Nº 019 – Usando la cláusula WHERE con el operador OR

1 comentario

El operador OR se utiliza cuando se requiere que se cumpla al menos una de las dos condiciones.

SELECT
   PRD_CODIGO,
   PRD_NOMBRE,
   PRD_PREVTA
WHERE
   PRD_CODIGO = 12 OR
   PRD_CODIGO = 25

En este ejemplo veremos los productos cuyos Código sean 12 ó 25 (si ambos existen, se los verá a ambos. Si uno sólo existe, se lo verá a ese. Si ninguno existe, nada se verá).

No es obligatorio que el operador OR relacione a la misma columna, podrían ser también columnas distintas como se ve a continuación:

SELECT
   PRD_CODIGO,
   PRD_NOMBRE,
   PRD_PREVTA
WHERE
   PRD_CODIGO = 12 OR
   PRD_PREVTA > 6000

Aquí veremos los datos del producto cuyo Código es 12 (si es que existe) y también los datos de todos los productos cuyo precio de venta sea mayor que 6.000 (si es que existen productos con precios de venta mayores que 6.000)

Ejemplo Nº 018 – Usando la cláusula WHERE con el operador AND

1 comentario

El operador AND se utiliza cuando se requiere que se cumplan dos o más condiciones.

SELECT
   PRD_CODIGO,
   PRD_NOMBRE,
   PRD_PREVTA
FROM
   PRODUCTOS
WHERE
   PRD_PREVTA >= 10000 AND
   PRD_PREVTA <= 50000

No es obligatorio que el operador AND relacione siempre a la misma columna, también pueden usarse columnas distintas, como se muestra abajo:

SELECT
   PRD_CODIGO,
   PRD_NOMBRE,
   PRD_PREVTA
FROM
   PRODUCTOS
WHERE
   PRD_CODIGO >= 200  AND
   PRD_PREVTA <= 50000 AND
   PRD_PROCED = 'I'

En este caso, nos muestra todos los productos cuyo Código es igual o mayor que 200, su Precio de Venta es menor o igual que 50.000 y son de procedencia “Importados”.

El operador AND se utiliza cuando deben cumplirse todas las condiciones.

 

 

 

 

Ejemplo Nº 017 – Usando la cláusula WHERE para imponer condiciones

1 comentario

Solamente las filas que cumplan con la condición impuesta en el WHERE se mostrarán. La cláusula WHERE siempre debe escribirse a continuación de la cláusula FROM.

SELECT
   PRD_CODIGO,
   PRD_NOMBRE,
   PRD_PREVTA
FROM
   PRODUCTOS
WHERE
   PRD_PREVTA < 10000

Este SELECT nos mostrará los Códigos, Nombres y Precios de Venta de todos los productos cuyos precios de venta sean menores que 10.000

La cláusula WHERE es la que impone la condición (o condiciones) que deseamos y así limitamos las filas que serán mostradas por el SELECT.

 

Ejemplo Nº 016 – Usando el CASE de búsqueda

1 comentario

Con el CASE de búsqueda se pueden usar varias columnas, no solamente una columna como ocurre con el CASE simple.

Supongamos que queremos otorgarles descuentos a nuestros clientes según los productos que vendemos. Si son importados nuestros descuentos serán del 5%, y si son nacionales y el precio de venta es mayor que 300.000 entonces el descuento será del 4%, en los demás casos es del 0%. El siguiente SELECT nos permite conocer el porcentaje de descuento de cada producto.

En la columna PRD_PROCED se guarda la procedencia del producto. I = importado, N = nacional.

SELECT
   PRD_CODIGO,
   PRD_NOMBRE,
   CASE
      WHEN PRD_PROCED = 'I' THEN 5
      WHEN PRD_PREVTA > 300000 THEN 4
      ELSE 0
   END AS PORCENTAJEDESCUENTO
FROM
   PRODUCTOS

En el CASE de búsqueda se puede usar más de una columna, como lo muestra el ejemplo de arriba.

Se coloca un ELSE para indicar lo que se debe hacer cuando ninguna de las condiciones anteriores se cumple.

 

 

 

 

 

Older Entries