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

SQLite Unterabfragen

Subquery oder interne Abfrage oder eingebettete Abfrage ist eine Abfrage in einer anderen SQLite-Abfrage und eingebettet in der WHERE-Klausel.

Subqueries werden verwendet, um Daten zurückzugeben, die im Hauptabfrage verwendet werden, als Bedingungen zur zusätzlichen Einschränkung der zu检索的数据.

Subqueries können mit SELECT, INSERT, UPDATE und DELETE-Anweisungen sowie =, <, >, >=, <=, IN, BETWEEN und anderen Operatoren verwendet werden.

Es gibt einige Regeln, die Subqueries befolgen müssen-

  • Subqueries müssen in Klammern stehen.

  • In der SELECT-Klausel einer Subquery kann nur eine Spalte vorhanden sein, es sei denn, die Hauptabfrage bietet mehrere Spalten für die Subquery, um ihre ausgewählten Spalten zu vergleichen.

  • Obwohl die Hauptabfrage ORDER BY verwenden kann, kann ORDER BY in der Subquery nicht verwendet werden. GROUP BY kann zur Ausführung der gleichen Funktion wie ORDER BY in der Subquery verwendet werden.

  • Subqueries, die mehrere Zeilen zurückgeben, können nur mit Multi-Value-Operatoren (z.B. IN-Operator) verwendet werden.

  • Der BETWEEN-Operator kann nicht mit Subqueries verwendet werden; aber er kann in Subqueries verwendet werden.

Subqueries mit SELECT-Anweisungen

Subqueries werden am häufigsten mit SELECT-Anweisungen verwendet. Die Grundsyntax ist wie folgt-

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

示例

Die COMPANY-Tabelle mit folgenden Einträgen.

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           保罗        32          加利福尼亚  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

Nun lassen Sie uns die SELECT-Anweisung verwenden, um die folgenden Unterabfragen zu überprüfen.

sqlite> SELECT * 
   FROM COMPANY 
   WHERE ID IN (SELECT ID 
      FROM COMPANY 
      WHERE SALARY > 45000) ;

Dies führt zu folgenden Ergebnissen.

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

带有INSERT语句的子查询

子查询也可以与INSERT语句一起使用。INSERT语句使用从子查询返回的数据插入另一个表。可以使用任何字符,日期或数字功能修改子查询中的选定数据。

以下是基本语法如下-

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

示例

考虑一个与COMPANY表结构相似的表COMPANY_BKP,可以使用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语句的子查询时,可以更新表中的单列或多列。

以下是基本语法如下-

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 );

Dies wird zwei Zeilen beeinflussen, und die COMPANY-Tabelle wird die folgenden Einträge haben-

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           保罗        32          加利福尼亚  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语句一起使用,就像上面提到的任何其他语句一样。

以下是基本语法如下-

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 AGE > 27 );

Dies wird zwei Zeilen beeinflussen, und die COMPANY-Tabelle wird die folgenden Einträge haben-

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
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