-JOIN
*LEFT JOIN
*INNER JOIN
*RIGHT JOIN
*FULL OUTER JOIN
*INNER JOIN
-양쪽다 존재하는 것만 출력한다 .
-NULL 행이 존재하지 않게 된다.
-JOIN 성능중 가장 좋다
*LEFT JOIN
-가장 일반적으로 사용된다
-기준테이블에만 존재하는 것과 INNER JOIN 내용이 함께 출력된다.
-실제론 LEFT JOIN , INNER JOIN만 이용된다.
*RIGHT JOIN
-LEFT JOIN과 똑같은 역할을 한다, 테이블 기준만 다르다.
*FULL OUTER JOIN
-mysql은 지원하지 않고 , union으로 만들수 있다
하단은 JOIN을 설명하기 위한 샘플예제이다. 왼쪽) 학생테이블 , 오른쪽) 상담사테이블


학생 테이블의 consultor_id는 상담사 테이블의 consultor_id(PK)를 참조한 외래키 이다.
학생 테이블의 student_id=10,11 인 값은 해당 테이블내에만 존재하고
상담사 테이블의 consultor_id=5 인값은 해당 테이블내에만 존재한다.
공통질문
student_id 오름차순 으로 표시하라.
Q1) 상담사 정보가 학생테이블에 표시되도록 하며, 모든 학생 테이블을 보여라. ( 상담사 정보가 없다면 NULL로 표시 )
Result) 표준형태의 LEFT JOIN 을 수행.
|
1
|
SELECT * FROM student st LEFT JOIN consultor co ON st.consultor_id=co.consultor_id ORDER BY st.student_id ASC;
|
cs |


비교용도 테이블)
왼쪽) 학생테이블 , 오른쪽) 상담사테이블


Q2) 학생 테이블에 상담사 정보가 표시되도록 하며 , 상담사가 학생에게 붙은 경우만의 테이블을 보여라.
Result1) LEFT JOIN에 조건 절을 추가하여 INNER JOIN 효과를 냈음.
|
1
|
SELECT * FROM student st LEFT JOIN consultor co ON st.consultor_id=co.consultor_id WHERE st.consultor_id IS NOT NULL;
|
cs |


비교용도 테이블)


Result2) 표준 형태의 INNER JOIN 수행.
|
1
|
SELECT * FROM student st INNER JOIN consultor co ON st.consultor_id=co.consultor_id ORDER BY st.student_id ASC;
|
cs |


비교용도 테이블)


RESULT 1 와 RESULT 2 는 동일하다.
Q3) 학생 테이블에 상담사 정보가 표시되도록 하며 , 상담사가 정해지지 않은 경우만의 테이블을 보여라.
RESULT) LEFT JOIN 에 조건절을 추가하여 해결.
|
1
|
SELECT * FROM student st LEFT JOIN consultor co ON st.consultor_id=co.consultor_id WHERE co.consultor_id IS NULL;
|
cs |


비교용도 테이블)


Q4) 학생,상담사 테이블의 합집합을 표시하라 .
Result) mysql 에서 FULL OUTER JOIN 효과를 내기 위해 union을 사용한다.
|
1
2
|
(SELECT * FROM student st LEFT JOIN consultor co ON st.consultor_id=co.consultor_id) UNION
(SELECT * FROM student st RIGHT JOIN consultor co ON st.consultor_id=co.consultor_id );
|
cs |


비교용도 테이블)


Q5) 상담사가 안붙은 학생정보와 학생이 안붙은 상담사 정보를 가져오세요
Result) LEFT JOIN , RIGHT JOIN 에 각각 조건절을 달아주고 UNION 시킴
|
1
2
|
(SELECT * FROM student st LEFT JOIN consultor co ON st.consultor_id=co.consultor_id WHERE co.consultor_id IS NULL) UNION
(SELECT * FROM student st RIGHT JOIN consultor co ON st.consultor_id=co.consultor_id WHERE st.consultor_id IS NULL);
|
cs |


참고로 시각적으로 JOIN 효과 보여주는 사이트 https://sql-joins.leopard.in.ua/
'21년이전 > 국비-sql' 카테고리의 다른 글
| 프로그래머스 - JOIN 문제모음 (0) | 2021.06.22 |
|---|---|
| SQL - DDL (0) | 2021.05.12 |
| DB - 개념모델링 (0) | 2021.05.10 |
| 국비 SQL - 명령어 모음 (0) | 2021.02.22 |