PostgreSQL - Cláusula WHERE

La cláusula WHERE de PostgreSQL se utiliza para especificar una condición mientras se obtienen los datos de una sola tabla o se unen con varias tablas.

Si se cumple la condición dada, solo entonces devuelve un valor específico de la tabla. Puede filtrar las filas que no desea incluir en el conjunto de resultados utilizando la cláusula WHERE.

La cláusula WHERE no solo se usa en la instrucción SELECT, sino que también se usa en la instrucción UPDATE, DELETE, etc., que examinaremos en capítulos posteriores.

Sintaxis

La sintaxis básica de la instrucción SELECT con la cláusula WHERE es la siguiente:

SELECT column1, column2, columnN
FROM table_name
WHERE [search_condition]

Puede especificar una condición de búsqueda utilizando operadores lógicos o de comparación. like>, <, =, LIKE, NOT, etc. Los siguientes ejemplos aclararían este concepto.

Ejemplo

Considere la tabla EMPRESA que tiene registros de la siguiente manera:

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Aquí hay ejemplos simples que muestran el uso de operadores lógicos de PostgreSQL. La siguiente instrucción SELECT mostrará una lista de todos los registros donde la EDAD es mayor o igual a 25AND el salario es mayor o igual a 65000,00 -

testdb=# SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;

La declaración de PostgreSQL dada anteriormente producirá el siguiente resultado:

id | name  | age |  address   | salary
----+-------+-----+------------+--------
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(2 rows)

La siguiente instrucción SELECT enumera todos los registros donde EDAD es mayor o igual a 25 OR el salario es mayor o igual a 65000,00 -

testdb=# SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;

La declaración de PostgreSQL dada anteriormente producirá el siguiente resultado:

id | name  | age | address     | salary
----+-------+-----+-------------+--------
  1 | Paul  |  32 | California  |  20000
  2 | Allen |  25 | Texas       |  15000
  4 | Mark  |  25 | Rich-Mond   |  65000
  5 | David |  27 | Texas       |  85000
(4 rows)

La siguiente instrucción SELECT enumera todos los registros donde AGE no es NULL, lo que significa todos los registros, porque ninguno de los registros tiene AGE igual a NULL -

testdb=#  SELECT * FROM COMPANY WHERE AGE IS NOT NULL;

La declaración de PostgreSQL dada anteriormente producirá el siguiente resultado:

id | name  | age | address    | salary
 ----+-------+-----+------------+--------
   1 | Paul  |  32 | California |  20000
   2 | Allen |  25 | Texas      |  15000
   3 | Teddy |  23 | Norway     |  20000
   4 | Mark  |  25 | Rich-Mond  |  65000
   5 | David |  27 | Texas      |  85000
   6 | Kim   |  22 | South-Hall |  45000
   7 | James |  24 | Houston    |  10000
(7 rows)

La siguiente instrucción SELECT enumera todos los registros donde NAME comienza con 'Pa', sin importar lo que venga después de 'Pa'.

testdb=# SELECT * FROM COMPANY WHERE NAME LIKE 'Pa%';

La declaración de PostgreSQL dada anteriormente producirá el siguiente resultado:

id | name | age |address    | salary
----+------+-----+-----------+--------
  1 | Paul |  32 | California|  20000

La siguiente instrucción SELECT enumera todos los registros donde el valor AGE es 25 o 27 -

testdb=# SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );

La declaración de PostgreSQL dada anteriormente producirá el siguiente resultado:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  2 | Allen |  25 | Texas      |  15000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(3 rows)

La siguiente instrucción SELECT enumera todos los registros donde el valor AGE no es ni 25 ni 27 -

testdb=# SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );

La declaración de PostgreSQL dada anteriormente producirá el siguiente resultado:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  3 | Teddy |  23 | Norway     |  20000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(4 rows)

La siguiente instrucción SELECT enumera todos los registros donde el valor de EDAD está ENTRE 25 Y 27 -

testdb=# SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;

La declaración de PostgreSQL dada anteriormente producirá el siguiente resultado:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  2 | Allen |  25 | Texas      |  15000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(3 rows)

La siguiente instrucción SELECT hace uso de la subconsulta SQL donde la subconsulta encuentra todos los registros con el campo AGE que tiene SALARIO> 65000 y luego se usa la cláusula WHERE junto con el operador EXISTS para enumerar todos los registros donde existe AGE de la consulta externa en el resultado devuelto por subconsulta -

testdb=# SELECT AGE FROM COMPANY
        WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

La declaración de PostgreSQL dada anteriormente producirá el siguiente resultado:

age
-----
  32
  25
  23
  25
  27
  22
  24
(7 rows)

La siguiente instrucción SELECT hace uso de la subconsulta SQL donde la subconsulta encuentra todos los registros con el campo AGE que tiene SALARIO> 65000 y la cláusula WHERE posterior se está usando junto con el operador> para enumerar todos los registros donde la consulta AGE desde el resultado devuelto por la subconsulta -

testdb=# SELECT * FROM COMPANY
        WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

La declaración de PostgreSQL dada anteriormente producirá el siguiente resultado:

id | name | age | address    | salary
----+------+-----+------------+--------
  1 | Paul |  32 | California |  20000