YJ의 새벽

sqld (4) - SQL 활용 본문

SelfStudy/sqld

sqld (4) - SQL 활용

YJDawn 2024. 3. 6. 14:23

 

 

 

 

 

 

  • 집합 연산자  

-- 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회할 때 사용.

-- SELECT 절의 컬럼 수가 동일하고, SELECT 절의 동일 위치에 존재하는 컬럼의 데이터 타입이 상호 호환일때 사용

 

 

  • 일반 집합 연산자

UNION   :   합집합   (  중복 행 1개로 ..  )

UNION ALL  :  합집합  ( 중복행 모두 표시 )  

INTERSECT  :  교집합  (  중복행 1개로 .. )

MINUS  :  차집합  ( 중복행 1개로 .. )

CROSS JOIN  :  곱집합 , product

 

 

  • 순수 관계 연산자

SELECT   -->  WHERE  절로 구현

PROJECT  -->  SELECT 절로 구현

NATRUAL JOIN  -->  다양한 JOIN 으로 구현

DIVIDE  --  현재사용 x

 

 

 

 


 

 

 

  • JOIN

1.   INNER JOIN    :   JOIN 조건에서 동일한 값이 있는 행만 반환.

                                  USING 이나 ON 절을 필수적으로 사용

 

2.  NATURAL JOIN  :   두 테이블간 동일한 이름을 갖는 모든 컬럼에 대해 EQUI JOIN  수행

 

3.  USING 조건절  :  같은 이름을 가진 컬럼들중 원하는 컬럼에 대해서만 선택적으로 EQUI JOIN  할수있다.

                                 ALIAS 나 테이블 이름과 같은 접두사를 붙일 수 없다 .

 

4. ON 조건절  :  컬럼명과 다르더라도 JOIN 조건을 사용할 수 있다.,  ALIAS, 테이블명 반드시 사용

 

5. CROSS JOIN   :  양쪽 집합의 M * N  건의 데이터 조합이 발생. == 카테시안 곱

 

6. OUTER JOIN  ( LEFT, RIGHT , FULL )

 

JOIN 조건에서 동일한 값이 없는 행도 반환 가능하다.

USING 이나 ON 조건절 반드시 사용해야 함.  

SQL 식에서  (+) 안붙은 쪽으로 JOIN 한다.

 

  -- LEFT OUTER JOIN  :  먼저 표기된 좌측 테이블에 해당하는 데이터를 읽은 후, 

                                          나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어온다.

                                          같은 값이 없는경우 NULL 값으로 채운다.

  -- RIGHT OUTER JOIN  :  LEFT OUTER JOIN 과 반대.

 

  -- FULL OUTER JOIN  :  좌우측 테이블의 모든 데이터를 읽어 JOIN 하며 결과를 생성. 

                                          중복 데이터는 삭제한다.

 

 

  • 셀프 조인

한 테이블 내 두 컬럼이 연관 관계가 있을때, 동일 테이블에 사이의 조인,

 

 


 

 

  • 계층형 질의

테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해 사용  ex ) 사원과 팀장

 

 

START WITH  :  계층 구조 전개의 시작 위치 지정

CONNECT BY  :  다음에 전개될 자식 데이터 지정

PRIOR  :  CONNECT BY 절에 사용되며, 현재 읽은 컬럼을 지정한다.

                PRIOR 자식 = 부모  형태를 사용하면   부모 -> 자식 형태로 전대하는 순방향 전개.

                PRIOR 부모 = 자식    역방향 전개.

NOCYCLE  :  동일한 데이터가 전개되지 않음.

ORDER SIBLINGS BY~  :  형제 노드간의 정렬 수행 .   ( 동일 LEVEL )

WHERE  :  모든 전개를 수행한 후, 지정된 조건을 만족하는 데이터만 추출.

 

LEVEL  :  루트데이터이면 1  ,  그 하위는  2  ,  리프데이터까지 1씩 증가

CONNECT_BY_ISCYCLE  :  해당 데이터가 조상이면 1,  아니면 0   ( CYCLE 옵션을 사용했을시만 사용가능 )

 

 

 

  • 서브 쿼리 

하나의 SQL 문 안에 포함되어 있는 또다른 SQL문,  알려지지 않은 기준을 이용한 검색에 사용.

-- 서브쿼리는 괄호로 감싸서 사용한다.

-- 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능하다.

   단일행 비교 연잔자는 서브쿼리의 결과가 반드시 1건 이하여야 하고,

   복수행 비교 연산자는 결과 건수와 상관없다.

-- 서브쿼리에서는 ORDER BY 절 사용 X

 

 

*** 단일행 비교 연산자  :  = , < , > , <>  등. 

*** 다중행 비교 연산자  :  IN,  ALL , ANY , SOME  등

 

 

  • 스칼라 서브쿼리

한 행, 한 컬럼만을 반환하는 단일행 서브쿼리.

 

  • 인라인 뷰

FROM 절에서 사용되는 서브쿼리.    ( 메인쿼리의 컬럼 참조 불가 )

ORDER BY 사용가능.

 

 

 


 

 

 

  • 순위 관련 함수

RANK  :  동일한 값에 동일순위 부여   (  1, 2 , 2 , 4  )

DENSE_RANK  :  동일한 값에 대해 동일한 순위 부여  (  1, 2, 2, 3 )

ROW_NUMBER  :  동일한 값이라도 고유 순위 부여  ( 1, 2, 3, 4 ) 

 

 

 

 

 


 

 

 

  • 조인 연산

1.  Nested Loop Join  

    -- 하나의 집합을 기준으로 순차적으로 연결 테이블의 row 를 결합

    -- Random Access  ( 좁은 범위에 유리 )  --> 부하 가능성

    -- 후행 테이블에 조인을 위한 인덱스 필요.

    -- 온라인 트랜잭션 처리 (OLTP) 에 유리.

 

2.  Sort Merge Join

    -- 양쪽 테이블 처리 범위를 각자 access . 

    -- 마땅한 인덱스 없을때  /  조인의 범위가 넓을 때

    -- 정렬후 merge

 

3. Hash Join 

    -- sort 대신 hash 값을 이용해 table 조인.

    -- 대용량 처리에 best

    -- 연산자가 '=' 일때만 사용 가능,  == EQUI JOIN

    --  두 개 테이블 중 더 작은 테이블을 hash 메모리에 로딩.

 

 

 

 

 

 

'SelfStudy > sqld' 카테고리의 다른 글

sqld (3) - SQL 기본  (0) 2024.02.21
sqld (2) - 데이터 모델과 성능  (0) 2024.02.21
sqld (1) - 데이터 모델링의 이해  (0) 2024.02.21
Comments