ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL 기본 (ORDER BY절)
    카테고리 없음 2020. 4. 9. 20:26

    ORDER BY절

     

    - 조회된 데이터를 특정 칼럼을 기준으로 정렬하여 출력

     

    - ORDER BY절에 Column명 대신 SELECT절에서 사용한 ALIAS명이나 칼럼 순서를 나타내는 정수도 사용 가능

     

    SYNTAX

    SELECT 칼럼명 [ALIAS명]
    
    FROM 테이블명
    
    [WHERE 조건식]
    
    [GROUP BY 칼럼이나 표현식]
    
    [HAVING 그룹조건식]
    
    [ORDER BY 칼럼이나 표현식 [ASC OR DESC]];

     

    - 날짜형 데이터 타입은 오름차순으로 정렬했을 경우 날짜 값이 가장 빠른 값이 먼저 출력

     

        * ORACLE은 NULL값을 가장 큰 수로 간주하여 오름차순의 경우 가장 마지막에 출력

     

        * SQL Server는 NULL을 가장 작은 수로 간주하여 오름차순의 경우 가장 처음에 출력

     

     

    좋은 예 1.

     

     

     


     

    SELECT 문장 실행 순서

     

    - GORUP BY 절과 ORDER BY절이 같이 사용될 때 SELECT 문장은 6개의 절로 구성되고, 

     

      SELECT 문장의 수행 단계는 다음과 같다.

     

    다섯번째 >> SELECT 칼럼명 [ALIAS명]
    
    첫번째 >>   FROM 테이블명
    
    두번째 >>   WHERE 조건식
    
    세번째 >>   GROUP BY 칼럼이나 표현식
    
    네번째 >>   HAVING 그룹조건식
    
    여섯번째 >> ORDER BY 칼럼이나 표현식

     

    ※ ORDER BY절에는 SELECT 목록에 나타나지 않은 문자형 항목이 포함될 수 있다.

     

        -> RDBMS가 데이터를 메모리에 올릴 때 행 단위로 모든 칼럼을 가져오게 되므로 SELECT절에서

     

           일부 컬럼만 선택되더라도 ORDER BY절에서 메모리에 올라와 있는 다른 칼럼의 데이터 사용가능

     

       단, 반드시 SELECT 목록에 나타나는 문자형 항목을 사용해야 하는 경우

     

         1. SELECT DISTINCT를 지정하는 경우

     

         2. SQL문장에 GROUP BY절이 있는 경우

     

         3. SELECT문에 UNION 연산자가 있는경우 

     

     


    인라인 뷰에서 조회한 칼럼으로 ORDER BY

     

    - 인라인 뷰에 정의된 칼럼 사용

     

    - 인라인 뷰에 미정의된 칼럼 사용

     -> SUBQUERY의 SELECT절에서 선택되지 않은 칼럼들은 계속 유지되는 것이 아니라 

     

         SUBQUERY의  범위를 벗어나면 더 이상 사용할 수 없게 된다.

     

     

     

    GROUP BY절에서 그룹핑 기준을 정의하게 되면 DB는 일반적인 SELECT문장처럼

     

        FROM절에 정의된 테이블 구조를 그대로 가지고 가는 것이 아니라

     

        GROUP BY절의 그룹핑 기준에 사용된 칼럼과 집계함수에 사용될 수 있는

     

        숫자형 데이터 칼럼들의 집합을 새로 만든다

       

       

         -> 그래서 GROUP BY절 이후 수행 절인 SELECT절이나 ORDER BY절에서

     

             개별 데이터를 사용하는 경우 에러가 발생한다.

     


     

    TOP N 쿼리

     

    - ROWNUM

     

      순위가 높은 N개의 ROW를 추출하기 위해 ORDER BY절과 WHERE절의 ROWNUM 조건을 같이 사용하는

     

      경우가 있는데 이 두 조건으로는 원하는 결과를 얻을 수 없다.

     

      ORACLE이 경우 정렬이 완료된 후 데이터의 일부가 출력되는 것이 아니라, 데이터의 일부가 먼저 추출된 후 

     

      데이터에 대한 정렬 작업이 일어나므로 주의해야 한다.

      

      ※ ORDER BY절의 결과 집합을 결정하는데 관여하지 않음

     

    ROWNUM으로 TOP N 을 조회하는 방법

     

    IN-LINE VIEW를 사용해서 ROWNUM이 1, 2, 3인 컬럼을 조회

    SQL SERVER의 TOP문법

     

    STNTAX 

     

    TOP (Expression [PERCENT] [WITH TIES])
    
    TOP (2)  -> 상위 두개 ROW
    
    TOP (2) WITH TIES -> 상위 두개 ROW을 뽑는데 마지막 ROW와 동일한 값인 ROW가 있으면 같이 출력

     

    사용 예

    댓글

Designed by Tistory.