Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

노승현

테이블을 통합하는 조인 본문

DATABASE/SQL 입문

테이블을 통합하는 조인

nsh95 2023. 12. 25. 15:43

 

테이블을 2개 이상 조인한다는 의미?

 

SQL 데이터베이스에서 조인은 두 개 이상의 테이블 간에 관련된 데이터를 결합하는 데 사용되는 중요한 기능입니다. 조인을 사용하면 데이터베이스에서 하나의 쿼리로 여러 테이블의 정보를 검색할 수 있습니다. 주로 관계형 데이터베이스에서 사용되며, 테이블 간의 관계를 나타내는 외래 키(Foreign Key)를 기반으로 동작합니다.

 

 

내부조인의 기본 형식

 

SELECT [열 이름]

FROM [테이블 1]

INNER JOIN [테이블2] ON [테이블 1.열] = [테이블 2.열] 

WHERE [검색 조건]

 

 

INNER JOIN (내부 조인): 이는 조인 조건에 부합하는 행만 반환합니다. 즉, 두 테이블 간의 공통된 값이 있는 행만을 결합합니다.

 

 

ON 문과 WHERE 문의 차이 

두 구문은 데이터를 필터링한다는 점에서는 역할이 비슷해 보이지만 실제는 완전히 다르다.

ON 문은 조인할 떄 조인 조건을 위해 사용하며, WHERE 문은 조인을 완료한 상태에서 조건에 맞는 값을 가져오고자 상요한다. 

물론 ON 문에 조건을 다양하게 부여해 WHERE 문과 같은 효과를 내게 할 수도 있지만 조인 조건을 만족하는 데이터 매칭 과정에서

오차가 발생하므로 그렇게 해서는 안된다. 반드시 ON 과 WHERE 문의 성격을 분리해 사용하자.

 

 

LEFT JOIN (왼쪽 조인) 또는 LEFT OUTER JOIN (왼쪽 외부 조인): 왼쪽 테이블의 모든 행과 조인 조건에 부합하는 오른쪽 테이블의 행을 반환합니다. 오른쪽 테이블에 일치하는 값이 없으면 NULL 값이 반환됩니다.

 

SELECT [열 이름]

FROM [테이블 1]

<LEFT, RIGHT, FULL> OUTER JOIN [테이블 2] ON [테이블 1.열] = [테이블 2.열]

WHERE [검색 조건]

 

 

교차 조인

 

자주 사용하지는 않지만, 각 테이블의 모든 경우의 수를 조합한 데이터가 필요할 경우 교차조인을 사용할 수 있다.

교차 조인은 카르테시안 곱 이라고도 한다.

 

교차 조인의 기본 형식

 

SELECT [열 이름]

FROM [테이블 1]

CROSS JOIN [테이블 2]

WHERE [검색 조건]

 

 

서브 쿼리

 

서브쿼리의 특징

반드시 소괄호로 감싸 사용한다.

주 쿼리를 실행하기 전에 1번만 실행된다.

비교 연산자에 서브 쿼리를 사용하는 경우 서브 쿼리를 오른쪽에 기술해야 한다.

내부에는 정렬 구문인 ORDER BY 문을 사용할 수 없다.

 

 

WHRER 문에 서브 쿼리 사용하기

-서브 쿼리 중에서도 WHERE 문에 사용하는 서브 쿼리를 중첩 서브 쿼리라고 부른다.

-중첩 서브 쿼리는 조건문의 일부로 사용한다.

-중첩 서브 쿼리는 또 다른 SELECT 문을 사용한 결과를 주 쿼리의 조건값으로 사용한다.

-서브 쿼리를 비교 연산자 =, <, <=, >, >=, <>와 함께 사용할 때는 반드시 서브 쿼리의 반환 결과가 1건 이하여야한다.

-만약 서브 쿼리의 반환 결과가 2건 이상인 경우에는 비교 연산자가 아닌 다중 행 연산자를 사용해야 한다.

 

단일행 서브 쿼리

단일 행 서브 쿼리란 서브 쿼리의 결과가 1행만 반환되는 쿼리이다.

 

SELECT [열 이름]

FROM [테이블]

WHERE [열] = (SELECT [열] FROM [테이블])

 

 

다중 행 서브 쿼리

다중 행 서브 쿼리란 서브 쿼리에서 반환되는 결과가 2행 이상인 경우를 말한다. 이처럼 서브 쿼리가 다중 행을 반환하는 경우 여러가지

방법 을 사용할 수 있다.

 

 

 

IN 문, NOT IN 문

 

SELECT [열 이름]

FROM [테이블]

WHERE [열] IN (SELECT [열] FROM [테이블])

 

 

ANY 문

 서브쿼리 결과에서 값이 하나라도 만족하는 조건을 검색한다.

 

SELECT [열 이름]

FROM [테이블]

WHERE [열] = ANY (SELECT [열] FROM [테이블] WHERE [열] IN('조건'))

 

 

EXISTS 문, NOT EXISTS 문

EXISTS 문은 조건의 결과값이 있는지 없는지를 확인해 1행이라도 있으면 TRUE, 없으면 FALSE 반환한다.

 

SELECT [열 이름]

FROM [테이블]

WHERE [열] EXISTS (SELECT [열] FROM [테이블] WHERE [열] ('조건'))

 

 

 

FROM 문에 서브 쿼리 사용하기

FROM 문에 사용하는 서브 쿼리 결과는 조인할 수 있으므로 쿼리를 논리적으로 격리할 수 있다.

인라인뷰 inline view 라고 한다.

기본 형식에는 INNER JOIN과 OUTER JOIN을 사용할 수 있다.

[FROM 문에 사용하는 서브 쿼리의 기본 형식]

SELECT [열 이름]

FROM [테이블] AS a

INNER JOIN (SELECT [열] FROM [테이블] WHERE [열] = [값]) AS b ON [a.열] = [b.열]

WHERE [열] = [값]

INNER JOIN을 인라인뷰에 활용했다

소괄호로 묶은 쿼리가 인라인뷰 == 격리했다.

SELECT 문에 서브 쿼리 사용하기

SELECT문에 사용하는 서브쿼리는 반드시 1개의 행을 반환해야 하므로 SUM,COUNT, MIN, MAX 등의 집계 함수와 함께 사용하는 경우가 많다.

하지만 이렇게 하면 성능 문제가 생기기 쉬워서 SELECT문에서는 서브쿼리를 집계함수와 함께 사용하지 않는게 좋다.

SELECT문에 사용된 서브쿼리는 스칼라 서브 쿼리라고 부르며, 스칼라 서브쿼리는 1개 이상 사용할 수 있다.

[스칼라 서브 쿼리의 기본 형식]

SELECT [열 이름],

(SELECT <집계 함수> [열 이름] FROM [테이블 2]

WHERE [테이블 2.열] = [테이블 1.열]) as Alias

FROM [테이블 1]

WHERE [조건]

'DATABASE > SQL 입문' 카테고리의 다른 글

SQL 날짜 함수  (0) 2023.12.29
다양한 SQL 함수 사용하기  (0) 2023.12.28
SQL Server 에서 다루는 자료형  (0) 2023.12.24
데이터 생성하고 데이터 조작하기  (0) 2023.12.24
SELECT 문으로 데이터 검색하기  (0) 2023.12.24