[DB#17] 정렬(SELECT) 데이터를 정렬해보자!(ASC, DESC)
정렬은 데이터를 순서대로 나열하는 것인데,
형식은 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 테이블명);
이라고 하면 되겠다.