[DB/SQLD] DML (2)

1 분 소요

SELECT문

SELECT *
FROM EMP
WHERE EMPNO=1000;

select문을 이용해 데이터를 조회한다. 조건을 지정해 특정 칼럼이나 특정 행만을 조회할 수 있다.



||

SELECT ENAME || '님'
FROM EMP
WHERE EMPNO=1000;
위 코드를 보면   가 있는데 ENAME 칼럼 뒤에 ‘님’문자를 결합해 출력하라는 의미이다.



ORDER BY

SELECT *
FROM EMP
ORDER BY ENAME, SAL DESC;

order by는 데이터를 오름차순 혹은 내림차순으로 출력한다. 특별한 지정이 없으면 오름차순으로 정렬한다. 위 코드에서 ENAME 뒤에 ASC를 붙여 명시적으로 오름차순이라고 할 수 있지만, 생략이 가능하다.

order by가 정렬하는 시점은 모드 실행이 끝난 후 데이터를 출력해 주기 바로 전이다.

정렬을 하기 때문에 데이터베이스 메모리를 많이 사용한다. 즉 대량의 데이터를 정렬하면 성능 저하가 발생한다.

Oracle 데이터베이스는 정렬을 위해서 메모리 내부에 할당된 SORT_AREA_SIZE를 사용한다. 만약 SORT_AREA_SIZE가 너무 작으면 성능 저하가 발생한다.

정렬을 회피하기 위해서 인덱스를 생성할 때 사용자가 원하는 형태로 오름차순 혹은 내림차순으로 생성해야 한다.

index를 사용한 정렬 회피 테이블에서 기본키는 자동으로 오름차순 인덱스를 생성한다.

SELECT /*+ INDEX_DESC(A) */
FROM EMP A;

EMP테이블에서 EMPNO가 기본키이기 때문에 기본키로 오름차순 인덱스가 생성된다. 그래서 select문을 실행하면 그 테이블의 기본키로 오름차순 정렬되어 보여준다.

위 코드에서 /*+ INDEX_DESC(A) */를 사용해 힌트를 제공한다. 그래서 EMP 테이블에서 생성된 인덱스를 내림차순으로 읽게 지정한다. 그결과 select문에서 “order by empno desc”를 쓰지 않고도 empno를 기준으로 내림차순 정렬이 가능하다. 이 방법으로 oracle 데이터베이스에서 정렬 부하를 회피할 수 있다.



Distinct

distinct문은 칼럼명 앞에 지정해 중복된 데이터를 한번만 조회하게 한다.

SELECT DISTINCT DEPTNO 
FROM EMP
ORDER BY DEPTNO;



Alias

alias은 별칭으로 테이블명이나 칼럼명이 너무 길어서 간략화 할 때 사용된다.

SELECT ENAME AS "이름" 
FROM EMP a
WHERE a.EMPNO=1000;

‘as’ 를 쓰거나 ‘ ‘(공백)을 통해 별칭을 설정할 수 있다.