나만의 작은 도서관

[SQL] 기초 4. 서브쿼리(SubQuery)와 조인(JOIN) 본문

Common/MySQL

[SQL] 기초 4. 서브쿼리(SubQuery)와 조인(JOIN)

pledge24 2024. 4. 11. 17:14
유의사항: 해당 글은 MySQL 문법을 기반으로 작성된 글입니다. 다른 SQL과 다른 부분이 있을 수 있습니다.

 

개요

 

두 개 이상의 테이블을 이용한 쿼리문 작성 방법에는 두 가지 방법이 있다. 첫번째로는 쿼리에 또다른 쿼리를 중첩하여 사용하는 서브쿼리 (SubQuery) , 두번째로는 서로 다른 테이블들을 합쳐 사용하는 조인(JOIN)이 있다. 오늘은 이 2개, 서브쿼리와 조인에 대해 알아보자.


서브쿼리

서브쿼리(SubQuery)는 SQL문 안에 또다른 SQL문이 중첩된 쿼리를 말한다. 가공한 테이블을 다시 한 번 가공해야 할 때 사용한다. 서브쿼리는 쿼리가 어느 절에 들어가느냐에 따라 종류가 달라지는데, 크게 SELECT 서브쿼리, FROM 서브쿼리, WHERE 서브쿼리로 분류한다.

 

서브쿼리의 종류

명칭 위치 설명
스칼라 서브쿼리 SELECT 절 단일 값을 반환하기 때문에 스칼라 서브쿼리라 부른다.
인라인 뷰 FROM 절 뷰(view)형태로 반환하기 때문에 인라인 뷰라고 부른다.
중첩쿼리 WHERE 절 WHERE 절에서 사용한 연산자와 같이 사용되며 결과를 제한하기 위해 사용한다. 

 

스칼라 서브쿼리( SELECT 절 서브쿼리 )

메인쿼리의 SELECT 절에 들어간 서브쿼리이다.

서브쿼리의 결과값은 단일 행, 단일 열의 스칼라 값을 반환한다.(여러 행을 또는 여러 열을 가지는 결과값은 DBMS가 어떤 값을 반환해야 할 지 알 수 없어 오류가 난다.)

SELECT 컬럼1, (서브쿼리), 컬럼2, ...
FROM 테이블
WHERE 조건

 

인라인 뷰( FROM 절 서브쿼리)

 

메인쿼리의 SELECT 절에 들어간 서브쿼리이다.

일시적으로 만들어진 테이블을 칭하는 뷰(view)를 인라인 형식으로 만들었다해서 인라인 뷰라는 이름이 붙었다.(인라인(inline)은 함수로 따로 빼두지 않고 프로그램 내에 그대로 적어 쓰는 방식을 말한다.)

작성한 인라인 뷰는 메인 쿼리문에서 보통의 테이블과 동일하게 사용 할 수 있다.

SELECT 컬럼1, 컬럼2, ...
FROM (서브쿼리) 
WHERE 조건

 

중첩쿼리( WHERE 절 서브쿼리)

 

메인쿼리의 SELECT 절에 들어간 서브쿼리이다.

WHERE절은 보통 컬럼과 술어 연산자가 함께 사용되는데 중첩쿼리는 컬럼 자리에 서브쿼리가 들어간 경우이다. (컬럼 대신들어간 것 뿐이기에 단일 데이터 자리에 다중 데이터가 들어가면 안된다. )

SELECT 컬럼1, 컬럼2, ...
FROM 테이블
WHERE 컬럼 OP (서브쿼리)

조인

조인은 두 개 이상의 테이블을 하나로 합쳐 질의를 하는 방법이다. 앞서 보았던 서브쿼리와는 다르게 쿼리문은 하나만 나타난다. 

 

조인의 종류

조인은 크게 내부조인, 외부조인으로 나눈다.

내부조인은 각 테이블에서 일치하는 데이터만 조인하는 것을 의미하며, 외부조인은 일치하지 않는 일부 데이터를 포함하는 조인을 의미한다.(추가로, 카티션은 조건없이 가능한 모든 조합을 나타내는 것을 의미한다.)

 

각 조인의 종류는 다음과 같다.

구분 종류 문법 범위
내부조인 내부 SELECT * FROM A, B ON A.KEY = B.KEY A ∩ B
SELECT * FROM A INNER JOIN B ON A.KEY = B.KEY
외부조인 SELECT * FROM A FULL JOIN B ON A.KEY = B.KEY A ∪ B
왼쪽  SELECT * FROM A LEFT JOIN B ON A.KEY = B.KEY A - B
오른쪽 SELECT * FROM A RIGHT JOIN B ON A.KEY = B.KEY B - A
그 외 카티션 SELECT * FROM A , B  A x B

 

조인의 종류

 

그림출처

https://velog.io/@kon6443/DB-SQL-JOINs-UNION