전제 조건: SQL의 기초
중첩 쿼리는 하나의 쿼리를 다른 쿼리 내에 포함시켜 복잡한 쿼리를 수행하는 방법입니다. 외부 쿼리는 내부 쿼리 결과에 일부 조건을 적용할 수 있습니다. 우리가 사용하자 학생, 과정, STUDENT_COURSE 중첩 쿼리를 이해하기 위한 표입니다.
학생
정수를 문자열로 변환 java
| S_ID | S_NAME | S_ADDRESS | S_PHONE | 세이지 |
| S1 | 램 | 델리 | 9455123451 | 18 |
| S2 | 라메쉬 | 구르가온 | 9652431543 | 18 |
| S3 | 수지트 | 로탁 | 9156253131 | 이십 |
| S4 | 수레쉬 | 델리 | 9156768971 | 18 |
강의
| C_ID | C_NAME |
| C1 | DSA |
| C2 | 프로그램 작성 |
| C3 | DBMS |
STUDENT_COURSE
| S_ID | C_ID |
| S1 | C1 |
| S1 | C3 |
| S2 | C1 |
| S3 | C2 |
| S4 | C2 |
| S4 | C3 |
중첩 쿼리에는 주로 두 가지 유형이 있습니다.
- 독립적인 중첩 쿼리: 독립 중첩 쿼리에서는 쿼리 실행이 가장 안쪽 쿼리부터 가장 바깥쪽 쿼리까지 시작됩니다. 내부 쿼리의 실행은 외부 쿼리와 독립적이지만 내부 쿼리의 결과는 외부 쿼리 실행에 사용됩니다. IN, NOT IN, ANY, ALL 등과 같은 다양한 연산자는 독립적인 중첩 쿼리를 작성하는 데 사용됩니다.
안에: 우리가 알고 싶다면 S_ID 등록된 사람 C_NAME 'DSA' 또는 'DBMS' 등 독립적인 중첩 쿼리와 IN 연산자를 사용하여 작성할 수 있습니다. 에서 강의 테이블, 우리는 알아낼 수 있습니다 C_ID ~을 위한 C_NAME 'DSA' 또는 DBMS'를 사용할 수 있습니다. C_ID 찾기 위한 거야 S_ID 출신 STUDENT_COURSE 테이블. 1 단계: 발견 C_ID ~을 위한 C_NAME ='DSA' 또는 'DBMS' 선택 C_ID ~에서 강의 어디 C_NAME = 'DSA' 또는 C_NAME = 'DBMS' 2 단계: 사용 C_ID 찾기 위한 1단계 S_ID 선택하다 S_ID ~에서 STUDENT_COURSE 어디 C_ID IN(선택 C_ID ~에서 강의 어디 C_NAME = 'DSA' 또는 C_NAME ='DBMS'); 내부 쿼리는 C1 및 C3 멤버가 포함된 집합을 반환하고 외부 쿼리는 해당 집합을 반환합니다. S_ID 무엇을 위해 C_ID 집합의 모든 구성원(이 경우 C1 및 C3)과 동일합니다. 따라서 S1, S2 및 S4가 반환됩니다. 메모: 이름을 알고 싶다면 학생 'DSA' 또는 'DBMS'에 등록한 경우 다음과 같이 할 수 있습니다. 학생 어디 S_ID IN(선택 S_ID ~에서 STUDENT_COURSE 어디 C_ID IN(선택 C_ID ~에서 강의 어디 C_NAME ='DSA' 또는 C_NAME ='DBMS'));
없음: 우리가 알고 싶다면 S_ID ~의 학생 'DSA'나 'DBMS'에 등록하지 않은 경우 다음과 같이 할 수 있습니다. S_ID ~에서 학생 어디 S_ID 없음(선택 S_ID ~에서 STUDENT_COURSE 어디 C_ID IN(선택 C_ID ~에서 강의 어디 C_NAME ='DSA' 또는 C_NAME ='DBMS')); 가장 안쪽 쿼리는 멤버 C1과 C3이 포함된 집합을 반환합니다. 두 번째 내부 쿼리는 다음을 반환합니다. S_ID 무엇을 위해 C_ID S1, S2 및 S4인 집합(이 경우 C1 및 C3)의 모든 구성원과 동일합니다. 가장 바깥쪽 쿼리는 다음을 반환합니다. S_ID 어디야? S_ID 세트(S1, S2 및 S4)의 구성원이 아닙니다. 따라서 S3을 반환합니다.
- 상호 연관된 중첩 쿼리: 상호 연관된 중첩 쿼리에서 내부 쿼리의 출력은 현재 외부 쿼리에서 실행 중인 행에 따라 달라집니다. 예를 들어; 우리가 알고 싶다면 S_NAME ~의 학생 에 등록되어 있는 분 C_ID 'C1'은 다음과 같이 상호 관련된 중첩 쿼리를 사용하여 수행할 수 있습니다. 학생 S 존재하는 경우(에서 * 선택 STUDENT_COURSE SC, 여기서 S. S_ID =SC. S_ID 그리고 SC. C_ID ='C1'); 각 행에 대해 학생 S, 다음에서 행을 찾습니다. STUDENT_COURSE 어디 S. S_ID =SC. S_ID 그리고 SC. C_ID ='C1'. 만약에 S_ID ~에서 학생 S, 행이 하나 이상 존재합니다 STUDENT_COURSE SC와 C_ID ='C1'이면 내부 쿼리는 true를 반환하고 해당 S_ID 출력으로 반환됩니다.
SQL 코드의 예:
학생이름 선택
학생으로부터
자바가 포함된 mvc학생 ID가 있는 곳(
학생ID 선택
등급에서
WHERE 과목 = '수학' AND 점수> 90
);