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 테이블의 최종 레코드는 다음과 같습니다. 팔로우:
아아아아