Latest web development tutorials

SQLiteのサブクエリ

サブクエリまたはネストされたクエリまたは内部クエリが別のSQLiteのクエリ内のクエリWHERE句に埋め込まれています。

副問合せを使用すると、データはさらに、取得するデータを制限する条件として、メインクエリで使用されます返します。

サブクエリは、SELECT、INSERT、UPDATEで使用され、文は、このような=として使用する演算子を伴うことがあるDELETEすることができ、<、>、> =、<=、IN、BETWEEN好きです。

以下に従わなければなりませんサブクエリいくつかのルールです。

  • サブクエリは括弧で囲まなければなりません。

  • 副問合せのSELECT句にのみ、メインクエリ内の複数の列がない限り、選択した列のサブクエリ比較を1列を持つことができます。

  • メイン・クエリは、ORDER BYを使用することができますが、ORDER BYは、サブクエリで使用することはできません。 あなたがサブクエリでGROUP BYを使用することができ、ORDER BYのと同じように機能します。

  • サブクエリが1行以上を返し、唯一のそのようなIN演算子として多値演算子で使用することができます。

  • オペレータは、サブクエリで使用することができないとの間には、しかしながら、BETWEENサブクエリ内で使用することができます。

SELECTステートメントのサブクエリ

サブクエリは、通常のSELECTステートメントで使用されています。 次のように基本的な構文は次のとおりです。

SELECTカラム名[、column_nameに]
TABLE1 FROM [、table2の]
WHEREのcolumn_name OPERATOR
      (SELECTカラム名[、column_nameに]
      TABLE1 FROM [、table2の]
      [WHERE])

仮定COMPANYテーブルには、次のレコードを持っています。

IDのNAME AGEアドレスSALARY
---------- ---------- ---------- ---------- ----------
1ポール32カリフォルニア20000.0
2アレン25テキサス15000.0
3テディ23ノルウェー20000.0
4マーク25リッチモンド65000.0
5デイビッド27テキサス85000.0
6金22サウスホール45000.0
7ジェームス・24ヒューストン10000.0

それでは、SELECT文の副問合せを調べてみましょう:

sqliteの> SELECT * 
     会社から 
     WHERE ID IN(SELECT ID 
                  会社から 
                  WHERE SALARY> 45000);

これにより、以下の結果が得られます。

IDのNAME AGEアドレスSALARY
---------- ---------- ---------- ---------- ----------
4マーク25リッチモンド65000.0
5デイビッド27テキサス85000.0

INSERT文の副問合せ

サブクエリは、INSERT文でも使用することができます。 INSERT文は、別のテーブルにデータを返すために、サブクエリを使用しています。 サブクエリで選択されたデータは、任意の文字、日付、または数値の機能変更することができます。

次のように基本的な構文は次のとおりです。

TABLE_NAME。INSERT INTO [(column1の[、COLUMN2])]
           SELECT [* | column1の[、COLUMN2]
           TABLE1 FROM [、table2の]
           [VALUE演算子]

COMPANY_BKP COMPANYテーブル構造を仮定し、同様の、および作成するために、同じCREATE TABLEを使用することができ、ちょうどテーブルCOMPANY_BKPの名前を変更しました。 今COMPANY_BKPに会社全体の表をコピー、次のように、構文は次のとおりです。

sqliteの> INSERT INTO COMPANY_BKP
     COMPANY SELECT * FROM 
     WHERE ID IN(SELECT ID 
                  )会社から。

UPDATE文のサブクエリ

サブクエリは、UPDATE文で使用することができます。 サブクエリUPDATEステートメントを使用する場合は、単一または複数の列がテーブルに更新されます。

次のように基本的な構文は次のとおりです。

UPDATEテーブル
SET COLUMN_NAME = NEW_VALUE
[WHERE OPERATOR [VALUE]
   (SELECT COLUMN_NAME
   )TABLE_NAME FROM
   [WHERE)]

我々はCOMPANY_BKPテーブル、バックアップCOMPANYテーブルがあるとします。

COMPANY表の以下の例すべてのAGEよりか、元の0.50倍を更新27クライアントのSALARYに等しいです:

sqliteの> UPDATE会社
     SET SALARY = SALARY * 0.50
     WHERE AGE IN(COMPANY_BKP FROM AGEを選択
                   WHERE AGE> = 27);

これは、以下のように表の最後COMPANYレコードの2行に影響します。

IDのNAME AGEアドレスSALARY
---------- ---------- ---------- ---------- ----------
1ポール32カリフォルニア10000.0
2アレン25テキサス15000.0
3テディ23ノルウェー20000.0
4マーク25リッチモンド65000.0
5デイビッド27テキサス42500.0
6金22サウスホール45000.0
7ジェームス・24ヒューストン10000.0

DELETEステートメントの副照会

前述のようにサブクエリはちょうど他の文と同様に、DELETEステートメントで使用することができます。

次のように基本的な構文は次のとおりです。

TABLE_NAME FROM DELETE
[WHERE OPERATOR [VALUE]
   (SELECT COLUMN_NAME
   )TABLE_NAME FROM
   [WHERE)]

我々はCOMPANY_BKPテーブル、バックアップCOMPANYテーブルがあるとします。

次の例では、すべての顧客レコード以上AGE 27 COMPANYテーブルを削除します。

sqliteの>会社からDELETE
     WHERE AGE IN(COMPANY_BKP FROM AGEを選択
                   WHERE AGE> 27);

これは、以下のように表の最後COMPANYレコードの2行に影響します。

IDのNAME AGEアドレスSALARY
---------- ---------- ---------- ---------- ----------
2アレン25テキサス15000.0
3テディ23ノルウェー20000.0
4マーク25リッチモンド65000.0
5デイビッド27テキサス42500.0
6金22サウスホール45000.0
7ジェームス・24ヒューストン10000.0