English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La subconsulta o la consulta interna o la consulta anidada es otra consulta SQLite que se incrusta en la cláusula WHERE.
Las subconsultas se utilizan para devolver los datos que se utilizarán en la consulta principal, como condiciones adicionales para restringir los datos a recuperar.
Las subconsultas se pueden usar con las sentencias SELECT, INSERT, UPDATE y DELETE, así como con los operadores =, <, >, >=, <=, IN, BETWEEN, etc.
Hay algunas reglas que deben seguirse para las subconsultas-
La subconsulta debe estar entre paréntesis.
En la cláusula SELECT de la subconsulta solo puede haber una columna, a menos que la consulta principal tenga múltiples columnas para comparar las columnas seleccionadas de la subconsulta.
A pesar de que la consulta principal puede usar ORDER BY, no se puede usar ORDER BY en la subconsulta. GROUP BY se puede usar para realizar la misma función que ORDER BY en la subconsulta.
Las subconsultas que devuelven múltiples filas solo se pueden usar con operadores de varios valores (por ejemplo, el operador IN).
El operador BETWEEN no se puede usar con subconsultas; sin embargo, se puede usar BETWEEN en subconsultas.
La subconsulta se utiliza con mayor frecuencia junto con la sentencia 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])
La tabla COMPANY con los siguientes registros.
ID NOMBRE EDAD DIRECCIÓN SALARIO ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
Ahora, utilicemos la sentencia SELECT para verificar la subconsulta siguiente.
sqlite> SELECT * FROM COMPANY WHERE ID IN (SELECT ID FROM COMPANY WHERE SALARY > 45000) ;
Esto producirá los siguientes resultados.
ID NOMBRE EDAD DIRECCIÓN SALARIO ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
子查询也可以与INSERT语句一起使用。INSERT语句使用从子查询返回的数据插入另一个表。可以使用任何字符,日期或数字功能修改子查询中的选定数据。
以下是基本语法如下-
INSERT INTO table_name [ (column1 [ , column2 ]) ] SELECT [ *| column1 [ , column2 ] FROM table1 [ , table2 ] [ WHERE VALUE OPERATOR ]
考虑一个表COMPANY_BKP,其结构与COMPANY表相似,并且可以使用COMPANY_BKP作为表名使用相同的CREATE TABLE创建。要将完整的COMPANY表复制到COMPANY_BKP,请使用以下语法-
sqlite> INSERT INTO COMPANY_BKP SELECT * FROM COMPANY WHERE ID IN (SELECT ID FROM COMPANY) ;
子查询可以与UPDATE语句结合使用。使用带有UPDATE语句的子查询时,可以更新表中的单列或多列。
以下是基本语法如下-
UPDATE table SET column_name = new_value[ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME ) [ WHERE ) ]
假设我们有COMPANY_BKP表可用,它是COMPANY表的备份。
以下示例将COMPANY表中年龄大于或等于27岁的所有客户的薪资更新0。50倍。
sqlite> UPDATE COMPANY SET SALARY = SALARY * 0.50 WHERE AGE IN (SELECT AGE FROM COMPANY_BKP WHERE AGE >= 27 );
Esto afectará dos filas, y la tabla COMPANY tendrá los siguientes registros al final-
ID NOMBRE EDAD DIRECCIÓN SALARIO ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 10000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 42500.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
子查询可以与DELETE语句一起使用,就像上面提到的任何其他语句一样。
以下是基本语法如下-
DELETE FROM TABLE_NAME[ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME ) [ WHERE ) ]
假设我们有COMPANY_BKP表可用,它是COMPANY表的备份。
下面的示例从COMPANY表中删除年龄大于或等于27的所有客户的记录。
sqlite> DELETE FROM COMPANY WHERE AGE IN (SELECT AGE FROM COMPANY_BKP WHERE EDAD > 27 );
Esto afectará dos filas, y la tabla COMPANY tendrá los siguientes registros al final-
ID NOMBRE EDAD DIRECCIÓN SALARIO ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 42500.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0