728x90

다음과 같은 데이터를 가진 SCHOOL과 STUDENT 테이블이 있다.

SELECT * FROM SCHOOL;
SCHOOL_SEQ SCHOOL_NAME
1 길동고등학교
2 우수고등학교
3 영구고등학교
4 짱고등학교

 

 

SELECT * FROM STUDENT;
STUDENT_SEQ GRADE STUDENT_NAME AGE SCHOOL_SEQ
1 1 길동 17 1
2 1 철수 19 1
3 2 영희 18 3
4 2 짱구 18 4
5 2 미선 18 1
6 3 우형 19 2

 

해당 데이터를 가진 테이블들이 주어졌을 때, 길동고등학교에 다니는 제일 나이많은 학생을 제외한 나머지의 학교명, 학생명, 나이, 학년을 구하는 경우

 

1. 서브 쿼리를 이용해 조인하는 경우

SELECT B.SCHOOL_NAME,
       A.STUDENT_NAME,
       A.AGE,
       A.GRADE
  FROM STUDENT A, SCHOOL B
WHERE A.SCHOOL_SEQ = B.SCHOOL_SEQ
AND B.SCHOOL_SEQ = 1
AND B.AGE < (
    SELECT MAX(AGE)
      FROM STUDENT
       AND SCHOOL_SEQ = 1
  GROUP BY AGE
);

 

2. EXISTS를 이용해 값을 구하는 경우

SELECT B.SCHOOL_NAME,
       A.STUDENT_NAME,
       A.AGE,
       A.GRADE
  FROM STUDENT A, SCHOOL B
WHERE A.SCHOOL_SEQ = B.SCHOOL_SEQ
AND B.SCHOOL_SEQ = 1
AND NOT EXISTS (
    SELECT MAX(AGE)
      FROM STUDENT
       AND SCHOOL_SEQ = 1
  GROUP BY AGE
);

막상 예시로 작성하려는 데이터 및 쿼리에서는 큰 차이가 나지 않는다.

728x90
TOP