[정처기 필기] 「3」 | SQL 응용 - (3.4) DML - JOIN

728x90

[정처기 필기] 3」 | SQL 응용 - (3.4) DML - JOIN

「1」 소프트웨어 설계

「2」 소프트웨어 개발

> 「3」 데이터베이스 구축

- 논리 데이터베이스 설계, 물리 데이터베이스 설계, > SQL 응용, SQL 활용, 데이터 전환

「4」  프로그래밍 언어 활용

「5」  정보시스템 구축 관리

 

1 SQL 개념

2 DDL

3 DCL

4 DML

5 DML - SELECT - 1

6 DML - SELECT - 2

> 7 DML - JOIN

7. DML - JOIN

JOIN의 개요

 

2개의 테이블에 연관된 튜플을 결합하여 하나의 새로운 릴레이션을 반환

 

- 일반적으로 FROM절에 기술, 릴레이션이 사용되는 어느 곳에서 사용 가능

- 정규화 과정을 거쳐서 분리된 여러 개의 테이블을 합쳐 사용하기 위해 사용

- INNER JOINOUTER JOIN으로 구분

 

INNER JOIN

 

일반적으로 EQUI JOINNON-EQUI JOIN으로 구분

 

- 조건이 없는 INNER JOIN 수행 시 CROSS JOIN과 동일한 결과 반환

- CROSS JOIN은 조인하는 두 테이블의 튜플들의 순서쌍을 결과로 반환

 

EQUI JOIN

: 공통 속성을 기준으로 '=' 비교에 의해 같은 값을 가지는 행을 연결하여 결과를 생성

: 동일한 속성이 두 번 나타나는데, 이 중복된 속성을 제거하여 한 번만 표기하는 방법을 NATURAL JOIN

: NATURAL JOIN은 조인할 속성을 정하지 않기 때문에 이름과 도메인이 같은 속성이 반드시 존재해야 함

: 연결고리가 되는 공통 속성JOIN 속성

 

--WHERE절을 이용한 EQUI JOIN의 표기 형식
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1, 테이블명2, ...
WHERE 테이블명1.속성명 = 테이블명2.속성명;
--NATURAL JOIN절을 이용한 EQUI JOIN의 표기 형식
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1 NATURAL JOIN 테이블명2;
--JOIN~USING절을 이용한 EQUI JOIN의 표기 형식
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1 JOIN 테이블명2 USING(속성명);

 

ex)

SELECT 학번, 이름, 학생.학과코드, 학과명

FROM 학생, 학과

WHERE 학생.학과코드 = 학과.학과코드;

 

SELECT 학번, 이름, 학생.학과코드, 학과명

FROM 학생 NATURAL JOIN 학과;

 

SELECT 학번, 이름, 학생.학과코드, 학과명

FROM 학생 JOIN 학과 USING(학과코드);

// <학생> 테이블과 <학과> 테이블에서 '학과코드'값이 같은 튜플을 JOIN 하여 '학번', '이름', '학과코드', '학과명'을 출력

 

NON-EQUI JOIN

: JOIN 조건에 '='이 아닌 나머지 비교 연산자 >, <, <>, >=, <= 연산자 사용

 

SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1, 테이블명2, ...
WHERE (NON-EQUI JOIN 조건);

 

ex)

SELECT 학번, 이름, 성적, 등급

FROM 학생, 성적등급

WHERE 학생.성적 BETWEEN 성적등급.최저 AND 성적등급.최고;

// <학생> 테이블과 <성적등급> 테이블을 JOIN 하여 각 학생의 '학번', '이름', '성적', '등급'을 출력

 

OUTER JOIN

 

JOIN 조건을 만족하지 않는 튜플도 결과로 출력, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN로 구분

 

- '+'를 사용하면 INNER JOIN과 동일한 형식으로 사용가능, LEFT OUTER JOIN일 때는 조건문의 우측에, RIGHT OUTER JOIN일 때는 조건문의 좌측에 '+' 붙임

 

LEFT OUTER JOIN

: INNER JOIN의 결과를 구한 후, 우측 항 릴레이션의 어떤 튜플과맞지 않는 좌측 항의 릴레이션에 있는 튜플들에 NULL값을 붙여서 INNER JOIN의 결과에 추가

