두개의 테이블을 연결(결합)하여 데이터를 출력하는 것을 JOIN이라고 한다.
관계형 데이터베이스에서는 조인을 통해 여러 테이블의 데이터를 하나의 테이블의 데이터처럼 조회할 수 있다.
SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FROM 테이블1, 테이블2
WHERE 테이블1.칼럼명1 = 테이블2.칼럼명2;
(WHERE 절에 JOIN 조건을 표시)
|
위 형식은 일반적인 (Inner Join) 조인의 형식이며, 키 값이 있는 테이블의 컬럼 값을 비교한 후 조건에 맞는 값을 가져온다. 즉 연관이 있는 테이블의 데이터를 조회하는 조인 방법이다.
여기서 Equal 연산자(=)만을 사용했기 때문에 Equal Join이라고도 한다.
이제 아래 두 테이블을 이용히여 join을 통해 데이터를 조회해보자.


먼저 student 와 apply 테이블의 join을 이용해서 학생이름(Student의 sName)과, 지원한 학과(Apply의 major)의 데이터를 조회해보자.
student와 apply 테이블에 모두 존재하는, 즉 연관이 있는 데이터는 sID이므로, 해당 컬럼을 이용해서 테이블 조인을 시키면 다음과 같이 sql문을 작성할 수 있다.

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

위 결과를 자세히 살펴보면 똑같은 중복되어 있는 데이터들을 볼 수 있다.
(SET operation을 제외하고, relation algebra와 sql 모두 데이터의 중복을 허용하기 때문)
만약 중복되는 데이터들을 삭제하고 싶다면 "DISTINCT" 키워드를 사용하면 된다.
DISTINCT는 SELECT절에 열 이름을 명시하기 전에 선택적으로 사용할 수 있고, 데이터의 수가 아닌 종류만을 확인하고 싶을 때 유용하게 사용할 수 있다.

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

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



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

위 오류메시지를 살펴보면, Column이 모호하게 정의되어 있다고 알려주는 것을 볼 수 있다.
즉 College 테이블과 Apply 테이블 모두 cName이라는 컬럼을 가지고 있는데 두 테이블 중 어떤 테이블의 cName을 말하는지 모르겟다는 소리이다.
따라서 아래와 같이 찾고자하는 Column도 어떤 테이블의 Column을 의미하는지 정확히 명시해주어야 결과가 제대로 출력되는 것을 볼 수 있을 것이다.


'DataBase' 카테고리의 다른 글
SQL - Equi Join(등가 조인) 과 non Equi Join(비등가 조인) (0) | 2019.09.21 |
---|---|
SQL - Alias/Order by/Like 키워드를 이용한 SELECT 문 (0) | 2019.09.16 |
SQL - SELECT문 (0) | 2019.09.16 |
관계형 모델(Relational Model) (0) | 2019.09.04 |
Database와 DBMS (0) | 2019.09.04 |