join 오라클

 join이다 무서운 조인이야 조인은 실로 어렵다.

무서우면 나가라 이 겁쟁이야

조인

조인은 여러 테이블에 저장된 데이터를 한꺼번에 조회할 필요가 있을 때 사용합니다.

조인은 둘 이상의 테이블을 결합한다는 의미이다.

이와 같이 2개의 테이블이 있다. 근데 나는 저거 둘 다 쓰고 싶다.

그럼 어떻게 할래?

앗! 뭔가 이상해.

맞다. scott가 모든 부서에 있다. 스콧은 그렇게 다재다능하지 않은데도

무슨 문제일까.

조인에서는 조인 조건이 생략된 경우 행의 모든 조합을 표시하는 카사디안 곱이 생성된다.

특별한 키워드 없이 from절에 employee 테이블과 department 테이블을 연결하면 이렇게 된다.

이렇게 되면 조인을 사용할 의미가 없어진다.

어떻게 써야 할까요?

조인에게는 종류가 많다.

시험해 보자.

1. EQUI JOIN 데이터베이스에서 여러 데이터가 필요한 경우 조인 사용

데이터에 듣는 방법은 where이고, 가장 많이 사용하는 것은 EQUI JOIN이다.

EQUI JOIN은 조인 대상 테이블에서 공통 칼럼을 =(equal) 비교를 통해 동일한 값을 가진 행을 연결하여 결과를 생성

형식.

select table 1 . column , table 2 . columnfrom table 1 , table 2 where table 1 . column = table 2 . column ;

from절은 조인 대상 테이블을 기술하고 테이블은 쉼표로 구분합니다.

짜장 테이블이 마주쳤다. 조인의 위력이다.

여기서 아까 실패했던 조건절들을 해볼까?

짜잔 scott가 한 사람이 되었다. 잘됐다.

하지만 조인문에게도 문제가 있다.

애매한 칼럼명은 결과를 출력할 수 없다.

줄의 정의가 모호하다고 한다.

제대로 하려면 지정을 해줘야해.

이와 같이

확실히 employee의 dno를 사용한다고 표현해야 한다.

그래야 내 마음을 컴퓨터가 알아준다.

근데 join문이 너무 길어 더 짧게 하고 싶다.

이를 위해 만들어지는 별칭이다.

테이블에 별칭 사용 테이블 이름이 너무 길 경우 테이블 이름을 대신할 별칠 사용

from절에서 사용

from절에서 테이블 다음에 공백을 두고 닉네임을 정의한다.

정의 조건은 테이블의 닉네임은 30글자까지 가능하나 길지 않게 from절에서 테이블 이름을 명시하여 공백을 둔 후, 테이블의 병칭을 짖기 때문에 한 SQL 명령문에서 닉네임을 혼용할 수 없습니다.테이블 별칭은 해당 SQL 명령문 안에서만 유효 ↑ 이것이 바로 쓰는 방법이다.아, 오늘 다 join 다 하려고 했는데 시간이 없네, 공부할지 일할지, 웨어가 각자 다녀갈지 기기

7월 16일에 계속 작성하겠다.

이렇게 별칭을 사용하면 가독성도 좋아지고 쿼리문을 치기도 편리

EQUI JOIN – NATURAL JOIN

이건 where 절을 쓰지마

natural join 키워드를 사용하면 오라클에서 자동적으로 테이블의 모든 칼럼을 대상으로 유형 및 이름을 가진 공통 칼럼을 조사하고 이후 자동으로 조인한다.

형식.

NATURAL JOIN의 주의점 1. 조인 칼럼에 테이블 별칭을 사용하면 에러가 발생하는점 2. 조인에 참여하는 두 테이블에 동일한 이름과 테이블 타입을 가진 칼럼이 존재해야 하는점 주의

조인 칼럼에 테이블 별칭을 사용하면 오류가 발생하는 예

이렇게 친절하게 가르쳐 준다.

EQUI JOIN – JOIN ~ USING

using 절에 조인이 대상이 되는 칼럼을 지정합니다.

형식 select table 1 . column , table 2 . columnfrom table 1 join table 2 using ( column ) ;

