English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial básico de PostgreSQL

Tutorial avanzado de PostgreSQL

Interfaz de PostgreSQL

Subconsulta de PostgreSQL

La subconsulta, también conocida como consulta interna o consulta anidada, se refiere a la inserción de una sentencia de consulta dentro de la cláusula WHERE de una consulta en PostgreSQL.

Los resultados de una sentencia SELECT pueden servir como valor de entrada para otra sentencia.

La subconsulta se puede usar con las sentencias SELECT, INSERT, UPDATE y DELETE, y se pueden usar operadores como =, <, >, >=, <=, IN, BETWEEN, etc.

A continuación, se enumeran algunas reglas que debe seguir la subconsulta:

  • La subconsulta debe estar entre paréntesis.

  • En una subconsulta en la cláusula SELECT solo puede haber una columna, a menos que en la consulta principal haya múltiples columnas, que se comparan con las columnas seleccionadas de la subconsulta.

  • ORDER BY no se puede usar en una subconsulta, aunque ORDER BY se puede usar en la consulta principal. Se puede usar GROUP BY en una subconsulta, que tiene la misma función que ORDER BY.

  • Una subconsulta devuelve más de una fila, solo se puede usar con operadores de múltiples valores, como el operador IN.

  • El operador BETWEEN no se puede usar con subconsultas, pero BETWEEN se puede usar dentro de una subconsulta.

La subconsulta en la instrucción SELECT utiliza

Las subconsultas se utilizan generalmente junto con la instrucción SELECT. La sintaxis básica es la siguiente:

SELECT column_name[, column_name]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
      (SELECT column_name[, column_name]
      FROM table1 [, table2 ]
      [WHERE])

Ejemplo en línea

Crear la tabla COMPANY (Descargar el archivo SQL de COMPANY ),los datos son los siguientes:

w3codeboxdb# 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)

Ahora, utilicemos la subconsulta en la instrucción SELECT:

w3codeboxdb=# SELECT * FROM COMPANY WHERE ID IN (SELECT ID FROM COMPANY WHERE SALARY > 45000);

El resultado obtenido es el siguiente:

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

La subconsulta en la instrucción INSERT utiliza

La subconsulta también se puede usar junto con la instrucción INSERT. La instrucción INSERT utiliza los datos devueltos por la subconsulta para insertar en otra tabla.

Los datos seleccionados en la subconsulta pueden ser modificados con cualquier carácter, función de fecha o número.

La gramática básica es la siguiente:

INSERT INTO table_name [ (column1 [, column2 )]
   SELECT [ *|column1 [, column2 ] ]
   FROM table1 [, table2 ]
   [ WHERE VALUE OPERATOR ]

Ejemplo en línea

Suponiendo que la estructura de COMPANY_BKP es similar a la tabla COMPANY y se puede utilizar el mismo CREATE TABLE para crearla, solo que el nombre de la tabla se cambia a COMPANY_BKP. Ahora copiemos toda la tabla COMPANY a COMPANY_BKP, la sintaxis es la siguiente:

w3codeboxdb=# INSERT INTO COMPANY_BKP SELECT * FROM COMPANY WHERE ID IN (SELECT ID FROM COMPANY);

La subconsulta en la sentencia UPDATE utiliza

Las subconsultas pueden combinarse con la sentencia UPDATE. Cuando se utiliza una subconsulta en una sentencia UPDATE, se actualizan una o más columnas de la tabla.

La gramática básica es la siguiente:

ACTUALIZAR tabla
ESTABLECER nombre_de_columna = nuevo_valor
[ WHERE OPERADOR [ VALOR ]
   (SELECCIONAR NOMBRE_DE_COLUMNA
   FROM NOMBRE_DE_TABLA)
   [ WHERE) ]

Ejemplo en línea

Supongamos, tenemos la tabla COMPANY_BKP, que es una copia de seguridad de la tabla COMPANY.

El siguiente ejemplo actualiza el SALARY de todos los AGE mayores que 27 el SALARY del cliente se actualiza al 0.50 veces:

w3codeboxdb=# ACTUALIZAR COMPANY ESTABLECER SALARY = SALARY * 0.50 WHERE AGE EN (SELECCIONAR AGE DE COMPANY_BKP WHERE AGE >= 27 );

Esto afectará dos filas, y el registro final en la tabla COMPANY es el siguiente:

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

La subconsulta en la sentencia DELETE utiliza

Las subconsultas pueden combinarse con la sentencia DELETE, como se mencionó en otras sentencias.

La gramática básica es la siguiente:

BORRAR DE NOMBRE_DE_TABLA
[ WHERE OPERADOR [ VALOR ]
   (SELECCIONAR NOMBRE_DE_COLUMNA
   FROM NOMBRE_DE_TABLA)
   [ WHERE) ]

Ejemplo en línea

Supongamos, tenemos la tabla COMPANY_BKP, que es una copia de seguridad de la tabla COMPANY.

El siguiente ejemplo elimina todos los AGE mayores o iguales que 27 registros del cliente:

w3codeboxdb=# BORRAR DE COMPANY WHERE AGE EN (SELECCIONAR AGE DE COMPANY_BKP WHERE AGE > 27 );

Esto afectará dos filas, y el registro final en la tabla COMPANY es el siguiente:

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