DataBase/MsSql
MSSQL JOIN 종류 설명 및 사용 방법
아우럼
2024. 3. 31. 19:00
반응형
MSSQL Join은 두 개 이상의 테이블을 column으로 연결하여 테이블에 저장된 데이터를 출력할 때 사용합니다.
보통은 성능 향상을 위해서 Primary key 혹은 Foreign key로 두 테이블을 join 합니다.
MSSQL Join 특징
INNER JOIN, LEFT OUTER JOIN 등등 특징을 글로 작성하는 것보다는 집합개념을 넣어서 그림으로 먼저 설명하겠습니다.
MSSQL Join 종류 설명 및 사용법
MSSQL Join INNER JOIN 사용법.
- 같은 것만 보여주기 때문에 교집합이라고 생각하시면 됩니다.
- 즉, 중복된 값만 출력할 때 사용합니다.
-- INNER JOIN
SELECT A.EmpID,A.EmpName,A.DeptID,B.DeptID,B.DeptName
FROM UserInfoForJoin A
INNER JOIN DeptInfoForJoin B
ON A.DeptID = B.DeptID
MSSQL Join LEFT OUTER JOIN 사용법.
- 왼쪽 테이블을 기준으로 MSSQL Join을 하므로 출력 값은 ta 테이블의 모든 데이터와 ta 테이블과 tb 테이블의 중복되는 data를 검색할 때 사용합니다.
-- LEFT OUTER JOIN
SELECT A.EmpID,A.EmpName,A.DeptID,B.DeptID,B.DeptName
FROM UserInfoForJoin A
LEFT OUTER JOIN DeptInfoForJoin B
ON A.DeptID = B.DeptID
MSSQL Join RIGHT OUTER JOIN 사용법.
- LEFT OUTER JOIN의 반대로 생각하시면 됩니다.
- tb 테이블의 모든 데이터와 ta 테이블과 tb 테이블의 중복되는 data를 검색할 때 사용합니다.
-- RIGHT OUTER JOIN
SELECT A.EmpID,A.EmpName,A.DeptID,B.DeptID,B.DeptName
FROM UserInfoForJoin A
RIGHT OUTER JOIN DeptInfoForJoin B
ON A.DeptID = B.DeptID
MSSQL Join FULL OUTER JOIN 사용법.
- ta 테이블과 tb 테이블이 가지고 있는 데이터 모두 검색됩니다.
- 수학적으로는 합집합을 생각하시면 됩니다.
--FULL OUTER JOIN
SELECT A.EmpID,A.EmpName,A.DeptID,B.DeptID,B.DeptName
FROM UserInfoForJoin A
FULL OUTER JOIN DeptInfoForJoin B
ON A.DeptID = B.DeptID
MSSQL Join CROSS JOIN 사용법.
- 경우의 수를 전부 출력할 때 사용합니다.
- 기준 테이블이 ta일 경우 ta의 데이터 한 ROW를 tb 테이블 전체 ROW와 JOIN 한다고 생각하시면 됩니다.
- 조인의 결과로 나오는 행 개수는 두 테이블의 각 행의 개수를 곱한 수만큼 출력됩니다.
--CROSS JOIN
SELECT A.EmpID,A.EmpName,A.DeptID,B.DeptID,B.DeptName
FROM UserInfoForJoin A
CROSS JOIN DeptInfoForJoin B;
MSSQL Join SELF JOIN 사용법.
- 자기 자신과 조인한다는 의미로, 하나의 table을 반복해서 join 한다고 생각하시면 됩니다.
--SELF JOIN
SELECT A.DeptID,A.DeptName ,B.DeptID,B.DeptName
FROM DeptInfoForJoin a
,DeptInfoForJoin b
Join 준비 소스
기본소스.
USE sampleDB;
-- 사원정보
DROP TABLE IF EXISTS UserInfoForJoin;
CREATE TABLE dbo.UserInfoForJoin
(
EmpID SMALLINT NOT NULL,
EmpName NVARCHAR(40) NOT NULL,
Title NVARCHAR(50) NOT NULL,
DeptID SMALLINT NOT NULL
);
-- 부서 정보
DROP TABLE IF EXISTS DeptInfoForJoin;
CREATE TABLE dbo.DeptInfoForJoin
(
DeptID SMALLINT NOT NULL,
DeptName NVARCHAR(40) NOT NULL
);
INSERT INTO UserInfoForJoin VALUES
(100,'Elizabeth','사장',''),
(101,'Ashley','부사장',''),
(110,'Jessica','태평양지점장','10'),
(111,'Alicia','태평양지점','10'),
(112,'Diana','태평양지점','10'),
(120,'Michael','미국지점장','20'),
(121,'Alicia','미국지점','20'),
(122,'Diana','미국지점','20'),
(130,'Laura','마케팅팀장','30'),
(131,'Stephen','마케팅팀','30'),
(132,'David','마케팅팀','30')
;
INSERT INTO DeptInfoForJoin VALUES
(10,'태평양지점'),
(20,'미국지점'),
(30,'마케팅팀'),
(40,'감사팀')
;
반응형