Programming Language/MySQL

[Database] MySQL. Join문 활용하기

Sergemeow 2022. 10. 19. 22:50

SQL에서는 join문이 많이 활용되는 것 같다.

Join은 데이터를 서치하기 위해 두 개 이상의 테이블을 연결할 때 쓴다.

Join에도 Inner join, natural join, outer join 등 다양한 형태가 있는데, 본문에서는 기본적인 활용법을 알아본다.

 

Join을 통한 데이터 서치의 기본문 구조는 다음과 같다;

select [컬럼명] from [컬럼의 테이블] join [서치될 컬럼을 가진 테이블] on [foreign key로 연결된 컬럼명] = [foreign key로 다른 테이블에 연결된 컬럼명] where [조건];

이렇게만 봐선 아리송할 수 있다. 실제 활용을 보자.

활용을 위해 우선 univ 데이터베이스와 그 안에 들어갈 여섯가지 테이블을 생성한 후 데이터까지 추가해줬다.

 

위의 캡쳐 이미지는 MySQL Workbench에서 지원하는 EER 다이어그램으로, 각 테이블의 컬럼들과 foreign key 연결관계를 한눈에 볼 수 있다. 생성한 테이블들의 연결구조는 위와 같다.

 

여기서, 이를테면 내가 김영철 학생이 수강하는 과목번호와 과목명을 알고싶면..

'김영철'이라는 학생이름 데이터가 들어가는 테이블은 student 뿐이다. 하지만 student 테이블에서는 수강정보를 확인할 수 없다. 그렇다면 다시한번 위의 EER 다이어그램을 보자. student 테이블은 attend 테이블로 st_num을 foreign 키를 가지고 연결되어있다. attend 테이블은 course와, course는 subject 테이블과 연결이 되어있다. 

그렇다면 join문을 통해 해당 테이블들을 연결해주면 된다.

쿼리가 번잡스럽지 않게 우선 과목명만 출력해보자.

쿼리는 보기 편하게 5줄에 걸쳐 작성했다.

첫줄부터,

subject 테이블에 있는 su_title의 데이터를 선택할건데,

su_num, co_su_num의 일치하는 키값으로 course 테이블의 데이터를 보고,

co_num, at_co_num의 일치하는 키값으로 attend 테이블의 데이터를 보고,

at_st_num, st_num의 일치하는 키값으로 student 테이블의 데이터를 보아

st_name 컬럼의 '김영철'에 해당하는 데이터를 선택하는 것이다.

 

결과물을 보면 알겠지만 su_title이라는 컬럼명이 거슬리고 중복 데이터들이 있는 것도 맘에 들지 않는다.

과목번호도 같이 찾을 겸 출력되는 컬럼명을 바꾸고 중복데이터를 제해보자.

distinct를 이용해 Course Num의 중복을 빼줬고 asis 기능으로 출력되는 컬럼명을 바꿔줬다

이 때 as는 생략 가능하다. at_co_num 'Course Num', su_title 'Subject Name'으로 입력해도 결과는 같다는 뜻.