Oracle DBA/SQL

20230621 (2) SQL 006 : 데이터를 정렬해서 출력하기

Nuez 2023. 6. 21. 10:33
반응형

이름과 월급을 출력하는데 월급이 낮은 사원부터 높은 사원순으로 출력하시오.

SELECT ename, sal 
FROM emp
ORDER BY sal;

 

구조 

SELECT 컬럼명

FROM emp

ORDER BY 정렬 기준이되는 컬럼명;

 

 

default는 오름차순 (asc)

내림차순으로 하려면 ORDER BY절 컬럼명 뒤에 desc를 추가로 기입하면 된다.  

 

SELECT ename, sal 
FROM emp
ORDER BY sal DESC;

 


문제11. 이름과 월급과 입사일을 출력하는데 최근에 입사한 사원부터 출력하시오.

SELECT ename, sal, hiredate
FROM emp
ORDER BY hiredate DESC;


ORACLE이 내부적으로 쿼리를 수행하는 순서 

(검색 속도 향상을 위해 알아둬야함. 코딩순서와 실행순서가 다름.)

 

FROM - SELECT - ORDER BY

 

1. 특정 테이블에서 (FROM)

2. 나열된 컬럼을 (SELECT)

3.  특정 컬럼 기준으로 정렬해 출력한다. (ORDER BY)

 

* ORDER BY절은 코딩할 때도, 실행할 때도 항상 마지막에 위치한다.


문제12. 문제11의 결과를 다시 출력하되, 컬럼명을 이름, 월급, 입사일로 출력하시오.

방법1) 

SELECT ename as 이름, sal as 월급, hiredate as 입사일
FROM emp
ORDER BY hiredate desc;

방법2)

SELECT ename as 이름, sal as 월급, hiredate as 입사일
FROM emp
ORDER BY 입사일 desc;

방법3)

SELECT ename as 이름, sal as 월급, hiredate as 입사일
FROM emp
ORDER BY 3 desc;

어느 방법을 선택하든 출력 결과는 동일하다.

 

방법2 해설) 위에 언급된 Oracle 쿼리 수행 순서를 감안하면,

SELECT 절에서 hiredate를 이미 '입사일'이라는 별칭으로 지정했으므로

가장 마지막으로 수행되는 ORDER BY절에서 정렬 컬럼명을 별칭으로 기입해도 오류없이 실행됨. 

 

방법3 해설) SELECT 절에 언급된 컬럼 순서대로 1,2,3... 숫자가 부여됨.

정렬하고 싶은 컬럼의 숫자를 컬럼명 대신 ORDER BY절에 기입해도 오류없이 실행된다. 


문제13. 이름과 부서번호와 월급을 출력하는데 부서번호를 ascending하게 출력하시오.
(order by절에 컬럼순서인 숫자를 넣어서 수행하시오.)

SELECT ename, deptno, sal
FROM emp
ORDER BY 2;

 


문제14. 이름과 부서번호와 월급을 출력하는데 부서번호를 ascending하게 출력하고, 
부서번호를 ascending하게 정렬된 것을 기준으로 월급을 descending하게 출력하시오.

SELECT ename, deptno, sal
FROM emp
ORDER BY 2, 3 desc;

부서번호를 먼저 ascending하게 먼저 출력해줘야하므로 ORDER BY절에 deptno부터 기입한다. 

asc는 default이므로 굳이 기입하지 않아도 된다. 

그 다음 그 정렬된 데이터를 바탕으로 다시 또 월급을 기준으로 descending하게 정렬해준다. 

이 경우 descending은 기본값이 아니므로 desc를 추가로 기입한다. 


문제15. 이름, 직업과 입사일을 출력하는데 직업별로 가장 먼저 입사한 사원들을 보기 위해서 직업을 ascending하게 정렬해서 출력하고, 입사일을 먼저 입사한 사원부터 출력되게 하시오. 

SELECT ename, job, hiredate
FROM emp
ORDER BY 2, 3;

 

이 경우 다 오름차순(asc) 정렬이므로 추가적 기입없이 컬럼명만 ORDEY BY절에 나열하면 된다.