Oracle DB - Query 구문 (DISTINCT ~ WHERE)

▣ 쿼리 구문

◎ DISTINCT - 중복 제거
: SELECT (DISTINCT/ALL(default)) 칼럼
FROM 테이블;

◎ ORDER BY - 정렬
: SELECT 칼럼
FROM 테이블
ORDER BY (정렬할 칼럼) (ASC(default)/DESC) 오름차순 / 내림차순

 - 정렬할 칼럼의 순서대로 우선 적용
 - Oracle DB는 RDB

◎ WHERE - 조건 검색
: SELECT 칼럼
FROM 테이블
WHERE 조건

  - 조건의 좌변에 수식이 들어가는 것은 좋지 않음
    → 좌변에 우변과 맞지 않는 데이터 형이 비교된다면 좌변의 내용은 모두 숫자로 바뀌어 비교된다 (full table scan)
    → 데이터 자동 형 변환을 통해 모든 데이터를 오류없이 스캔해주지만, 그 속도에 있어서 매우 비효율적이 된다.
    → 왠만하면 스캔을 적게해주는 방식으로
    → 칼럼을 제외한 수식을 우변으로 옮기자
  - 스캔의 종류는 두 가지
    ① Full table scan - 모든 레코드를 다 읽어야하므로, 모든 테이블을 스캔하는 시간과 동일한 시간을 소비
    ② index scan - 임의의 테이블을 생성해서 정렬이 안되어있는 기본 테이블을 복사하여, 정렬이 된 상태로 붙여넣는다
       - binary search를 사용 : 절반의 위치를 질의 낮으면 아래로, 높으면 위로 재검색
        → 그러나 RDB에서는 b* tree 방식을 이용하기에 binary search보다 훨씬 빠름
       - 모든 레코드(row)에는 rowid가 존재
       - rowid는 64^18가지로 이만큼의 row를 생성할 수 있음 (extended row의 경우)

 - NULL과의 비교 연산
   → NULL은 결정된 값이 아니므로 비교 연산자가 사용될 수 없음
   → 보너스 컬럼이 NULL인 사원의 검색 (IS NULL / IS NOT NULL)
    : SELECT * FROM emp WHERE comm IS NULL
   → 입사일의 비교
    : SELECT * FROM emp WHERE hdate > '1995/12/31'; - RDB에서는 시간값이 분 단위로 기록되기에 수식연산 가능

댓글

이 블로그의 인기 게시물

Linux Server - FTP 실습 (2 / 2) : 사용자 제한 ( ftpuser / user_list )

전자서명 개념

4. 4 (수) - 암호 (DES 암호 / F함수 구조)