⭐ join
두 개 이상의 테이블에서 데이터를 결합
크게 2가지로 구분
inner join, outer join
outer join 은 다시 2가지로 구분
outer join (left join, right join)
⭐ inner join
on 조건 없이 사용할때 inner join 을 cross join이라고 부른다.
즉, cross join은 inner join의 한 형태다. 잘 쓰이지는 않는다.
inner join을 쓸때
on이라는 조건을 설정한다.
on tb_student.no = tb_grade.no
이렇게 매번 칼럼명을 작성하는 것은 불편하다.
이때는 별칭을 사용하면 된다.
👍대부분의 경우 join(inner join) 과 left join 만을 사용한다.
💀 join 활용시 주의사항
1.on 지정 필수
2.외래키와 기본키를 매핑해야 무결성 보장
3.성능저하를 고려해 인덱스 생성 권장
-- inner join 사용법
select*
from tb_grade;
select*
from tb_student;
select*
from tb_student
join tb_grade;
-- on 조건이 없어서 크로스 조인이 됐고 레코드가 30개나 뽑혀버렸다.
select*
from tb_student
inner join tb_grade
on tb_student.grade = tb_grade.grade;
-- 2개 테이블을 결합해 의미있는 결과값을 뽑아냈다.
select tb_student.no, tb_student.name, tb_student.grade, tb_grade.score
from tb_student
inner join tb_grade
on tb_student.grade = tb_grade.grade;
-- 중복 칼럼을 없애고 필요한 칼럼만을 취사선택했다.
select s.no, s.name, s.grade, g.score
from tb_student as s
inner join tb_grade as g
on s.grade = g.grade;
-- 별칭을 사용해서 코드량을 줄였다.


⭐ outer join
아우터조인에는 2가지 left join 과 right join 이 있다.
left join (left outer join)
left join은 조건에 맞지 않는 데이터도 포함한다.
right join (right outer join)
right join은 조건에 맞지 않는 데이터가 없으면 왼쪽 테이블은 null 처리
-- outer join 연습
use shcool;
-- 레프트 조인
select s.no, s.name, s.grade, g.score
from tb_student as s
left join tb_grade as g on s.grade = g.grade;
-- 라이트 조인
select s.no, s.name, s.grade, g.score
from tb_student as s
right join tb_grade as g on s.grade = g.grade;


⭐union
두 테이블의 모든 데이터를 포함
조건이 맞지 않은 경우 null 처리
how?
left join과 right join을 union으로 결합
use school;
select s.no, s.name, s.gender, g.score, g.grade
from tb_student as s
left join tb_grade as g
on s.grade = g.grade
union
select s.no, s.name, s.gender, g.score, g.grade
from tb_student as s
right join tb_grade as g
on s.grade = g.grade
where s.grade is null;
-- 유니온 결과값 기본
select s.no, s.name, s.gender, g.score, g.grade
from tb_student as s
left join tb_grade as g
on s.grade = g.grade
union
select s.no, s.name, s.gender, g.score, g.grade
from tb_student as s
right join tb_grade as g
on s.grade = g.grade
where s.grade is not null;
-- 유니온 결과값 null값 제거


'MySQL' 카테고리의 다른 글
| SQL 문법) ANSI 표준 ANSI 함수 (1) | 2025.05.16 |
|---|---|
| SQL 문법, 데이터타입 (0) | 2025.05.13 |
| SQL 문법, DCL 데이터 제어 언어 (통신/연결) (0) | 2025.05.13 |
| SQL 문법, DML 데이터 조작 언어 (입력 조회 수정 삭제) (0) | 2025.05.13 |
| SQL 문법, DDL 데이터 정의 언어 (DB/테이블/칼럼 편집) (0) | 2025.05.13 |