NATURAL JOIN은 조인에 참여하는 두 테이블에는 같은 이름과 테이블 유형을 가진 칼럼이 존재해야 하는 조건이 있었다. 만약 데이터 유형이 일치하지 않을 경우 Using절을 사용하여 equi join에 사용되는 칼럼명만 지정하여 사용

칼럼명은 조인 대상 테이블에서 동일한 이름으로 정의되어 있어야 한다.

여기서 dno를 using 절에 사용할 equi join에 사용되는 칼럼명만 지정

EQUI JOIN – JOIN ~ ON

NATURAL JOIN 조건은 기본적으로 같은 이름에 같은 값을 가진 로우끼리 결합한다.

만약 임의의 조건을 지정하거나 조인할 칼럼을 지정하려면 ON절을 사용

조인 조건만을 ON절에 기술하고 다른 검색이나 필터 조건은 WHERE절로 분리하여 기술 가능

그러니까.

쉽게 말하면 조건을 주는 것이고 조건을 먼저 주는 것이다.햄버거를 먹을 때 치즈를 빼고 주문을 하세요. 할 때 치즈를 빼는 것이다.

on은 선조건 where는 검색하는 조건

이렇게 보면 on절을 써서 dno끼리 맞춰줬어.

NON – EQUI JOIN은 조인 조건에 특정 범위 내에 있는지를 조사하기 위해 사용 말 그대로

where절에 ‘<', between a AND b와 같이'='조건이 아닌 연산자를 사용합니다.

여기서는 between을 사용했다.

여기에서는 losal보다 큰 salary와 hisal보다 큰 salary를 출력했다.

여기에서는 Low보다 작고 가장 큰 것보다 큰 것을 꺼내는 검색 조건을 설정했기 때문에 출력을 할 수 없다.

세 개의 테이블을 가지고 오다

여기에서는 employee, department, salgrade의 세 테이블을 꺼낸다.

3개의 테이블을 조인하고 출력했다.

self join은 한 테이블에 있는 칼럼끼리 연결해야 하는 조인이 필요할 때 사용

scott라는 직원의 매니저 이름을 검색하기 위해서는 scott의 매니저 사원 번호가 필요하고 사원 번호로 사원명을 조회해야 합니다. 그러나 scott의 매너와 사원 번호로 이름을 조회하고자 하는 테이블이 한 테이블이라서, 테이블 별칭을 사용하고 self join할 필요가 있습니다.

무슨 말이냐면요. 굉장히 어렵게 얘기해놨는데

저기 사번으로 매니저 번호를 검색하려고 하지만 모두 같은 테이블에 있기 때문에 자신을 조인해 사용해야 한다. 는 것이다.

한 테이블에서 두 칼럼을 연결하고 equi join하여 from절에서 한 테이블에 별칭을 지정 employee 테이블에서 where절을 사용하여 self join을 처리

위의 쿼리문을 보시면 굉장히 복잡해 보이는데 별칭을 다른 것으로 바꾸면

이렇게 표현할 수 있다.

별칭을 짧게 하고 나니 매우 간단해졌다.

outer join

EQUI JOIN 조인 조건에서 기술한 칼럼에 대해 두 테이블 중 어느 칼럼이라도 null이 저장되어 있다면 “=” 결과는 틀립니다. 그러므로 null값을 가진 행은 조인결과에서 얻을 수 없습니다. null에 대하여 어떠한 연산을 적용하여도 연산결과가 NULL이므로

언제 쓸 거야?

euqi join에서 칼럼 값 중 하나가 null인데 조인결과로 출력해야 할 경우 outer join을 사용합니다.

where절의 조인조건에서는 outer join 연산자인 ‘+’ 기호를 사용합니다.Join 조건 없이 null이 출력되는 테이블 칼럼에 (+) 기호를 추가합니다.

위에 셀프 조인한걸 보면 아마 king이 없을거야.

그런데 여기서는 king이 출력된다.

왜??+기호를 사용해서 아우터 조인을 했으니까

그리고 outer join은 join~on절과 같이 사용할 수 있다.

기호를 사용하지 않고 직접 outer join이라고 입력했다.

그리고 왼쪽에 null값이 있는 경우는 left 오른쪽에 있는 경우는 right 양쪽이 있는 경우는 full을 사용하면 된다. 근데 그냥 + 적으면 댐