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
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에 대한 강의를 여기서 마치겠습니다.
강의 내용과 관련하여 궁금하신 게 있으시면 언제든지 댓글로 문의하시기 바랍니다.
join에 들어와서는 강의 포스팅을 짧게 쓰고 있습니다.
이유는, join은 SQL에서, RDBMS에서 정말 중요한 개념인데, 하나하나 확실하게 잡고 이해해 가시는 게 중요하기 때문에 짧은 내용을 꼭 한 번씩은 따라 해 보시라는 의미입니다.
그리고 늘 남기는 말이지만, 직접 해보시고, 궁금하신 점을 댓글로 남겨주세요.
그러면 아는 범위 내에서는 답변을 해드리겠습니다.
감사합니다.
## 다음 강의 보러 가기 ##
2020/05/06 - [Database/sql 강의] - sql 독학 강의 # outer join SQL 15편 -sTricky
by.sTricky
'Database > sql 강의' 카테고리의 다른 글
sql 독학 강의 # sub query 서브쿼리 16편 -sTricky (5) | 2020.05.11 |
---|---|
sql 독학 강의 # outer join SQL 15편 -sTricky (3) | 2020.05.06 |
sql 독학 강의 # inner join with ansi SQL 13편 -sTricky (6) | 2020.04.22 |
sql 독학 강의 # Cartesian Product 카티션 곱 ansi SQL 문법 12편 -sTricky (2) | 2020.04.20 |
sql 독학 강의 # mysql join (정의 및 종류) 11편 -sTricky (6) | 2020.04.16 |