[MariaDB Tutorial 번역 글]
- Select : https://rural-mouse.tistory.com/43
- Order By : https://rural-mouse.tistory.com/44
- Where : https://rural-mouse.tistory.com/45
- Distinct : https://rural-mouse.tistory.com/46
- Between : https://rural-mouse.tistory.com/48
- Like : https://rural-mouse.tistory.com/49
- In : https://rural-mouse.tistory.com/50
- Limit : https://rural-mouse.tistory.com/51
- Is Null : https://rural-mouse.tistory.com/52
- Join ←←
- Inner Join : https://rural-mouse.tistory.com/54
- Left Join : https://rural-mouse.tistory.com/55
- Group By : https://rural-mouse.tistory.com/56
- Having : https://rural-mouse.tistory.com/59
- Subqueries : https://rural-mouse.tistory.com/60
- Insert : https://rural-mouse.tistory.com/61
- Insert Multiple Rows : https://rural-mouse.tistory.com/62
- Insert Into Select : https://rural-mouse.tistory.com/63
- Update : https://rural-mouse.tistory.com/64
원문 : https://www.mariadbtutorial.com/mariadb-basics/mariadb-join/
여기에 있는 모든 예제는 MariaDB sample database인 nation을 가지고 진행됩니다.
만약 읽고 따라 해 보시는 게 목적이라면 다운로드를 받고 읽어보시길 추천합니다.
원본 링크 : https://www.mariadbtutorial.com/getting-started/mariadb-sample-database/
MariaDB Join
지금까지는 하나의 Table에서 데이터를 가져오는 Select 명령문을 배웠습니다.
여러개의 연관된 Table들에서 데이터를 Select 하기 위해서는 Select 명령문과 함께 Join 절을 사용해야합니다. Join 절은 특정한 조건에 따라 하나의 Table의 Row를 다른 Table의 Row와 연관짓습니다.
MariaDB는 inner join, left join, right join, cross join 과 같은 다양한 join들을 사용할 수 있습니다.
MaraiDB는 full outer join 혹은 full join을 지원하지 않습니다.
join 절의 예시는 Sample databse의 guests 와 vips Table을 사용하도록 하겠습니다.
guests Table
select * from guests;
vips Table
select * from vips;
MariaDB의 inner join 절
만약 t1과 t2라는 두개의 Table을 join(연결)하는 것이 목표라면, 다음의 문법은 inner join절을 사용하여 두개의 Table을 join 하는 것을 보여줍니다.
select select_list
from t1
inner join t2
on join_condition;
inner join은 t1 Table의 모든 Row를 t2 Table의 모든 Row와 비교합니다.
만약 두개의 Row가 모두 join_condition에 따라 계산했을때 True가 나온다면, inner join은 select_list로 지정된 두개의 column이 포함된 새로운 Row를 생성하고 Result Set에 이 새로운 Row를 포함합니다.
일반적으로 t1 Table의 Row들이 Table t2의 Row들을 매칭하려면 Equal(등호) 연산자 ( = )를 사용하면 됩니다.
select select_list
from t1
inner join t2
on t2.column1 = t2.column2;
만약 매칭하려는 Column들이 동일한 이름을 가지고 있을 경우, using을 문법에 사용할 수 있습니다.
select select_list
from t1
inner join t2 using (column);
다음은 inner join은 guest와 vips Table 양쪽에서 나타나는 사람을 찾는 inner join 예시입니다.
select
g.guest_id,
g.name,
v.vip_id,
v.name
from guests g
inner join vips v
on v.name = g.name;
vips와 guests 양쪽 테이블에서 매칭하는 Row의 Column 이름이 같으므로 using 절 문법을 다음과 같이 사용할 수 있습니다.
select
g.guest_id,
g.name,
v.vip_id,
v.name
from guests g
inner join vips v using (name);
다음 그림은 inner join 연산을 보여줍니다.
MariaDB의 left join 절
left join에서는 left 그리고 right Table에 대한 개념을 소개합니다.
t1과 t2는 각각 left와 right Table입니다.
다음은 left join 문법의 예시입니다.
select select_list
from t1
left join t2
on join_condition;
inner join과 비슷하게 Equal 연산자(=)를 사용하여 매칭시키는 Row들의 Column이 동일한 이름을 사용하고 있다면 using 절 문법을 사용할 수 있습니다.
select select_list
from t1
left join t2
using (column_name);
left join은 데이터를 left table에서 부터 찾아옵니다. 왼쪽 Table(t1)의 각 Row를 모든 오른쪽 Table(t2)의 각 Row와 비교합니다. 만약 양쪽 Row가 join_condition에 의해 True가 나왔다면 left join은 select_list에서 지정된 Column이 포함된 새 Row를 생성합니다.
만약 left join이 right Table과 어떠한 Row도 매칭되지 않더라도 여전히 left Table의 행열과 null 값의 right Table의 행열의 새로운 Row를 만들어냅니다.
간단히 말해서 left join은 right Table(t2)의 Row와 일치하는것과 관계없이 left Table(t1)의 모든 row를 가져옵니다.
다음은 guests Table과 vips Table을 결합하기 위한 left join의 예제입니다.
select
g.guest_id,
g.name,
v.vip_id,
v.name
from guests g
left join vips v
on v.name = g.name;
다음은 using 문접을 사용한 쿼리문입니다.
select
g.guest_id,
g.name,
v.vip_id,
v.name
from guests g
left join vips v
using(name);
다음 그림은 left join을 보여줍니다.
MariaDB의 right join 절
right join은 단순히 left join의 반대버전입니다.
select select_list
from t1
right join t2 on join_condition;
예를 들어 다음은 right join 절을 guests와 vips Table을 결합하기 위해 사용하는 명령문입니다.
select
g.guest_id,
g.name,
v.vip_id,
v.name
from guests g
right join vips v
on v.name = g.name;
다음 그림은 right join 연산을 보여줍니다.
MariaDB의 cross join 절
cross join은 결합된 Table의 Row으로 구성된 카티션 프로덕트를 만들어줍니다.
inner join, left join, right join과 달리 cross join에는 join 아래 문장이 없습니다.(predicate)
select select_list
from t1
cross join t2;
이 문법에서 cross join은 t1 Table의 모든 row 마다 t2 Table의 모든 row를 결합하여 Result Set을 만들어 냅니다.
만약 t1이 n개의 row를 t2가 m개의 row를 가지고 있다면 t1, t2의 cross join은 결과로 n × m의 row가 만들어냅니다.
다음은 cross join을 사용하여 guests와 vips Table을 결합하는 예제입니다.
select
g.guest_id,
g.name,
v.vip_id,
v.name
from guests g
cross join vips v;
이 명령문은 25개의 row를 반환해줍니다. (5 × 5)
이번 튜토리얼에서는 여러개의 table에서 데이터를 선택하기 위한 join 절을 배워봤습니다.
다음은 inner join에 대해서 좀 더 알아보도록 하겠습니다.
'번역 > MariaDB' 카테고리의 다른 글
[MariaDB Tutorial 번역] 12. Left join (0) | 2021.07.06 |
---|---|
[MariaDB Tutorial 번역] 11. Inner join (0) | 2021.07.05 |
[MariaDB Tutorial 번역] 9. Is Null (0) | 2021.07.02 |
[MariaDB Tutorial 번역] 8. Limit (0) | 2021.06.30 |
[MariaDB Tutorial 번역] 7. In (0) | 2021.06.30 |
댓글