min's devlog

ANSI SQL 본문

til/Oracle

ANSI SQL

값진 2022. 5. 18. 10:19

ANSI SQL

DBMS들에서 각기 다른 SQL를 사용하므로, 미국 표준 협회(American National Standards Institute)가 공통적으로 사용할 수 있도록 표준 SQL문을 정립 시켜 놓은 것

 

  - 표준 SQL문이기 때문에 DBMS의 종류의 제약을 받지 않는다. 따라서 대부분의 DBMS에서 사용할 수 있다.

  - join문과 where문의 분리로 일반 쿼리문보다 가독성이 좋다.

 

 

예시

-- 같은 결과 값을 출력

SELECT a.name,
       b.name
FROM MASTER a,
     CLIENT b
WHERE a.date = b.date

-- ANSI
SELECT a.name,
       b.name
FROM MASTER a JOIN CLIENT b
      ON a.date = b.date

 

 

OUTER JOIN

  - 내부 조인의 반대 개념이다.

  - 내부 조인 결과와 + 결과 셋에 포함되지 못한 부모 테이블의 나머지 레코드를 합하는 행동

    SELECT 
        컬럼리스트
    FROM 테이블A
        INNER JOIN 테이블B
            ON 테이블A.컬럼 = 테이블B.컬럼;
            
    SELECT 
        컬럼리스트
    FROM 테이블A
        (LEFT|RIGHT) OUTER JOIN 테이블B
            ON 테이블A.컬럼 = 테이블B.컬럼;

 

 

RIGHT(LEFT) OUTER JOIN

  - FROM 절에 RIGHT OUTER JOIN을 명시한다.

  - 이 때 OUTER 생략하고 RIGHT JOIN만 명시할 수도 있다.

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

  - LEFT OUTER JOIN과 RIGHT OUTER JOIN은 기준이 되는 테이블이 조인 수행 시, 첫번째로 ACCESS 되는

    테이블이 된다.

-- 대여 기록이 있는 회원의 이름과 대여 횟수를 가져오시오.
select
    m.name,
    count(*)
from tblMember m
    inner join tblRent r
        on m.seq = r.member
            group by m.name;


-- 대여 기록과 무관하게 > 모든 회원의 이름과 대여 횟수를 가져오시오.
select
    m.name,
    count(rentdate) --**연습
from tblMember m
    left outer join tblRent r
        on m.seq = r.member
            group by m.name
                order by count(rentdate) desc;

 

'til > Oracle' 카테고리의 다른 글

PL/SQL (2)  (0) 2022.05.20
프로시저(Procedure)와 반복문  (0) 2022.05.19
[Education center] 데이터 생성  (0) 2022.05.17
인덱스(index)  (0) 2022.05.11
PL/SQL  (0) 2022.05.09
Comments