SQLite 클래식 튜토리얼login
SQLite 클래식 튜토리얼
작가:php.cn  업데이트 시간:2022-04-13 17:05:02

SQLite 하위 쿼리


하위 쿼리, 내부 쿼리 또는 중첩 쿼리는 다른 SQLite 쿼리 내의 WHERE 절에 포함된 쿼리입니다.

하위 쿼리를 사용하여 반환된 데이터는 검색할 데이터를 더욱 제한하기 위해 기본 쿼리의 조건으로 사용됩니다.

하위 쿼리는 =, <, >, >=, <=, IN, BETWEEN 등과 같은 연산자와 함께 SELECT, INSERT, UPDATE 및 DELETE 문과 함께 사용할 수 있습니다.

다음은 하위 쿼리가 따라야 하는 몇 가지 규칙입니다.

  • 하위 쿼리는 괄호로 묶어야 합니다.

  • 하위 쿼리의 선택된 열과 비교되는 기본 쿼리에 여러 열이 있는 경우를 제외하고 하위 쿼리는 SELECT 절에 하나의 열만 가질 수 있습니다.

  • ORDER BY는 하위 쿼리에서 사용할 수 없지만 ORDER BY는 기본 쿼리에서 사용할 수 있습니다. GROUP BY는 하위 쿼리에 사용할 수 있으며 ORDER BY와 동일한 기능을 갖습니다.

  • 하위 쿼리는 둘 이상의 행을 반환하며 IN 연산자와 같은 다중 값 연산자에만 사용할 수 있습니다.

  • BETWEEN 연산자는 하위 쿼리와 함께 사용할 수 없지만, BETWEEN 연산자는 하위 쿼리 내에서 사용할 수 있습니다.

SELECT 문에서 하위 쿼리 사용

하위 쿼리는 일반적으로 SELECT 문과 함께 사용됩니다. 기본 구문은 다음과 같습니다.

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

COMPANY 테이블에 다음 레코드가 있다고 가정합니다.

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

이제 SELECT 문에서 하위 쿼리 사용법을 확인해 보겠습니다.

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

다음 결과가 생성됩니다.

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_BKP의 구조는 COMPANY 테이블과 유사하며 동일한 CREATE TABLE을 사용하여 생성할 수 있다고 가정합니다. 테이블 이름이 COMPANY_BKP로 변경되었습니다. 이제 다음 구문을 사용하여 전체 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 테이블의 백업인 COMPANY_BKP 테이블이 있다고 가정합니다.

다음 예에서는 COMPANY 테이블에서 AGE가 27 이상인 모든 고객의 SALARY를 원래 값의 0.50배로 업데이트합니다.

sqlite> UPDATE COMPANY
     SET SALARY = SALARY * 0.50
     WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
                   WHERE AGE >= 27 );

이는 마지막 두 행에 영향을 미칩니다. COMPANY 테이블의 레코드는 다음과 같습니다.

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
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 문과 함께 사용할 수 있습니다.

기본 구문은 다음과 같습니다.

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

COMPANY 테이블의 백업인 COMPANY_BKP 테이블이 있다고 가정합니다.

다음 예에서는 AGE가 27 이상인 COMPANY 테이블의 모든 고객 레코드를 삭제합니다.

sqlite> DELETE FROM COMPANY
     WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
                   WHERE AGE > 27 );

이는 두 행에 영향을 미치며 COMPANY 테이블의 최종 레코드는 다음과 같습니다. 팔로우:

아아아아

PHP 중국어 웹사이트