English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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])
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 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 ]
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);
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) ]
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)
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) ]
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)