본문 바로가기

Mysql

[Mysql] join에 대해서

<목차>
 1. 내부 Join
 2. 외부 Join
 3. 기타 Join

들어가기에 앞서 위의 사진을 먼저 보고 글을 읽으면 이해가 좀 더 쉽게 될것같아 가져와보았다.

Join 내용들을 그림으로 풀어놓아 직관적으로 볼 수 있다.

 

 1.  내부 Join

 Join의 구조는 내부 Join과 외부 Join 그리고 기타 Join으로 나눌 수 있는데 그 중 내부 Join으로는 inner Join이 있다.

 단어 뜻 그대로 inner. 두 테이블의 겹치는 부분, 즉 교집합 부분을 의미하는데 공통된 부분을 조회하기 위해 사용된다. 

 

SELECT * FROM student INNER JOIN student_class ON student.id = class.id;
// INNER 를 생략할수도 있고 테이블 명 = student 옆에 as 를 붙여 별명을 만들어줄수 있다.

SELECT * FROM student AS LGD JOIN student_class ON student.id = class.id;

 

 

2.  외부 Join

 외부 Join은 두 가지가 있는데 LEFT, RIGHT로 나눌 수 있다.

 LEFT와 RIGHT의 차이는 크게 없지만 기준점이 달라진다고 생각하면 편하다.

 TABLE을 두개를 가지고 있을때 LEFT의 경우 왼쪽 테이블을 기준으로, RIGHT의 경우 오른쪽 테이블을 기준으로 둔다.

 

 1) LEFT Join

       왼쪽 테이블을 기준으로 두고 오른쪽 테이블을 매치시키며 결과가 나올때 왼쪽테이블이 기준점이므로 왼쪽 테이블의         값은 무조건 포함되면서 오른쪽 테이블의 값이 있을 경우엔 값이 들어가고 값이 없을 경우엔 NULL로 표현된다.

SELECT * FROM [테이블 명1] LEFT JOIN [테이블 명2] ON [테이블 명1].id = [테이블 명 2].id;

// 결과값으로 테이블명1 의 값은 전부 다 나오지만 테이블 명2의 값은 NULL이 나올수 있다.

 

 

 2) RIGHT Join

      오른쪽 테이블을 기준으로 두고 왼쪽 테이블을 매치시키며 결과가 나올때  오른쪽 테이블의 값은 무조건 포함되면서          왼쪽 테이블의 값이 있을 땐 그 값이, 없을땐 NULL로 표현된다.

SELECT * FROM [테이블 명1] RIGHT JOIN [테이블 명2] ON [테이블 명1].id = [테이블 명 2].id;

// 결과값으로 테이블명2 의 값은 전부 다 나오지만 테이블 명1의 값은 NULL이 나올수 있다.

 

 

3.  기타 Join

  1) Cross Join

    Cross Join은 카티션 곱(cartesian product)으로 엄밀히 말하면 Join이라 부를수 없는 Join 이다. 

    FROM 절에는 두 테이블명을 기재하지만 WHERE절에는 조건을 기재하지 않아 두 테이블을 가지고 나올수 있는 모든

    경우의 수를 표현해준다. 자주 쓰진 않으므로 개념만 알고 넘어가면 될것 같다.

  2) Self Join

    Self Join은 자기 자신을 비교해서 값을 반환하는 것으로, Cross Join의 경우와 마찬가지로 경우의 수에 따른 결과를 반        환한다.

    자기 자신과 비교하기 때문에 반드시 테이블명에 별칭을 사용해야 하며, where 절을 사용해서 조건을 추가할 수 있다.

 

SELECT A 열이름, B 열이름1, ...
FROM 테이블명 1 A, 테이블명 1 B
WHERE 조건

 

  3) Union

     Union은 2개이상의 테이블에 존재는 같은 성격의 값을 한번의 쿼리로 추출하는 것이다.

     일반적으로 Union은 Union Distinct와 동일한 일을 하는데,  중복되는 레코드를 제거한다.

     Union ALL은 중복되는 레코드를 모두 허용하며 부분 범위 처리가 가능하다.

     

'Mysql' 카테고리의 다른 글

Mysql 쿼리문, 명령어 종류  (0) 2024.07.05
Mysql이란?  (0) 2024.07.05