English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
서브쿼리 또는 내부 쿼리 또는 내장 쿼리는 다른 SQLite 쿼리 내에서 WHERE 절에 내장된 쿼리입니다.
서브쿼리는 주 쿼리에서 사용할 데이터를 반환하며, 검색할 데이터를 추가로 제한하는 조건으로 사용됩니다.
서브쿼리는 SELECT, INSERT, UPDATE, DELETE 문 및 =, <, >, >=, <=, IN, BETWEEN 등 연산자와 함께 사용할 수 있습니다.
서브쿼리에 대해 따를 수 있는 몇 가지 규칙이 있습니다-
서브쿼리는 괄호안에 위치해야 합니다.
서브쿼리는 SELECT 절에서 한 개의 열만 가져올 수 있습니다.除非主查询中有多个 columns供子查询比较其选定的 columns.
虽然主查询可以使用ORDER BY,但是不能在子查询中使用ORDER BY。GROUP BY可用于执行与子查询中的ORDER BY相同的功能。
다중 행을 반환하는 서브쿼리는 다중 값 연산자(예: IN 연산자)와 함께 사용할 수 있습니다.
BETWEEN 연산자는 서브쿼리와 함께 사용할 수 없지만, 서브쿼리에서는 BETWEEN를 사용할 수 있습니다.
서브쿼리는 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 알렌 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 * FROM COMPANY WHERE ID IN (SELECT ID FROM COMPANY WHERE SALARY > 45000) ;
이는 다음과 같은 결과를 만들어냅니다.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 마크 25 리치-몬드 65000.0 5 대비드 27 텍사스 85000.0
서브쿼리도 INSERT 문과 함께 사용될 수 있습니다. INSERT 문은 서브쿼리로부터 반환된 데이터를 다른 테이블에 삽입합니다. 서브쿼리에서 선택된 데이터를 문자, 날짜, 숫자 기능으로 수정할 수 있습니다.
아래는 기본 문법입니다:-
INSERT INTO table_name [ (column1 [, column2 ]) ] SELECT [ *|column1 [, column2 ] FROM table1 [, table2 ] [ WHERE VALUE OPERATOR ]
COMPANY_BKP 테이블을 고려해 보겠습니다. 이 테이블은 COMPANY 테이블과 구조가 유사하며, COMPANY_BKP를 테이블 이름으로 사용할 수 있습니다. 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 테이블의 백업입니다.
아래의 예제는 AGE가27세의 모든 고객의 급여를 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 알렌 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 FROM TABLE_NAME[ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE ) ]
COMPANY_BKP 테이블이 사용 가능하다고 가정해 보겠습니다. 이 테이블은 COMPANY 테이블의 백업입니다.
아래의 예제는 AGE가27의 모든 고객의 기록.
sqlite> DELETE FROM COMPANY WHERE AGE IN (SELECT AGE FROM COMPANY_BKP WHERE AGE > 27 );
이는 두 행에 영향을 미치며, 마지막 COMPANY 테이블은 다음과 같은 기록을 가질 것입니다-
ID NAME AGE ADDRESS 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