SQL에서 하위 쿼리는 다른 쿼리 내의 쿼리로 간단히 정의할 수 있습니다. 즉, 하위 쿼리는 다른 SQL 쿼리의 WHERE 절에 포함된 쿼리라고 말할 수 있습니다. 하위 쿼리에 대한 중요한 규칙:
- 여러 SQL 절에 하위 쿼리를 배치할 수 있습니다. 어디 절, HAVING 절, FROM 절. 하위 쿼리는 표현식 연산자와 함께 SELECT, UPDATE, INSERT, DELETE 문과 함께 사용할 수 있습니다. =,>, =, <= 및 Like 연산자와 같은 항등 연산자 또는 비교 연산자일 수 있습니다.
- 하위 쿼리는 다른 쿼리 내의 쿼리입니다. 외부 쿼리는 다음과 같이 호출됩니다. 주요 쿼리 내부 쿼리는 다음과 같이 호출됩니다. 하위 쿼리 .
- 하위 쿼리는 일반적으로 하위 쿼리에 하위 쿼리가 없을 때 먼저 실행됩니다. 공동관계 와 더불어 주요 쿼리 , 상관관계가 있을 때 파서가 결정을 내립니다. 즉석에서 실행할 쿼리 상위 그에 따라 하위 쿼리의 출력을 사용합니다.
- 하위 쿼리는 괄호로 묶어야 합니다.
- 하위 쿼리는 비교 연산자의 오른쪽에 있습니다.
- 주문 명령 할 수 없다 하위 쿼리에 사용됩니다. 그룹바이 명령을 사용하면 ORDER BY 명령과 동일한 기능을 수행할 수 있습니다.
- 단일 행 하위 쿼리에 단일 행 연산자를 사용합니다. 다중 행 하위 쿼리와 함께 다중 행 연산자를 사용합니다.
통사론: 하위 쿼리에는 일반적인 구문이 없습니다. 그러나 하위 쿼리는 아래와 같이 SELECT 문과 함께 가장 자주 사용되는 것으로 나타났습니다.
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>
샘플 테이블 :
데이터 베이스
| 이름 | ROLL_NO | 위치 | 전화 번호 |
|---|---|---|---|
| 램 | 101 | 첸나이 | 9988775566 |
| 주권 | 102 | 코임바토르 | 8877665544 |
| 사시 | 103 | 마두라이 | 7766553344 |
| 치료 | 104 | 세일럼 | 8989898989 |
| 수마티어 | 105 | 칸치푸람 | 8989856868 |
학생
| 이름 | ROLL_NO | 부분 |
|---|---|---|
| 치료 | 104 | ㅏ |
| 수마티어 | 105 | 비 |
| 주권 | 102 | ㅏ |
샘플 쿼리
:
- 섹션이 A인 DATABASE 테이블에서 학생의 NAME, LOCATION, PHONE_NUMBER를 표시하려면
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
- 설명 : 첫 번째 하위 쿼리는 SECTION='A'인 STUDENT 테이블에서 SELECT ROLL_NO를 실행하고 SECTION이 'A'인 STUDENT 테이블에서 ROLL_NO를 반환합니다. 그런 다음 외부 쿼리가 이를 실행하고 ROLL_NO인 학생의 DATABASE 테이블에서 NAME, LOCATION, PHONE_NUMBER를 반환합니다. 내부 하위 쿼리에서 반환됩니다. 산출:
| 이름 | ROLL_NO | 위치 | 전화 번호 |
| 치료 | 104 | 세일럼 | 8989898989 |
| 주권 | 102 | 코임바토르 | 8877665544 |
- 쿼리 삽입 예:
표1: 학생1
| 이름 | ROLL_NO | 위치 | 전화 번호 | |
|---|---|---|---|---|
| 램 | 101 | 첸나이 | 9988773344 | |
| 라주 | 102 | 코임바토르 | 9090909090 | |
| 치료 | 103 | 살렘 | 8989898989 |
표2: 학생2
| 이름 | ROLL_NO | 위치 | 전화 번호 | |
|---|---|---|---|---|
| 주권 | 111 | 첸나이 | 8787878787 | |
| 까지 | 112 | 뭄바이 | 6565656565 | |
| 스리 | 113 | 코임바토르 | 7878787878 |
- Student2를 Student1 테이블에 삽입하려면:
INSERT INTO Student1 SELECT * FROM Student2;>
- 산출:
| 이름 | ROLL_NO | 위치 | 전화 번호 | |
|---|---|---|---|---|
| 램 | 101 | 첸나이 | 9988773344 | |
| 라주 | 102 | 코임바토르 | 9090909090 | |
| 치료 | 103 | 살렘 | 8989898989 | |
| 주권 | 111 | 첸나이 | 8787878787 | |
| 까지 | 112 | 뭄바이 | 6565656565 | |
| 스리 | 113 | 코임바토르 | 7878787878 |
- 롤번호가 Student1 테이블과 동일하고 위치가 첸나이인 Student2 테이블에서 학생을 삭제하려면
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
- 산출:
1 row delete successfully.>
- Student2 테이블을 표시합니다.
| 이름 | ROLL_NO | 위치 | 전화 번호 | |
|---|---|---|---|---|
| 까지 | 112 | 뭄바이 | 6565656565 | |
| 스리 | 113 | 코임바토르 | 7878787878 |
- Student1 테이블의 Raju,Ravi와 위치가 동일한 Student2 테이블의 괴짜로 학생의 이름을 업데이트하려면
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
- 산출:
1 row updated successfully.>
- Student2 테이블을 표시합니다.
| 이름 | ROLL_NO | 위치 | 전화 번호 | |
|---|---|---|---|---|
| 까지 | 112 | 뭄바이 | 6565656565 | |
| 괴짜 | 113 | 코임바토르 | 7878787878 |