본문 바로가기

DataBase

SQL - 테이블 JOIN을 이용한 SELECT문

두개의 테이블을 연결(결합)하여 데이터를 출력하는 것을 JOIN이라고 한다.

관계형 데이터베이스에서는 조인을 통해 여러 테이블의 데이터를 하나의 테이블의 데이터처럼 조회할 수 있다.

 

 SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...  
 FROM 테이블1, 테이블2  
 WHERE 테이블1.칼럼명1 = 테이블2.칼럼명2; 
 (WHERE 절에 JOIN 조건을 표시)
 

 

위 형식은 일반적인 (Inner Join) 조인의 형식이며, 키 값이 있는 테이블의 컬럼 값을 비교한 후 조건에 맞는 값을 가져온다. 즉 연관이 있는 테이블의 데이터를 조회하는 조인 방법이다.

여기서 Equal 연산자(=)만을 사용했기 때문에 Equal Join이라고도 한다.

 

이제 아래 두 테이블을 이용히여 join을 통해 데이터를 조회해보자.

 

 

<Student Table>

 

<Apply Table>

 

먼저 student 와 apply 테이블의 join을 이용해서 학생이름(Student의 sName)과, 지원한 학과(Apply의 major)의 데이터를 조회해보자.

student와 apply 테이블에 모두 존재하는, 즉 연관이 있는 데이터는 sID이므로, 해당 컬럼을 이용해서 테이블 조인을 시키면 다음과 같이 sql문을 작성할 수 있다.

 

<inner join-equal join을 이용한 sql문>

실제로 위 쿼리문을 실행시키면, 아래와 같이 두 테이블의 데이터가 마치 하나의 테이블의 데이터처럼 출력 되는것을 확인할 수 있다.

 

<apply와 student 테이블을 조인해서 select한 데이터>

위 결과를 자세히 살펴보면 똑같은 중복되어 있는 데이터들을 볼 수 있다.

(SET operation을 제외하고, relation algebra와 sql 모두 데이터의 중복을 허용하기 때문)

만약 중복되는 데이터들을 삭제하고 싶다면 "DISTINCT" 키워드를 사용하면 된다.

DISTINCT는 SELECT절에 열 이름을 명시하기 전에 선택적으로 사용할 수 있고, 데이터의 수가 아닌 종류만을 확인하고 싶을 때 유용하게 사용할 수 있다.

 

<DISTINCT 키워드를 이용한 SQL문>

위 쿼리문을 실행시키면 아래와 같이 중복이 제거된 데이터들만 출력되는 것을 확인할 수 있다.

 

<중복된 데이터들이 삭제된 조회 결과>

 

지금까지의 SQL문을 살펴보면 찾고자하는 column의 이름이 모두 하나의 테이블에만 존재하는 값으로 겹치는 것이 없었다. 아래 테이블과 쿼리문을 살펴보자.

 

<College Table>
<Apply Table>
<SQL 문>

 

위 쿼리문을 실행시키면 다음과 같은 오류가 발생하는 것을 볼 수 있다.

 

<error 메시지>

 

위 오류메시지를 살펴보면, Column이 모호하게 정의되어 있다고 알려주는 것을 볼 수 있다.

즉 College 테이블과 Apply 테이블 모두 cName이라는 컬럼을 가지고 있는데 두 테이블 중 어떤 테이블의 cName을 말하는지 모르겟다는 소리이다. 

따라서 아래와 같이 찾고자하는 Column도 어떤 테이블의 Column을 의미하는지 정확히 명시해주어야 결과가 제대로 출력되는 것을 볼 수 있을 것이다.

 

<Column의 정확한 명시>
<출력된 결과>