728x90

-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

+ Recent posts