728x90
반응형
Join 이란?
DB의 테이블을 만들때 효율성과, 가독성, 중복데이터를 피하기 위해 여러개의 Table을 만든다.
Join을 이용하여 나눠진 테이블을 조합할수 있다.
준비사항
H2를 설치하여 다음과 같이 SQL 문을 날려주자
기본키, 외래키를 지정해줘야 되지만 패스했다.
create table students(
student_id int not null,
student_name varchar(20) not null,
subject_id int
);
INSERT INTO students VALUES(1, 'Jenna', 1);
INSERT INTO students VALUES(2, 'Dan', 2);
INSERT INTO students VALUES(3, 'Tom', 2);
INSERT INTO students VALUES(4, 'Grace',NULL);
create table subjects(
subject_id int not null,
subject_name varchar(20) not null
);
INSERT INTO subjects VALUES(1, 'C++');
INSERT INTO subjects VALUES(2, 'Java');
INSERT INTO subjects VALUES(3, 'GO');
INSERT INTO subjects VALUES(4, 'JSP');
Join 원리
학생 테이블에는 학생 Id 와 이름, 수강중인 과목이 있다고 가정해보자
수강 테이블에는 과목 Id 와 강의이름이 있다고 해보자.
DB에서 조회 할때
학생이름, 수강중인 강의이름 을 출력하고 싶다.
이럴때 Join 을 써서 조회 하면된다.
학생 테이블
student_Id | student_name | subject_id |
1 | Jenna | 1 |
2 | Dan | 2 |
3 | Tom | 2 |
4 | Grace |
수강테이블
subject_Id | subject_name |
1 | C++ |
2 | Java |
3 | Go |
4 | JSP |
출력
SELECT st.STUDENT_ID, st. STUDENT_NAME, su.SUBJECT_NAME
FROM students AS st
JOIN subjects AS su
ON st.SUBJECT_ID = su.SUBJECT_ID
student_Id | Name | subject |
1 | Jenna | c++ |
2 | Dan | Java |
3 | Tom | Java |
Join의 종류
- 위에서는 INNER join 을 사용하였다.
- 대표적인 join의 종류는 다음과 같다.
- INNER JOIN
- 교집합 - LEFT JOIN
- 부분집합
- 왼쪽 테이블에 있는걸 전부 출력
- 오른쪽에 값이 없을때 는 NULL 로 출력 - RIGHT JOIN
- 부분집합
- 오른쪽 테이블에 있는걸 전부 출력
- 왼쪽에 값이 없을 경우 NULL 로 출력
그림 설명
그림 출처 https://www.w3schools.com/sql/sql_join.asp
INNER JOIN
SELECT st.STUDENT_ID, st. STUDENT_NAME, su.SUBJECT_NAME
FROM students AS st
JOIN subjects AS su
ON st.SUBJECT_ID = su.SUBJECT_ID
student_Id | Name | subject |
1 | Jenna | c++ |
2 | Dan | Java |
3 | Tom | Java |
LEFT JOIN
STUDENT 기준으로 모두 출력한다.
SELECT st.STUDENT_ID, st. STUDENT_NAME, su.SUBJECT_NAME
FROM students AS st
LEFT JOIN subjects AS su
ON st.SUBJECT_ID = su.SUBJECT_ID
STUDENT_ID | STUDENT_NAME | SUBJECT_NAME |
1 | Jenna | C++ |
2 | Dan | Java |
3 | Tom | Java |
4 | Grace | null |
RIGHT JOIN
SUBJECTS 기준으로 모두 출력한다.
SELECT st.STUDENT_ID, st. STUDENT_NAME, su.SUBJECT_NAME
FROM students AS st
RIGHT JOIN subjects AS su
ON st.SUBJECT_ID = su.SUBJECT_ID
STUDENT_ID | STUDENT_NAME | SUBJECT_NAME |
1 | Jenna | C++ |
2 | Dan | Java |
3 | Tom | Java |
null | null | GO |
null | null | JSP |
FULL OUTER JOIN
STUDENTS 와 SUBJECTS 모두 출력한다.
SELECT st.STUDENT_ID, st. STUDENT_NAME, su.SUBJECT_NAME
FROM students AS st
LEFT JOIN subjects AS su
ON st.SUBJECT_ID = su.SUBJECT_ID
UNION
SELECT st.STUDENT_ID, st. STUDENT_NAME, su.SUBJECT_NAME
FROM students AS st
RIGHT JOIN subjects AS su
ON st.SUBJECT_ID = su.SUBJECT_ID
STUDENT_ID | STUDENT_NAME | SUBJECT_NAME |
null | null | GO |
null | null | JSP |
1 | Jenna | C++ |
2 | Dan | Java |
3 | Tom | Java |
4 | Grace | null |
728x90
반응형
'DataBase > DB 기초' 카테고리의 다른 글
[DB] Index 기본 (0) | 2023.02.09 |
---|---|
[DB] NoSQL (0) | 2021.08.19 |
[DB] Index 기초 (0) | 2021.08.19 |
[DB] GROUP BY (0) | 2021.08.05 |
[DB] 트랜잭션 (0) | 2021.07.21 |
댓글