본문 바로가기

SQL/교육,실습

SQL데이터 분석 첫걸음 실습 (서브 쿼리)

day9 은

조건에 조건 더하기

SELECT절의 서브 쿼리

FROM절의 서브 쿼리

WHERE절의 서브 쿼리

의 항목들을 조건에 조건 더하기 라는 주제로 교육을 마저 진행하였다.

오늘 배운 교육을 바탕으로 실습을 진행해 보겠다.

 

오늘은 여러 테이블의 데이터를 한 번에 조회해 볼 것이다.

주어지는 테이블은 이 테이블을 참고 할 것이다.

먼저 서브쿼리의 특징을 먼저 정리하고 시작하겠다.

§ 하나의 쿼리 내 포함된 또 하나의 쿼리를 의미합니다.

§ 서브 쿼리는 반드시 괄호 안에 있어야 합니다.

§ SELECT, FROM, WHERE, HAVING, ORDER BY 절에 사용 가능합니다.

§ INSERT, UPDATE, DELETE 문에도 사용 가능합니다.

§ 서브쿼리에는 ; (세미 콜론)을 붙이지 않아도 됩니다.

 

SELECT절의 서브 쿼리

§ 스칼라 서브쿼리라고도 합니다.

§ SELECT절의 서브 쿼리는 반드시 결과값이 하나의 값 이어야 합니다.

 

FROM절의 서브 쿼리

§ 인라인 뷰 서브쿼리라고도 합니다.

§ FROM절의 서브 쿼리는 반드시 결과값이 하나의 테이블이여야 합니다.

§ 서브 쿼리로 만든 테이블은 반드시 별명을 가져야 합니다

 

WHERE절의 서브 쿼리

§ 중첩 서브쿼리라고도 합니다.

§ WHERE절의 서브 쿼리는 반드시 결과값이 하나의 컬럼 이어야 합니다. (EXISTS 제외)

  하나의 컬럼에는 여러 개의 값이 존재할 수 있습니다.

§ 연산자와 함께 사용합니다.

  보통 WHERE [컬럼 이름] [연산자] [서브 쿼리] 형식으로 사용합니다.

 

실습1

내 포켓몬 중에 몸무게가 가장 많이 나가는 포켓몬의 번호를 가져와 주세요. 

where절 서브쿼리를 이용하여 가장 몸무게가 높은 포켓몬을 가져오고

그 포켓몬을 where절에서 비교연산자를 통해 추출하였다.

 

실습1 쿼리문
실행 결과

 

실습2

속도가 모든 전기 포켓몬의 공격력보다 하나라도 작은 포켓몬의 번호를 가져와 주세요

하나라도 있다면 가져오는 것이기에 ANY함수를 사용하였고

비교연산자를 통해 서브쿼리에서의 값을 통해 원하는 값을 추출하였다.

실습2 쿼리문
실행 결과

실습3

공격력이 방어력보다 큰 포켓몬이 있다면 모든 포켓몬의 이름을 가져와 주세요

where절에 서브쿼리를 exists를 활용해 추출하였다.

실습3 쿼리문
실행 결과

 

실습4

이브이의 번호 133을 활용해서, 이브이의 영문 이름, 키, 몸무게를 가져와 주세요. 이 때, 키는 height, 몸무게는 weight이라는 별명으로 가져와 주세요

height와 weight는 name 과 다른 테이블에 존재하기 때문에 

select 서브쿼리절을 이용하여 키와 몸무게를 ability 테이블에서 추출한 후 

마지막 where절에서 번호 133을 활용해 값을 추출한다.

실습4 쿼리문
실행 결과

 

실습5

속도가 2번째로 빠른 포켓몬의 번호와 속도를 가져와 주세요

from 절 서브쿼리를 활용하여 속도가 빠른 순서의 컬럼을 하나 만들고 

그 컬럼을 이용하여 2번째로 빠른 순서의 포켓몬을 추출한다

여기서 주의할 점은 from 절 서브쿼리는 반드시 별명을 붙여야 한다.

실습5 쿼리문
실행 결과

 

실습6

방어력이 모든 전기 포켓몬의 방어력보다 큰 포켓몬의 이름을 가져와 주세요

이름을 가져오기 때문에 2번째 줄까지는 문제가 없지만

3번째 줄에서 많이 어려움을 느꼈다. 

먼저 where 절 서브쿼리를 이용해야하는데

테이블의 공통 컬럼인 number 를 이용하여 그 number 로 조건을 입력한 후 

다시 서브쿼리를 만들어 자세한 조건을 추출하여 값을 넣는다.

실습6 쿼리문
실행 결과