본문 바로가기

IT

[SQL] JOIN 의 종류와 사용법

반응형

 테이블과 테이블의 데이터를 공통사항으로 연결하여 보여주는 경우 사용하는 예약어입니다.


 사용하는 형태는 INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN 으로 3가지 방법이 존재합니다.


 간단히 DB를 구성하고 예제를 통하여 알아보겠습니다.


/** 테이블 생성과 데이터 입력 **/
USE [U_TEST]
GO
/****** Object:  Table [dbo].[T_USER]    
Script Date: 10/15/2013 13:31:27 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

-- T_USER 테이블 생성
CREATE TABLE [dbo].[T_USER](
	[C_GENDER] [char](1) NOT NULL,
	[C_NAME] [nvarchar](50) NOT NULL
) ON [PRIMARY]

GO

-- T_USER 테이블에 데이터 입력
INSERT INTO [U_TEST].[dbo].[T_USER]
           ([C_GENDER]
           ,[C_NAME])
     VALUES
           ('M', '김은중')
           , ('F', '유혜진')
           , ('U', '외계인')
           , ('M', '홍길동')
GO

-- T_GENDER 테이블 생성
CREATE TABLE [dbo].[T_GENDER](
	[C_GENDER] [char](1) NOT NULL,
	[C_DESC] [nvarchar](50) NOT NULL
) ON [PRIMARY]

GO

-- T_GENDER 테이블에 데이터 입력
INSERT INTO [U_TEST].[dbo].[T_GENDER]
           ([C_GENDER]
           ,[C_DESC])
     VALUES
           ('M', '남자')
           , ('F', '여자')
           , ('A', '동물')
GO

SET ANSI_PADDING OFF
GO

 간단히 테스트 데이터를 생성하였습니다.


 아래 쿼리를 이용하여 데이터를 조회해 봅니다.

-- INNER JOIN
SELECT *
FROM T_USER AS A
INNER JOIN T_GENDER AS B
	ON A.C_GENDER = B.C_GENDER;

-- LEFT OUTER JOIN
SELECT *
FROM T_USER AS A
LEFT OUTER JOIN T_GENDER AS B
	ON A.C_GENDER = B.C_GENDER;

-- RIGHT OUTER JOIN
SELECT *
FROM T_USER AS A
RIGHT OUTER JOIN T_GENDER AS B
	ON A.C_GENDER = B.C_GENDER;

-- FULL OUTER JOIN
SELECT *
FROM T_USER AS A
FULL OUTER JOIN T_GENDER AS B
	ON A.C_GENDER = B.C_GENDER;


 결과는 이미지로 첨부합니다.





 1. INNER JOIN 시 T_USER 테이블에 3개의 데이터가 존재하는데 T_GENDER의 테이블과 정확하게 매칭되는 데이터만 출력되었습니다. 가운데 나온 데이터의 '외계인'이 보이지 않는 군요. INNER JOIN의 경우 'ON' 예약어에서 조건을 걸어놓은 사항에 양쪽 테이블을 기준으로 모두 데이터가 조합이 되는 데이터만 출력이 됩니다.


 2. LEFT OUTER JOIN 시 T_USER 테이블의 데이터는 모두 정상적으로 출력되었는데 'U/외계인/null/null' 이라는 결과값이 보이는 군요. LEFT OUTER JOIN시에는 T_USER의 모든 정보를 정상적으로 출력하도록하고, 'ON' 예약어에서 조건을 걸어놓은 사항에 부합하지 않는 데이터는 null 로 표시가 되는군요.


 3. RIGHT OUTER JOIN 시 T_USER 테이블의 데이터가 모두 나오지 않고 INNER JOIN 처럼 '외계인'이 빠져있습니다. LEFT OUTER JOIN과는 반대로 T_GENDER에만 존재하는 데이터가 있으면 그 데이터까지 출력하는군요.


 4. FULL OUTER JOIN 시 LEFT OUTER JOIN, RIGHT OUTER JOIN 한 결과를 합치고, 중복데이터는 한번만 나오도록 한 것과 같은 모습이네요.


 CROSS JOIN 도 존재하지만 단순 테이블조합으로 경우의 수를 구하는 정도의 의미밖에 없어서 제외하였습니다.


 JOIN에 이런식으로 여러가지 방식을 만들어 놓은 이유는, 조건에 따라서 도출해야 하는 데이터가 NULL인 경우라도 원하는 기준에 따라서 꼭 필요하기 때문이라 생각합니다.


끝.


반응형