본문 바로가기
DB/SQL

ANSI SQL이란? /LEFT OUTER JOIN/ RIGHT OUTER JOIN/FULL OUTER JOIN

by 꼬바리 2021. 3. 16.

ANSI SQL

DBMS(Oracle, My-SQL, DB2 등등)들에서 각기 다른 SQL를 사용하므로, 미국 표준 협회(American National Standards Institute)에서 이를 표준화하여 표준 SQL문을 정립 시켜 놓은 것이다.

ANSI SQL 특징

  1. 표준 SQL문이기 때문에 DBMS의 종류에 제약을 받지 않는다. (MySQL, Oracle..)
    즉, 특정 벤더에 종속적이지 않아 다른 벤더의 DBMS로 교체하더라도 빠르게 다른 벤더사를 이동할 수 있다.
    특정 DBMS의 이탈이 가속되는 것도 ANSI SQL의 영향이 크다고 할 수 있다.
  2. 테이블간의 Join 관계가 FROM 에서 명시되기 때문에 WHERE 문에서 조건만 확인하면 된다.
    즉, 가독성이 일반 Query문보다 좋다.

ANSI SQL 비교 예제

Sample Data

create table TB1
(
  num int,
  name varchar(10)
)

insert into Test1 values ( 1, '삼성');
insert into Test1 values ( 2, '엘지');
insert into Test1 values ( 3, '애플');
insert into Test1 values ( 4, '레노버');


create table TB2
(
  num int,
  name varchar(20)
)


insert into Test2 values ( 1, '갤럭시 플립');
insert into Test2 values ( 2, '그램');
insert into Test2 values ( 3, '맥북 프로');

 


LEFT OUTER JOIN

FROM 절에 LEFT OUTER JOIN을 명시해주면 된다.

이때 OUTER를 생략하고 LEFT JOIN을 명시해도 적용 된다.

왼쪽 테이블을 기준으로 데이터가 출력되고 조건에 맞는 오른쪽 테이블의 컬럼이 같이 출력된다.

왼쪽 테이블은 전체가 출력되므로, 오른쪽 테이블에 참조할 값이 없으면 NULL이 나온다.

만약 조건에 맞는 오른쪽 컬럼 값이 다수인 경우 오른쪽 컬럼이 여러개 출력된다.

 

 

  • Query 문
종류 쿼리
Oracle SELECT TB1.*, TB2.NAME
FROM TB1, TB2
WHERE TB1.NUM = TB2.NUM(+)
ANSI SQL SELECT TB1.*, TB2.NAME
FROM TB1 LEFT OUTER JOIN TB2
ON TB1.NUM = TB2.NUM
  • 실행결과
NUM NAME NAME
1 삼성 갤럭시 플립
2 엘지 그램
3 애플 맥북 프로
4 레노버  

RIGHT OUTER JOIN

FROM 절에 RIGHT OUTER JOIN을 명시해주면 된다.

이때 OUTER를 생략하고 RIGHT JOIN을 명시해도 적용 된다.

오른쪽 테이블을 기준으로 데이터가 출력되고 조건에 맞는 왼쪽 테이블의 컬럼이 같이 출력된다.

오른쪽 테이블은 전체가 출력되므로, 왼쪽 테이블에 참조할 값이 없으면 NULL이 나온다.

만약 조건에 맞는 왼쪽 컬럼 값이 다수인 경우 왼쪽 컬럼이 여러개 출력된다.

 

 

  • Query 문
종류 쿼리
Oracle SELECT TB1.*, TB2.NAME
FROM TB1, TB2
WHERE TB1.NUM(+) = TB2.NUM
ANSI SQL SELECT TB1.*, TB2.NAME
FROM TB1 RIGHT OUTER JOIN TB2
ON TB1.NUM = TB2.NUM
  • 실행결과
NUM NAME NAME
1 삼성 갤럭시 플립
2 엘지 그램
3 애플 맥북 프로

 

FULL OUTER JOIN

ANSI에서만 지원하며, LEFT OUTER JOIN 과 RIGHT OUTER JOIN을 합친 것으로, 양쪽 모두 조건이 일치하지 않는 것까지 모두 결합해 출력한다.

 

  • Query 문
종류 쿼리
Oracle SELECT TB1.*, TB2.NAME
FROM TB1, TB2
WHERE TB1.NUM = TB2.NUM(+)
ANSI SQL SELECT TB1.*, TB2.NAME
FROM TB1 FULL OUTER JOIN TB2
ON TB1.NUM = TB2.NUM
  • 실행결과
NUM NAME NAME
1 삼성 갤럭시 플립
2 엘지 그램
3 애플 맥북 프로
4 레노버  

 

 

 

 

출처 :  velog.io/@gillog/ANSI-SQL%EC%9D%B4%EB%9E%80

728x90
반응형

댓글