본문 바로가기
Programming/SQL

[Oracle] 02. 연결 연산자, 중복제거(DISTINCT), 정렬(ORDER BY)

by 고막고막 2019. 4. 18.

연결연산자(||)

여러 데이터를 하나의 데이터로 합쳐 한번에 보여주고 싶을 때 사용한다. 컬럼과 컬럼을 연결 또는 컬럼과 리터럴(문자, 숫자, 날짜 등)을 연결할 수 있다. 

SELECT ename||'의 업무는 '||job||'입니다.' 직원업무 FROM emp;

단, 연결연산자는 사칙연산자보다 우선순위가 높기 때문에 연산 순서를 지정해주지 않으면 'Invalid Number Error'가 발생한다. 아래 예제는 문자열과 숫자열을 더하려고 했기 때문에 에러가 발생한 경우이다.

//에러 발생
SELECT ename||' '||sal+10 FROM emp;
//바른 사용
SELECT ename||' '||(sal+100) FROM emp;

중복제거(DISTINCT)

SELECT [DISTINCT/ALL] 컬럼;

중복제거 DISTINCT를 지정하지 않으면 기본형인 ALL이 생략되어 있다.

SELECT job FROM emp;

SELECT DISTINCT job FROM emp;

정렬(ORDER BY 컬럼 [ASC/DESC])

지정된 컬럼을 대상으로 정렬을 수행한다. ASC(오름차순)/DESC(내림차순)를 지정하지 않으면 ASC가 기본값이다. 컬럼이 여러개인 경우 지정한 특정 컬럼으로 정렬할 수 있다. 또 별명, 수식, 검색항목의 순서로도 정렬할 수 있다!

// 별명으로 정렬한다
SELECT eno 사번, ename 이름, sal*12+NVL(comm,0) 연봉 FROM emp ORDER BY 연봉 DESC;

// 첫번째 컬럼으로 정렬한다
SELECT eno, ename, sal FROM emp ORDER BY 1;

정렬대상인 컬럼이 여러 개인 경우 앞에 지정한 컬럼이 동일한 값에 대해서 뒤에 지정된 컬럼으로 정렬된다. 즉, 앞쪽 컬럼의 정렬이 깨지지 않는 범위 내에서 두 번째 컬럼으로 정렬을 수행한다. 아래 예제는 부서와 급여로 정렬하는 경우에 부서로 먼저 정렬된 후 같은 부서 안에서 급여순으로 정렬되는 것을 확인할 수 있다.

SELECT dno 부서번호, eno 사번, ename 이름, sal 급여
FROM emp ORDER BY 부서번호, 급여 DESC;