Database SQL/Oracle

[DB#17] 정렬(SELECT) 데이터를 정렬해보자!(ASC, DESC)

양동민 2020. 11. 26. 14:25

정렬은 데이터를 순서대로 나열하는 것인데,

형식은 ORDER BY 항목 ASC/DESC, ... (참고로 ASC는 생략가능)

 

-모든 사람을 번호순으로 정렬한다면(PERSON_NO ASC)

SELECT * FROM 테이블명 ORDER BY PERSON_NO ASC; (오름차순)

SELECT * FROM 테이블명 ORDER BY PERSON_NO ; (생략가능 안쓰면 ASC로 처리)

SELECT * FROM 테이블명 ORDER BY PERSON_NO DESC; (내림차순)

 

-모든 사람을 ASCORE 성적순으로 출력(ASCORE DESC)

SELECT * FROM 테이블명 ORDER BY ASCORE DESC;

 

-모든 남자들을 A 항목 성적순으로 출력(조건+정렬)

SELECT * FROM 테이블명 WHERE GENDER='남자' ORDER BY ASCORE DESC;

 

-모든 사람을 총점 순으로 출력(ASCORE + BSCORE DESC)

SELECT * FROM 테이블명 ORDER BY ASCORE+BSCORE DESC;

 

별칭을 준다면 *와 같은 와일드카드는 테이블.뒤에 붙는다.

SELECT 테이블명.*, ASCORE+BSCORE 총점 FROM 테이블명

ORDER BY ASCORE+BSCORE DESC;

 

-모든 사람을 최근 가입한 순으로 출력(REGIST_DATE DESC)

SELECT * FROM 테이블명 ORDER BY REGIST_DATE DESC;

 

-성별순으로 정렬

SELECT * FROM 테이블명 ORDER BY GENDER ASC;

 

-성별순으로 총점순으로 정렬 (조건 + 정렬)

SELECT 테이블명.*, ASCORE+BSCORE 총점 FROM 테이블명

OREDER BY GENDER ASC, ASCORE+BSCORE DESC;

 

-가장 A항목 점수가 높은 사람의 이름을 출력

이것은 한번에 하기 어렵기 때문에 식 몇가지를 합쳐 사용한다.

우선 첫번째로 자바점수가 높은순으로 정렬하고, 첫번째 항목을 조회할 건데

ㅡSELECT * FROM 테이블명 ORDER BY ASCORE DESC;

한 후에 

ㅡSELECT * FROM (

           SELECT * FROM 테이블명 ORDER BY ASCORE DESC) WHERE ROWNUM = 1;

괄호 내의 식을 먼저 계산한 후 전체 명령문을 이행한다.

위(괄호없는식)가 기본 쿼리문이라하면 이것(괄호 있는 식)을 서브쿼리문이라고 한다.

 

이제 가장 높은 자바 점수를 찾으려면 

SELECT MAX(ASCORE) FROM PERSON;

하여 가장 높은 점수를 찾고, 그에 해당하는 사람을 찾으려면

SELECT * FROM 테이블명 WHERE ASCORE = 해당점수;

로 하면 되겠다.

 

그러니 한번에 하려면 쿼리문 2개를 서브쿼리문1개로 만들어야한다.

SELECT * FROM 테이블명 WHERE ASCORE = MAX(ASCORE) 하면 테이블 전체를 훑고하다보면 많은 조회가 필요하다.

때문에 순차적으로 실행시킬수 있도록해서 조회수를 빠르게하여 결과를 빠르게 나오게 하려면

효율적으로

SELECT * FROM 테이블명 WHERE ASCORE = (SELECT MAX(ASCORE) FROM 테이블명); 

이라고 하면 되겠다.