Day35 - 스칼라 서브쿼리

2021. 4. 5. 12:39Oracle 공부

이번에는 스칼라 서브쿼리에 대해서 알아 봅시다.

 

스칼라 서브쿼리

저번 시간에 알아 보았던, "단일 행 서브쿼리 / 다중 행 서브쿼리" 는 WHERE 옆에 위치 했었죠?

 

스칼라 서브쿼리는 SELECT 옆에 위치 합니다.

 

스칼라 서브쿼리는 LEFT OUTER JOIN 과 결과값이 똑같습니다.

 

하지만, JOIN 하는 것보다 성능이 우수합니다.

그 이유는, JOIN은 테이블을 전부 읽어서 데이터를 가져오지만, 스칼라 서브쿼리는 테이블의 필요한 부분만 읽어서 데이터를 가져오기 때문입니다.

 

그러면, 어떻게 사용하는지 한 번 알아 봅시다. 

※스칼라 쿼리를 사용할 경우에 *를 사용한다면, 어떤 테이블의 정보인지를 명시해 주셔야 합니다.

 

스칼라 서브쿼리 뿐 아니라, 서브쿼리를 사용할 때는 () 안에 사용해 주셔야 합니다.

WHERE 절에 어떻게 join을 할건지 명시 해 주어야 합니다.

결과가 1개의 속성(column)이 되도록 해주어야 합니다.

- 위의 스칼라 서브쿼리를 사용한 구문을 아래와 같이 LEFT OUTER JOIN 으로 바꾸어 보았습니다.

즉, JOIN 은 테이블을 전부 가져와서 표현만 SELECT에 표시 된 열만 하는 것(실제로 조인한 테이블의 정보를 가지고 있음). 스칼라 서브쿼리는, 해당 열만 가져오는 것(조인한 테이블의 해당 열의 정보만 가지고 있음) 입니다.

 

LEFT OUTER JOIN을 사용한 구문을 스칼라 서브쿼리를 사용한 구문으로 바꾸어 봅시다.

ON 절에 온 것을 스칼라 서브쿼리의 WHERE 절에 넣어 주면 됩니다.

ORDER BY 구문은 넣어도 되고 안 넣어도 되는데, 스칼라 서브쿼리를 사용하면, 기본키를 기준으로 자동 오름차순 정렬이 되어 있더라구요 ㅎㅎ;

 

- 스칼라 서브쿼리를 다중으로 사용할 수 있습니다.

계속 같은 테이블의 속성(column)을 가져오더라도, ()안에서는 테이블을 항상 새로 써주어야 합니다.

하지만, 이처럼 같은 테이블의 속성을 여러개 가져올 경우에는 JOIN 을 사용하는게 더 효율적 일 수 있습니다.

 

- 스칼라 서브쿼리 안에, GROUP 함수를 사용할 수 있습니다.

위와 같이, 서브쿼리 안에, GROUP 함수를 사용할 수 있고, GROUP BY 를 사용할 수도 있습니다.

NVL 은 만약, null 이라면 0으로 바꾸기 위해서 사용 했습니다.

 

이렇게, 스칼라 서브쿼리에 대해서 알아 보았습니다.

 

고생하셨습니다.