ANSI SQL이란?

GilLog·2020년 10월 27일
3

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 문
종류쿼리
OracleSELECT TB1.*, TB2.NAME
FROM TB1, TB2
WHERE TB1.NUM = TB2.NUM(+)
ANSI SQLSELECT TB1.*, TB2.NAME
FROM TB1 LEFT OUTER JOIN TB2
ON TB1.NUM = TB2.NUM
  • 실행결과
NUMNAMENAME
1삼성갤럭시 플립
2엘지그램
3애플맥북 프로
4레노버

RIGHT OUTER JOIN

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

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

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

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

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

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

FULL OUTER JOIN

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

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

🙆‍♂️ 참고사이트 🙇‍♂️

SQL이란? [알지풍의 코딩 생활 이야기]

[5월 미션 : C조]SQL에 대해서

[SQL] ANSI, Oracle, MS-SQL에서 outer join 비교[개념도 리필이 되나요?]

profile
🚀 기록보단 길록을 20.10 ~ 22.02 ⭐ Move To : https://gil-log.github.io/

0개의 댓글