관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

서브쿼리 심화 3 - 반환되는 데이터 형식에 따른 서브쿼리 분류 3 : 다중 행 서브쿼리 1 <이론 학습 및 실습 문제 풀기> 본문

알고리즘 및 자료 관리/SQL

서브쿼리 심화 3 - 반환되는 데이터 형식에 따른 서브쿼리 분류 3 : 다중 행 서브쿼리 1 <이론 학습 및 실습 문제 풀기>

huenuri 2024. 10. 23. 19:12

다중 행 서브쿼리에 대해서 공부해보려고 한다.


 

 

 

 

이론 3 - 반환되는 데이터 형식에 따른 서브쿼리 분류 : 다중 행 서브쿼리

 

 

 

 

 

 

 

 

 

 

 

ID가 품질이나 영업이므로 DEPARTMENT_ID가 2와 3이 출력된다. 그런 다음 EMPLOYEE에 이 값이 포함되는지 파악하면 된다. IN은 앞의 있는 값이 뒤에 있는 값에 포함되는지 여부를 판단한다.

 

 

 

 

 

SALARY가 10000이 넘는지 존재 여부를 물었으므로 참이 되어 ELICE가 출력된다. JESSICA와 STEVE는 DEPARTMENT_ID가 1이 아니고 10000이 넘지 않으므로 출력되지 않는다.

LINDA는 ID값이 1이므로 EXIST에 만족이 되어 출력된다. 즉, EXIST는 뒤에 있는 쿼리가 어떤 값을 반환하는지는 신경 쓸 필요가 없다. 단지 서브쿼리 결과값이 존재하느냐 안 하느냐에 신경을 쓴다. EXIST 옆에 어떤 값을 써도 된다.

 

 

 

 

 

 

DEPARTMENT_ID가 1인 모든 것을 출력한다. 12000보다 큰 값은 ELICE밖에 없으므로 ELICE만 출력된다.

 

 

 

 

 

 

이 3개의 값 중 하나만 만족하면 된다. 크거나 같은 값은 모두 해당되므로 모든 NAME이 출력된다.


 

 

 

 

 

실습 4 - 반환되는 데이터 형식에 따른 서브쿼리 분류 : 다중 행 서브쿼리 IN

 

 


 

 

 

 

1. 두 개의 테이블 조회하기

 

 

 

요청 상태가 실패인 요청 ID를 얻어서 그 요청에 대한 상세정보를 알아보는 쿼리를 작성해볼 것이다. 테이블에른 총 3개의 데이터가 있다.


 

 

 

 

2. 요청상태가 FAILED인 요청 ID 구하기

 

 

 

요청 ID가 FAILED인 것은 3개가 출력된다.


 

 

 

 

3. 해당 요청들에 대한 요청 상세 정보를 조회하되 이전의 쿼리 포함하기

 

 

 

요청 상세 정보까지 모두 출력되었다.

 

 


 

 

 

 

 

실습 5 - 반환되는 데이터 형식에 따른 서브쿼리 분류 : 다중 행 서브쿼리 EXIST

 

 


 

 

 

 

1. 두 테이블 조회하기

 

 

 

PAYMENT 테이블에서 결제금액이 5,000원 이상이고 STORE 테이블의 가게 ID와 일치하는 데이터가 존재하는 경우의 가게 ID와 가게 이름을 조회해볼 것이다.


 

 

 

 

2. EXIST를 활용하여 결제금액이 5,000원 이상인 가게 ID, 가게이름 조회하기

 

 

 

근데 무슨 오류가 뜨고 있다. 코드를 다시 수정해보겠다. 이 내용을 해석하면 MariaDB에서는 '0'을 사용할 수 없다는 뜻 같다.


 

 

 

 

3. 코드 다시 수정하기

 

 

 

EXIST라고 썼는데 정확한 스펠링은 EXISTS이다. 문자열로 사용했던 부분을 그냥 숫자로 바꾸었더니 이제는 잘 출력이 된다. 

 


 

 

 

 

학습을 마치고

서브쿼리는 전에도 SQL 기초 과정을 할 때도 잘 이해를 못 했던 부분이었다. 그러다 보니 한 문제를 푸는데 무척 어렵다. 그래도 처음보다는 많이 이해하고 있으니 포기하지 말고 끝까지 공부해 볼 것이다.

아직 실습 문제가 2문제 남아있는데 이건 다음 포스트에 이어서 하려고 한ㄷ.