로넌
s'develop
로넌
전체 방문자
오늘
어제
  • 분류 전체보기 (41)
    • Programming (13)
      • Java (6)
      • SpringBoot (3)
      • JPA (3)
      • JavaScript (1)
    • Tools (8)
      • IntelliJ (2)
      • etc (6)
    • Database (6)
    • Algorithm (14)
    • ETC (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ansijoin
  • 스프링부트오류
  • 배열내림차순
  • 인텔리제이단축키
  • includes함수
  • JPA데이터베이스설계
  • 반복문체크박스
  • checkbox_includes
  • 자바
  • casting오류
  • 최대공약수]
  • 스프링부트
  • MySQL현재시간
  • MySQL
  • Server Tomcat v8.5 Server at localhost failed to start
  • git오류해결방법
  • 소스트리스태시
  • oraclejoin
  • 체크박스반복문
  • 배열오름차순

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
로넌

s'develop

Database

[MySQL/Oracle] Oracle Join에서 Ansi Join으로 변경해야했던 이유 및 간단한 개념정리

2022. 11. 14. 23:45

기존에 사용하고 있던 쿼리를 유지보수업무 수행을 위해 수정해야했다.

수정해야 하는 쿼리는 Oracle Join이었는데 사용해본 적은 있지만 뭔지도 모르고 사용했던지라 개념이 부족했고, 수정을 했지만 원하는대로 조회가 되지 않아서 한참을 헤맸다. 

 

쿼리를 Ansi Join 에서 Oracle Join으로 바꾼 이유
나는 outer join을 해서 join 테이블에 데이터가 없더라도 null이라도 가져와야 했다.
하지만 기존에 코드가 Oracle Inner Join을 사용하고 있었고, 해당 프로젝트에 DB가 MySQL이었기 때문에 Oracle Join을 유지하면서 쿼리를 수정하기가 어려웠다. 왜냐하면 MySQL에서는 (+)를 붙이면 문법에 오류가 있다는 오류가 생겨 원하는데로 조회가 되지 않았다. 결국 Ansi Join으로 변경하여 쿼리를 수정했다. 

  

 

1. Ansi Join (안시조인)

SELECT
	E.EMP_NO,
	E.EMP_NAME,
	D.DEPT_NM
FROM EMP AS E -- 메인 테이블 
INNER JOIN DEPT AS D -- 조인 테이블
ON E.DEPT_CD = D.DEPT_CD

 

2. Oracle Join

SELECT
	E.EMP_NO,
	E.EMP_NAME,
	D.DEPT_NM
FROM
	EMP AS E, -- 메인 테이블
	DEPT AS D -- 조인 테이블
WHERE 
	E.DEPT_CD = D.DEPT_CD -- 오라클 조인은 조인 조건을 where절에 작성하면 된다

 

위에 정리한 1번과 2번은 inner join(내부조인) 으로, 즉 메인 테이블과 조인 테이블에 값이 모두 존재해야 조회가 된다.

 

3. Ansi Join (outer join)

SELECT
	E.EMP_NO,
	E.EMP_NAME,
	D.DEPT_NM
FROM EMP AS E -- 메인 테이블 
LEFT OUTER JOIN DEPT AS D -- 조인 테이블
ON E.DEPT_CD = D.DEPT_CD

 

4. Oracle Join (outer join)

SELECT
	E.EMP_NO,
	E.EMP_NAME,
	D.DEPT_NM
FROM
	EMP AS E, -- 메인 테이블
	DEPT AS D -- 조인 테이블
WHERE 
	E.DEPT_CD = D.DEPT_CD(+) -- 조인 테이블에 (+)를 붙여서 사용한다

 

3번과 4번은 outer join(외부조인) 으로 조인 테이블의 값이 존재하지 않더라도 메인 테이블의 데이터가 모두 조회되며, 조인테이블에 값을 가져오지 못하면 null로 조회된다.

 

 

저작자표시 비영리 변경금지 (새창열림)

'Database' 카테고리의 다른 글

[MySQL] 현재 시간 insert  (0) 2022.11.22
[MySQL] 5.7 다운로드 방법 (이미 8.0 버전이 깔려 있는 경우)  (0) 2022.09.20
[MySQL] GROUP_CONCAT 사용방법  (0) 2022.09.19
[MySQL] UNION, UNION ALL 연산자 사용법  (0) 2022.09.19
[MySql/Oracle] on duplicate key update(mysql) vs mergeinto(oracle) 사용방법  (0) 2022.01.10
    'Database' 카테고리의 다른 글
    • [MySQL] 현재 시간 insert
    • [MySQL] 5.7 다운로드 방법 (이미 8.0 버전이 깔려 있는 경우)
    • [MySQL] GROUP_CONCAT 사용방법
    • [MySQL] UNION, UNION ALL 연산자 사용법
    로넌
    로넌

    티스토리툴바