: 좌측 릴레이션이 기준이 되어 모두 표시, 우측 릴레이션관련 있는 튜플만 표시

 

SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1 LEFT OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명;
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1, 테이블명2
WHERE 테이블명1.속성명 = 테이블명2.속성명(+);

 

RIGHT OUTER JOIN

: INNER JOIN의 결과를 구한 후, 좌측 항 릴레이션의 어떤 튜플과도 맞지 않는 우측 항의 릴레이션에 있는 튜플들에 NULL 값을 붙여서 INNER JOIN의 결과에 추가

: 우측 릴레이션이 기준이 되어 모두 표시, 좌측 릴레이션관련있는 튜플만 표시

 

SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1 RIGHT OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명;
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1, 테이블명2
WHERE 테이블명1.속성명(+) = 테이블명2.속성명;

 

FULL OUTER JOIN

: LEFT OUTER JOIN과 RIGHT OUTER JOIN을 합친 것

: INNER JOIN의 결과를 구한 후, 좌측 항의 릴레이션의 튜플들에 대해 우측 항의 릴레이션의 어떤 튜플과도 맞지 않는 튜플들에 NULL값을 붙여 INNER JOIN의 결과에 추가, 우측 항의 릴레이션의 튜플들에 대해 좌측 항의 릴레이션의 어떤 튜플과도 맞지 않는 튜플들에 NULL값 붙여 INNER JOIN의 결과에 추가

 

SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1 FULL OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명;

 

ex)

SELCT 학번, 이름, 학생.학과코드. 학과명

FROM 학생 LEFT OUTER JOIN 학과

ON 학생.학과코드 = 학과.학과코드;

 

SELCT 학번, 이름, 학생.학과코드, 학과명

FROM 학생, 학과

WHERE 학생.학과코드 = 학과.학과코드(+);

// <학생> 테이블과 <학과> 테이블에서 '학과코드' 값이 같은 튜플을 JOIN 하여 '학번', '이름', '학과코드', '학과명'을 출력, '학과코드'가 입력되지 않은 학생도 출력

=> INNER JOIN 하면 '학과코드'가 입력되지 않은 학생은 출력되지 않으므로 JOIN구문 기준으로 왼쪽 테이블인 <학생>의 자료는 모두 출력되도록 LEFT JOIN 사용

 

SLECT 학번, 이름, 학과.학과코드, 학과명

FROM 학생 FULL OUTER JOIN 학과

ON 학생.학과코드 = 학과.학과코드;

// <학생> 테이블과 <학과> 테이블에서 '학과코드'값이 같은 튜플을 JOIN 하여 '학번', '이름', '학과코드', '학과명'을 출력, '학과코드'가 입력되지 않은 학생, 학생이 없는 '학과코드'도 출력

=> FULL OUTER JOIN을 하면 JOIN 구문으로 연결되지 않은 자료도 모두 출력

 

SELF JOIN

 

같은 테이블에서 2개의 속성을 연결하여 EQUI JOIN 하는 JOIN 방법

 

SELECT [별칭1.]속성명, [별칭1.]속성명, ...
FROM 테이블명1 [AS] 별칭1 JOIN 테이블명1 [AS] 별칭2
ON 별칭1.속성명 = 별칭2.속성명;
SELECT [별칭1.]속성명, ]별칭1.]속성명, ...
FROM 테이블명1 [AS] 별칭1, 테이블명1 [AS] 별칭2
WHERE 별칭1.속성명 = 별칭2.속성명;

 

ex)

SELECT A.학번, A.이름, B.이름 AS 선배

FROM 학생 A JOIN 학생 B

ON A.선배 = B.학번;

 

SELECT A.학번, A.이름, B.이름, AS 선배

FROM 학생 A, 학생 B

WHERE A.선배 = B.학번

// <학생> 테이블을 SELF JOIN 하여 선배가 있는 학생과 선배의 '이름'을 표시하여 출력

 

 

 

 

 

 

 

 

출처 | <시나공> 정보처리기사 필기 2024 기본서 (길벗알앤디)

 

728x90