본문 바로가기

Database/sql 강의

sql 독학 강의 # 비등가 join with ansi SQL 14편 -sTricky

sql 독학 강의 # 비등가 join with ansi SQL 14편 -sTricky

컨텐츠 index

0. 비등가 join의 정의

1. 비등가 join 사용 예제

2. 비등가 join SQL 작성방법

 

안녕하세요.

 

정말 코로 가나 길어지고 있습니다. 이럴 때일수록 하나라도 더 배워야겠죠.

 

저도 열심히 하고는 있으니~ 여러분들도 잘 따라오셔서 실력이 늘었으면 좋겠습니다.

 

오늘 강의는 비등가 join에 관해서 진행하겠습니다.

 

 

 

2020/04/22 - [Database/sql 강의] - sql 독학 강의 # inner join with ansi SQL 13편 -sTricky

 

sql 독학 강의 # inner join with ansi SQL 13편 -sTricky

sql 독학 강의 #inner join with ansi SQL 13편 -sTricky 컨텐츠 index 0. inner join의 정의 1. inner join 사용 예제 2. inner join SQL 작성방법 3. inner join으로 3개의 테이블을 join 하는 예제 안녕하세요..

stricky.tistory.com

 

 

0. 비등가 join의 정의

비등가 join은 만약 A, B 두 테이블을 join 할 때 값이 서로 같지는 않지만 join 조건에서 지정한 어느 범위에 일치할 때 서로 데이터를 join 해 주는 것을 이야기합니다.

 

예를 들어서 어떤 마트에서 사은행사를 하는데, 그동안 쌓였던 포인트를 선물로 바꿔 준다고 합시다.

 

선물에는 각 5, 10, 15... 포인트가 매겨져 있으며, 예를 들어 8포인트를 가지고 있는 고객이 있다면 10포인트의 선물은 가져갈 수 없으니 5포인트의 선물과 매칭이 되어야 하는 상황이 생길 겁니다.

 

이렇게 해서 각 고객이 받을 수 있는 선물이 무엇인지를 비등가 join을 이용해서 출력해 낼 수 있습니다.

 

1. 비등가 join 사용 예제

우선, 이 join을 실습하기 위해서 테이블을 만들고, 데이터를 입력하겠습니다.

create table class.customer
( name varchar(10),
point int);

create table class.gift
(
	name varchar(20) null,
	point_s int null,
	point_e int null
);


INSERT INTO class.customer (name, point) VALUES ('조성모', 5);
INSERT INTO class.customer (name, point) VALUES ('이기찬', 12);
INSERT INTO class.customer (name, point) VALUES ('이소라', 14);
INSERT INTO class.customer (name, point) VALUES ('서태지', 18);
INSERT INTO class.customer (name, point) VALUES ('박효신', 21);
INSERT INTO class.customer (name, point) VALUES ('김정민', 16);
INSERT INTO class.customer (name, point) VALUES ('양파', 9);
INSERT INTO class.customer (name, point) VALUES ('강수지', 22);
INSERT INTO class.customer (name, point) VALUES ('강타', 24);


INSERT INTO class.gift (name, point_s, point_e) VALUES ('공기청정기', 11, 15);
INSERT INTO class.gift (name, point_s, point_e) VALUES ('아이폰11', 21, 25);
INSERT INTO class.gift (name, point_s, point_e) VALUES ('로봇청소기', 6, 10);
INSERT INTO class.gift (name, point_s, point_e) VALUES ('상품권', 1, 5);
INSERT INTO class.gift (name, point_s, point_e) VALUES ('스마트패드', 16, 20);

위와 같이 데이터를 입력하셨다면 아래와 같이 데이터를 확인하실 수 있습니다.

데이터를 보시면 만약 이기찬이라는 고객은 포인트를 12포인트 가지고 있으니, 선물 테이블에서 11포인트 ~ 15포인트 사이인 로봇청소기를 사은품으로 가져갈 수 있을 겁니다.

 

그리고 강타라는 고객은 24포인트로, 가장 고가의 선물인 아이폰 11을 가져갈 수 있겠네요.

 

이렇게 연결을 하여 출력을 하겠다는 의미입니다.

 

2. 비등가 join SQL 작성방법

우선 위에서 설명한 SQL을 mysql SQL로 작성을 먼저 해보도록 하겠습니다.

select c.name as 고객명, c.point as 고객_point, g.name as 상품명
from class.customer c , class.gift g
where c.point between g.point_s and g.point_e;

select, from 절까지는 이전에 했던 일반적인 inner join과 같지만 where 절을 보면 between, and 가 보이실 겁니다.

gift 테이블의 point_s에서부터 point_e 사이에 customer 테이블의 값이 해당한다면 두 테이블을 join 하라는 의미입니다.

 

이것을 ANSI SQL로도 표현해보도록 하겠습니다.

select c.name as 고객명, c.point as 고객_point, g.name as 상품명
from class.customer c join class.gift g
on c.point between g.point_s and g.point_e;

ANSI SQL 표현법도 거의 똑같아 보입니다.

 

결과는 아래와 같이 나옵니다.

 

각 고개의 point와 가져갈 수 있는 상품명이 잘 매핑되었나요?

 

이렇게 간단하게 비등가 join에 대해서 한번 알아보았습니다.

 

간단하지만, 다른 원리를 잘 이해하셔야 합니다.

 

비등가 join에 대한 강의를 여기서 마치겠습니다.

 

강의 내용과 관련하여 궁금하신 게 있으시면 언제든지 댓글로 문의하시기 바랍니다.

 

open.kakao.com/o/szfhqYec

 

Database/남/db개발님의 오픈프로필

DB 개발자, DB 개인 CLASS

open.kakao.com

 


join에 들어와서는 강의 포스팅을 짧게 쓰고 있습니다.

 

이유는, join은 SQL에서, RDBMS에서 정말 중요한 개념인데, 하나하나 확실하게 잡고 이해해 가시는 게 중요하기 때문에 짧은 내용을 꼭 한 번씩은 따라 해 보시라는 의미입니다.

 

그리고 늘 남기는 말이지만, 직접 해보시고, 궁금하신 점을 댓글로 남겨주세요.

 

그러면 아는 범위 내에서는 답변을 해드리겠습니다.

 

감사합니다.

 

## 다음 강의 보러 가기 ##

2020/05/06 - [Database/sql 강의] - sql 독학 강의 # outer join SQL 15편 -sTricky

 

sql 독학 강의 # outer join SQL 15편 -sTricky

sql 독학 강의 # outer join SQL 15편 -sTricky 컨텐츠 index 0. outer join의 정의 1. outer join 사용 예제 2. outer join SQL 작성방법 안녕하세요. 오늘은 지난 join 관련 공부하던것과 이어서 outer join에..

stricky.tistory.com

 

 

 

by.sTricky