코딩두의 포트폴리오

10. MySQL 데이터베이스 서브 쿼리와 JOIN 본문

STEP 특화교육/MySQL 데이터베이스 기초와 Web 활용

10. MySQL 데이터베이스 서브 쿼리와 JOIN

코딩두 2025. 5. 24. 18:37

서브 쿼리(Sub Query)

1. 서브 쿼리의 개념

- 하위 쿼리라고도 함

- 쿼리문 내에 쿼리문이 포함된 형태

 

2. 서브 쿼리의 형식

SELECT 칼럼명 FROM 테이블명 WHERE 조건

(SELECT 칼럼명 FROM 테이블명 WHERE 조건);

- 괄호 안의 조건에 부합되는 결과가 상위 칼럼의 조건으로 작용하여 쿼리를 실행

 

3. 서브 쿼리 예시

ex) account 테이블에서 amount 칼럼 값 중 10보다 큰 데이터를 출력할 경우

1) 서브 쿼리를 사용하지 않을 경우

(1) 쿼리문

(2) 실행 결과

 

2) 서브 쿼리를 사용할 경우

(1) 쿼리문

(2) 실행 결과

 

4. 서브 쿼리의 옵션

1) ANY

- 서브 쿼리 조건에 해당하는 값이 여러 개일 때 상위 쿼리 조건 결과에서 복수의 서브 쿼리 조건에 해당하는 결과 모두 출력하는 옵션

 

2) ALL

- 서브 쿼리 조건에 해당하는 값이 여러 개일 때 상위 쿼리 조건 중 서브 쿼리 조건에 해당하는 결과와 동시 만족하는 값만 출력하는 옵션

 

3) ANY 옵션 적용 예시

ex) 5월 10일에 발생한 amount 값보다 낮은 데이터를 구하고자 할 경우

 

(1) ANY 옵션 적용

* 쿼리문

SELECT list, amount FROM account WHERE amount <

ANY (SELECT amount FROM account WHERE date = '05-10' );

 - 서브 쿼리에 해당하는 값은 20, 250임 (하나 이상의 값)

 - 서브 쿼리에 해당하는 값이 복수일 때 ANY 또는 ALL의 옵션 미적용 시 에러가 발생

* 실행 결과

 - amount 값 중 20보다 낮은 값과 250보다 낮은 값 중 하나라도 일치하면 출력됨

 

(2) ALL 옵션 적용

* 쿼리문

SELECT list, amount FORM account WHERE amount <

ALL (SELECT amount FROM account WHERE date = '05-10');

* 실행 결과

 - amount 값 중 20보다 낮은 값과 250보다 낮은 값 조건 모두 해당되는 값이 출력됨

 

JOIN의 개요

1. JOIN의 개념

- 두 개 이상의 DB나 테이블을 연결하여 출력

- DB에서 두 개 이상의 테이블 비교하여 집합으로 엮어내는 기능

- 두 개 이상 테이블에서 주로 Key 값으로 비교를 하지만 일반 칼럼으로도 비교 가능

 

JOIN의 종류

1. INNER JOIN

1) 개념 - 두 개의 테이블을 비교하여 공통 요소만 결합하여 출력하는 JOIN

 

2) 쿼리 형식 

SELECT * FROM 테이블 A INNER JOIN 테이블B

ON 테이블 A.칼럼 = 테이블 B.칼럼;

 

3) 개념도

 

4) 적용 에

 (1) 기본 테이블

  - account 테이블(테이블 A에 해당)

  - pay 테이블(테이블 B에 해당)

 

(2) 쿼리문

SELECT * FROM account INNER JOIN pay

ON account.list=pay.subject;

 

(3) 실행 결과

 

2. LEFT JOIN

1) 개념

두 개의 테이블을 비교하여 왼쪽의 테이블의 모든 데이터와 함께 오른쪽 테이블의 데이터 중 왼쪽 테이블 데이터와 일치하는 데이터를 포함시키는 JOIN

 

2) 쿼리 형식

SELECT * FROM 테이블A LEFT JOIN 테이블 B

ON 테이블A.칼럼 = 테이블B.칼럼

 

3) 개념도

 

4) 적용 예

 (1) 기본 테이블

  - account 테이블(테이블 A에 해당)

  - pay 테이블(테이블 B에 해당)

 

(2) 쿼리문

SELECT * FROM account LEFT JOIN pay

ON account.list=pay.subject;

 

(3) 실행 결과

 

3. LEFT JOIN 응용

1) 개념

- 두 개의 테이블을 비교하여 왼쪽의 테이블의 모든 데이터 중 오른쪽 테이블과 중복되는 데이터를 제외시키는 JOIN

- WHERE 조건식 사용

 

2) 쿼리 형식

SELECT * FROM 테이블A LEFT JOIN 테이블B

ON 테이블A.칼럼=테이블B.칼럼 WHERE 테이블B.칼럼 IS NULL;

 

3) 개념도

 

4) 적용 예

 (1) 기본 테이블

  - account 테이블(테이블A에 해당)

  - pay 테이블(테이블 B에 해당)

 

 (2) 쿼리문

내SELECT * FROM account LEFT JOIN pay

ON account.list=pay.subjecvt WHERE pay.subject IN NULL;

 

 (3) 실행 결과

 

4. RIGHT JOIN

1) 개념

- 두 개의 테이블을 비교하여 오른쪽의 테이블의 모든 데이터와 함께 왼쪽 테이블의 데이터 중 오른쪽 테이블 데이터와 일치하는 데이터를 포함시키는 JOIN

 

2) 쿼리 형식

SELECT * FROM 테이블A RIGHT JOIN 테이블B

ON 테이블A.칼럼=테이블B.칼럼;

 

3) 개념도

 

4) 적용 예

 (1) 기본 테이블

  - account 테이블(테이블 A에 해당)

  - pay 테이블(테이블 B에 해당)

 

 (2) 쿼리문

SELECT * FROM account RIGHT JOIN pay

ON account.list=pay.subject;

 

 (3) 실행 결과

 

5. RIGHT JOIN 응용

1) 개념

- 두 개의 테이블을 비교하여 오른쪽의 테이블의 모든 데이터 중 왼쪽 테이블과 중복되는 데이터를 제외시키는 JOIN

- WHERE 조건식 사용

 

2) 쿼리 형식

SELECT * FROM 테이블A GIGHT 테이블B

ON 테이블A.칼럼=테이블B.칼럼 WHERE 테이블A.칼럼 IS NULL;

 

3) 개념도

 

4) 적용 예

 (1) 기본 테이블

  - account 테이블(테이블 A에 해당)

 (2) pay 테이블(테이블 B에 해당)

 

 (2) 쿼리문

SELECT*FROM account RIGHT JOIN pay

ON account.list=pay.subjecvt WHERE account.list IS NULL;

 

 (3) 실행 결과

 

서로 다른 DB에 속한 테이블 간 JOIN

1. 개념

- 같은 DB 내의 테이블 간 JOIN 뿐 아니라 서로 다른 DB에 위치한 테이블 간 JOIN이 가능함

 

2. JOIN 쿼리

SELECT * FROM 데이터베이스가.테이블 A

데이터베이스나.테이블B WHERE 조건;

- 특정 DB의 테이블 A와 다른 DB의 테이블 B 데이터를 JOIN한다는 의미