https://ko.wikipedia.org/wiki/Join_(SQL)


위키 잠고했습니다!


아래 쿼리문으로 테이블 생성하고 데이터 삽입해주세요!

CREATE TABLE department
(
 DepartmentID INT,
 DepartmentName VARCHAR(20)
);

CREATE TABLE employee
(
 LastName VARCHAR(20),
 DepartmentID INT
);

INSERT INTO department(DepartmentID, DepartmentName) VALUES(31, '영업부');
INSERT INTO department(DepartmentID, DepartmentName) VALUES(33, '기술부');
INSERT INTO department(DepartmentID, DepartmentName) VALUES(34, '사무부');
INSERT INTO department(DepartmentID, DepartmentName) VALUES(35, '마케팅');

INSERT INTO employee(LastName, DepartmentID) VALUES('Rafferty', 31);
INSERT INTO employee(LastName, DepartmentID) VALUES('Jones', 33);
INSERT INTO employee(LastName, DepartmentID) VALUES('Steinberg', 33);
INSERT INTO employee(LastName, DepartmentID) VALUES('Robinson', 34);
INSERT INTO employee(LastName, DepartmentID) VALUES('Smith', 34);
INSERT INTO employee(LastName, DepartmentID) VALUES('John', NULL);


그리고 크로스 조인을 해보겠습니다!!


크로스 조인은 아래의 쿼리와 결과가 같네요!


크로스 조인은


이 두 테이블의 곱을 나타내는 것 같습니다!

왼쪽 임플로이 테이블은 데이터가 6개 오른쪽 디퍼트먼트 테이블은 4개네요!

위에서 쿼리를 썼을 때 24행이라는 결과가 보이시죠!?

6 * 4 = 24 입니다.


Employee테이블에서 (Rafferty, 31)행에 대해서 Department의 (31, 영업), (32, 기술), (33, 사무), (34, 마케팅) 4개의 행이 대응됩니다.

이걸 Rafferty~John까지 반복하면 24개의 행이 생성되겠죠!



이제 내부 조인 차례입니다!!!!!!!!!!!!! 내부 조인은 영어로 Inner Join이라고 하네욧!

내부 조인의 특징!

내부 조인은 가장 흔한!!! 결합 방식이랍니다!!

그리고! 조인 구문(조인 쿼리문에서 ON 뒤의 부분을 말하는 것 같습니다!)에 충족하는 A테이블의 행과 B테이블의 행을 결합하여서 출력합니당!


아그리고 !! 조인에는 명시적 조인 표현과 암묵적 조인 표현이라는게 있습니다!!

위에서 크로스 조인이라고 언급하고 출력한것이 명시적 조인, 그 밑에 select * from 임플로이, 디파트먼트 이 것이 암묵적 조인입니다.!

cross join이라고 명시했기 떄문에! 명시적 조인이구요!, 암묵적 조인에는 join을 언급하진 않았지만 조인한 것과 같은 결과를 보여주기 때문에 암묵적 조인 같습니다!


내부 조인에서도 한번 해보겠습니다!


쿼리문을 해석하자면! department 테이블이 employee테이블에 내부 조인을 하네요!

On뒤에 조건이 나오죠! 임플로이 테이블의 departmentid와 디파트먼트 테이블의 departmentid가 같으면

데이터를 보여줘라 이런 내용입니다.

가운데 두 컬럼을 보시면 31 31, 33 33, ...으로 같은것을 볼 수 있습니다.


아래는 암묵적으로 내부조인을 하는 쿼리문입니다!


오옷!!!

위 두개의 결과가 같네요 신기하네요!@!

위에서 했던 크로스 조인의 결과에서 where을 이용하여 조건을 거네요!

크로스 조인의 결과 중에서! department아이디가 같은거만 출력하는 것입니다!

재밌네요 ㅎ..ㅎ


아아 참고로 매번 employee, department 이런식으로 쓰기보다는 별명을 붙여주면 편리하게 사용할 수 있습니다!

SELECT * 
FROM employee e INNER JOIN department d 
  ON e.DepartmentID = d.DepartmentID;


이렇게! 테이블명 뒤에다가 별명을 붙여주시면 됩니다! 실행보세욧



내부 조인을 세부적으로 분류하면

동일 조인(equi-join), 자연 조인(natural join), 교차 조인(cross-join)으로 나눌 수 있답니다!


동일 조인은 위에서 보여준 내부조인과 같은 쿼리네요!


자연조인은!!!!


자연 조인(natural join)은 동일 조인의 한 유형으로 조인 구문이 조인된 테이블에서 동일한 컬럼명을 가진 2개의 테이블에서 모든 컬럼들을 비교함으로써, 암시적으로 일어나는 구문이다. 결과적으로 나온 조인된 테이블은 동일한 이름을 가진 컬럼의 각 쌍에 대한 단 하나의 컬럼만 포함하고 있다.


위키에서 이렇게 설명하고있네요!!!


하지만 위험한 조인인가 봅니다!! 아래 이러한 설명도 붙어있습니다.


대부분의 전문가들은 NATURAL JOIN이 위험한 것이며, 그러므로 이것의 사용을 강력하게 비권장하고 있다.[3] 그러한 위험은 다른 테이블에 다른 컬럼으로 동일한 이름을 가진 새로운 컬럼을 무심코 추가하는데서 오는 것이다.

현존하는 자연 조인은 자연스럽게 (다른 컬럼에서 온) 이전보다 다른 기준을 이용해서 비교를 위해 비교를 하거나 일치하는 것을 찾아서 새로운 컬럼을 이용할 것이다. 그리하여 테이블 내에 있는 데이터가 변경되지 않고, 증가만 해도 현존하는 질의어는 다른 결과물을 생성할 것이다.



이제 외부 조인을 해보겠습니다!!!!!!!


외부조인은 왜!?!? 왜쓸까욧!!!

equi join은 조인을 생성할 때 동일한 값이 없다면 데이터를 반환하지 못하는데요!!!!

이 때 동일한 값이 없는 행들도 포함하여 조회하기 위해서

외부 조인을 사용합니다!


left 외부 조인을 해보겠쑵니당!!!



위의 내부조인과 다르게 john이 표시되어있습니다!!!!


그리고 오른쪽 조인 왼쪽조인은 기능적으로 동일하다고 하네요!!!

아래의 설명을 보시죠!


오른쪽과 왼쪽 외부 조인은 기능적으로 동일하다. 양자 모두 다른 것들이 하지 않는 어떠한 기능도 제공하지 않는다. 그래서 오른쪽과 왼쪽 외부 조인은 테이블 순서가 변경되기만 하면, 서로 대체할 수 있다.


그렇다네요!!!!

right join도 어떻게쓰는지 보겠습니다!.


컬럼 순서만 바뀌었을 뿐이지 결과는 같네욧!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

이만 마치겠숩니당 뿅뿅


'CS기본지식 > 데이터베이스' 카테고리의 다른 글

정규화가 무엇일까?  (0) 2017.11.19
트랜잭션  (0) 2017.11.19
[SQL] select문  (0) 2017.06.08
테이블 수정 및 삭제  (0) 2017.06.08
varchar와 char의 차이  (0) 2017.06.07

+ Recent posts