개키우는개발자 : )

PostgreSQL 조인 이란? JOIN실습 Table 만들기 본문

PostgreSQL/조인과 집계 데이터

PostgreSQL 조인 이란? JOIN실습 Table 만들기

DOGvelopers 2019. 10. 29. 21:14
반응형

조인이란?

2개 이상의 테이블에 있는 정보 중 사용자가 필요한 집합에 맞게 가상의 테이블 처럼 만들어서 결과를 보여주는 것이다.

 

종류 설명
INNER 조인 특정 컬럼을 기준으로 정확히 매칭된 집합을 출력한다.
OUTER 조인 특정 컬럼을 기준으로 매칭된 집합을 출력하지만 한쪽의 집합은 모두 출력하고 다른 한쪽의 집합은 매칭되는 컬럼의 값 만을 출력한다.
SELF 조인 동일한 테이블 끼리 의 특정 컬럼을 기준으로 매칭되는 집합을 출력한다.
FULL OUTER 조인 INNER, LEFT OUTER, RIGHT OUTER 조인 집합을 모두 출력한다.
CROSS 조인 Cartesian Product라고도 하며 조인되는 두 테이블에서 곱집합을 반환한다.
NATURAL 조인 특정 테이블의 같은 이름을 가진 컬럼 간의 조인집합을 출력한다.

실습준비1

 

BASKET_A 테이블 생성

CREATE TABLE BASKET_A
(
	ID INT PRIMARY KEY,
	FRUIT VARCHAR (100) NOT NULL
)

 

데이터 저장후 커밋

INSERT INTO BASKET_A
(ID,FRUIT)
VALUES
(1,'APPLE'),
(2,'ORANGE'),
(3,'BANANA'),
(4,'CUCUMBER');

COMMIT;

BASKET_B 테이블 생성

CREATE TABLE BASKET_B
(
	ID INT PRIMARY KEY,
	FRUIT VARCHAR (100) NOT NULL
)

데이터 저장후 커밋

INSERT INTO BASKET_B
(ID,FRUIT)
VALUES
(1,'ORANGE'),
(2,'APPLE'),
(3,'WATERMELON'),
(4,'PEAR');

COMMIT;

 

실습준비2

 

EMPLOYEE 테이블 생성

CREATE TABLE EMPLOYEE(
	EMPLOYEE_ID INT PRIMARY KEY,
	FIRST_NAME VARCHAR (255) NOT NULL,
	LAST_NAME VARCHAR (255) NOT NULL,
	MANAGER_ID INT,
	FOREIGN KEY (MANAGER_ID)
	REFERENCES EMPLOYEE (EMPLOYEE_ID)
	ON DELETE CASCADE
)

데이터 저장 후 커밋

insert into EMPLOYEE (
	EMPLOYEE_ID,
	FIRST_NAME,
	LAST_NAME,
	MANAGER_ID
)
values
(1, 'Windy','Hays',Null),
(2, 'Ava','Christensen',1),
(3, 'Hassan','Conner',1),
(4, 'Anna','Reeves',2),
(5, 'Sau','Norman',2),
(6, 'Kelsie','Hays',3),
(7, 'Tory','Goff',3),
(8, 'Salley','Lester',3)

commit;

실습준비3

 

DEPARTMENTS 테이블 생성

CREATE TABLE
IF NOT EXISTS DEPARTMENTS
(
	DEPARTMENT_ID SERIAL PRIMARY KEY,
	DEPARTMENT_NAME VARCHAR (255) NOT NULL
)

DEPARTMENTS 데이터 추가

INSERT
	INTO
	DEPARTMENTS (DEPARTMENT_NAME)
VALUES ('Sales'),
('Marketing'),
('HR'),
('IT'),
('Production');

commit;

 

EMPLOYEES 테이블 생성

CREATE TABLE
IF NOT EXISTS EMPLOYEES
(
	EMPLOYEE_ID SERIAL PRIMARY KEY,
	EMPLOYEE_NAME VARCHAR (255),
	DEPARTMENT_ID INTEGER
)

EMPLOYEES 데이터 추가

INSERT
	INTO
	EMPLOYEES (EMPLOYEE_NAME,
	DEPARTMENT_ID)
VALUES 
('Better Nicholson',1),
('Christian Gable',1),
('Joe Swank',2),
('Fred Costner',3),
('Sandra Kilmer',4),
('Julia Mcqueen',NULL);

commit;

실습준비4

 

CROSS_T1 테이블 생성

CREATE TABLE CROSS_T1
(
	LABEL CHAR(1) PRIMARY KEY
)

CROSS_T1 데이터 추가

INSERT INTO CROSS_T1 (LABEL)
VALUES
('A'),
('B');

COMMIT;

CROSS_T2 테이블 생성

CREATE TABLE CROSS_T2
(
	SCORE INT PRIMARY KEY
)

CROSS_T2 데이터 추가

INSERT INTO CROSS_T2 (SCORE)
VALUES
(1),
(2),
(3);

COMMIT;

 

실습준비5

 

CATEGORIES 테이블 생성

CREATE TABLE CATEGORIES
(
	CATEGORY_ID SERIAL PRIMARY KEY,
	CATEGORY_NAME VARCHAR (255) NOT NULL
)

CATEGORIES 데이터 추가

INSERT INTO CATEGORIES(CATEGORY_NAME)
VALUES
('Smart Phone'),
('Laptop'),
('Tablet');

commit;

 

PRODUCTS 테이블 생성

CREATE TABLE PRODUCTS
(
	PRODUCT_ID SERIAL PRIMARY KEY,
	PRODUCT_NAME VARCHAR (255) NOT NULL,
	CATEGORY_ID INT NOT NULL,
	FOREIGN KEY (CATEGORY_ID)
	REFERENCES CATEGORIES (CATEGORY_ID)
)

 

PRODUCTS 데이터 추가

INSERT INTO PRODUCTS
(PRODUCT_NAME,CATEGORY_ID)
VALUES
('iPhone',1),
('Samsung Galaxy',1),
('HP Elite',2),
('Lenovo Thinkpad',2),
('iPad',3),
('Kindle Fire',3)

commit;

 

실습준비6

 

SALES 테이블 생성

CREATE TABLE SALES
(
	BRAND VARCHAR NOT NULL,
	SEGMENT VARCHAR NOT NULL,
	QUANTITY INT NOT NULL,
	PRIMARY KEY (BRAND,SEGMENT)
)

SALES 데이터 추가

INSERT INTO  SALES (BRAND,SEGMENT,QUANTITY)
VALUES 
('ABC','Premium',100),
('ABC','Basic',200),
('XYZ','Premium',100),
('XYZ','Basic',300); 

commit;

 

반응형

'PostgreSQL > 조인과 집계 데이터' 카테고리의 다른 글

PostgreSQL CROSS 조인  (0) 2019.11.03
PostgreSQL FULL OUTER 조인  (0) 2019.11.03
PostgreSQL SELF 조인  (6) 2019.11.03
PostgreSQL OUTER 조인  (0) 2019.11.03
PostgreSQL INNER 조인  (0) 2019.11.03
Comments