1장_8절. Order by절

1.Order by 정렬
-조회된 데이터를 특정 칼럼을 기준으로 정렬하는 것
-column명대신 alias명이나 칼럼순서를 나타내는 정수를 사용할 수 있음
-별도 정렬방식을 명시하지 않으면 기본적으로 오름차순(1,2,3,4.... : asc)
-asc(Ascending,오름차순) :가,나,다 .... ->기본값이므로 생략가능
-desc(Descending,내림차순) : 100,99,98,.... ->desc(describe,테이블구조 보여주는 명령어)와 같네?

ex1) K02팀 선수들을 player_name순으로 오름차순 정렬출력
SQL> select player_name, position
  2  from player
  3  where team_id='K02'
  4  order by player_name;
#4번줄 : order by player_name asc;로 써도 무방함.

PLAYER_NAME                              POSITION
---------------------------------------- --------------------
가비                                     MF
강대희                                   MF
고종수                                   MF

ex2)K02팀 선수들을 player_name순으로 내림차순 정렬출력
SQL> select player_name, position
  2  from player
  3  where team_id='K02'
  4  order by player_name desc;

PLAYER_NAME                              POSITION
---------------------------------------- --------------------
하태근                                   MF
코샤                                     DF
최호진                                   GK

ex3)alias사용하여 정렬
SQL> select player_name 선수명, position 포지션
  2  from player
  3  where team_id='K02'
  4  order by 선수명;

선수명                                   포지션
---------------------------------------- --------------------
가비                                     MF
강대희                                   MF
고종수                                   MF

ex4)정렬에 순서가 있게하여 정렬
SQL> select player_name 선수명, position 포지션
  2  from player
  3  where team_id='K02'
  4  order by 포지션, 선수명;
=>포지션별 오름차순 정렬후, 선수명별 오름차순정렬됨

선수명                                   포지션
---------------------------------------- --------------------
김강진                                   DF
김병국                                   DF
김병근                                   DF
김성환                                   DF
김태권                                   DF
손대호                                   DF
손승준                                   DF
안동원                                   DF
왕선재                                   DF
윤성효                                   DF
이성용                                   DF

선수명                                   포지션
---------------------------------------- --------------------
정영선                                   DF
정유진                                   DF
정진우                                   DF
정호                                     DF
조홍기                                   DF
코샤                                     DF
김관희                                   FW
김만근                                   FW
김선우                                   FW
김용우                                   FW

##
SQL> select player_name 선수명, position 포지션
  2  from player
  3  where team_id='K02'
  4  order by 포지션 asc, 선수명 desc;
=>포지션별로 오름차순 정렬 후 , 선수명으로 내림차순 정렬.

ex5) index사용 정렬
SQL> select player_name 선수명, position 포지션, height 키
  2  from player
  3  where team_id='K02'
  4  order by 3, 포지션;
=>index를 사용하여 키순서로 정렬후 포지션별로 정렬
=>1번 index는 선수명, 2번 index는 포지션, 3번 index는 키이다. 
따라서 키순으로 오름차순 정렬.

선수명                                   포지션                       키
---------------------------------------- -------------------- ----------
정준                                     MF                          170
고창현                                   MF                          170
이성용                                   DF                          173
서정원                                   FW                          173
정기범                                   MF                          173
김선우                                   FW                          174
김종민                                   MF                          174
강대희                                   MF                          174
조홍기                                   DF                          175
김병근                                   DF                          175
김용우                                   FW                          175

선수명                                   포지션                       키
---------------------------------------- -------------------- ----------
박용훈                                   MF                          175
정동현                                   MF                          175
정두현                                   MF                          175
데니스                                   FW                          176
김현두                                   MF                          176
김동욱                                   MF                          176
윤원일                                   MF                          176
고종수                                   MF                          176
김만근                                   FW                          177
가비                                     MF                          177
오규찬                                   MF                          178

선수명                                   포지션                       키
---------------------------------------- -------------------- ----------
정진우                                   DF                          179
김여성                                   MF                          179
김태권                                   DF                          180
최건하                                   FW                          180
김관희                                   FW                          180
김재민                                   MF                          180

2.select문장의 실행순서
5번째 : select 칼럼명(alias명)
1번째 : from 테이블
2번째 : where 조건식
3번째 : group by 칼럼이나 표현식
4번째 : having 그룹조건식
6번째 : order by 칼럼이나 표현식

ex)
SQL> select team_id 팀명, min(height) 최소키, max(height) 최대키
  2  from player
  3  where team_id >= 'K05'
  4  group by team_id
  5  having min(height) >= 168
  6  order by 최소키;
=>순서1(from) : player테이블에서
순서2(where) : team_id가 K05이상인 조건을 만족하는 모든 행을
순서3(group by) : team_id를 기준으로 그룹별로 묶은후
순서4(having) : min(height)가 168이상인 조건을 만족하는 모든 그룹을 선택하여 
순서5(select) : 팀명,최소키,최대키를 보여주되
순서6(order by) : 최소키 순서로 오름차순 정렬하여 보여준다.

팀명       최소키     최대키
------ ---------- ----------
K06           168        191
K07           168        189
K09           168        192
K15           168        181
K10           169        194
K14           169        170
K05           170        191
K12           172        175
K11           173        180
K13           173        174

3.Top N쿼리
-Oracle에서 상위3명을 추출하려면 
1)order by로 정렬한 새로운 테이블에서
2)rownum 조건을 사용하여 행을 추출한다

-sql server에서 상위3명을 추출하려면
1)그냥 top(3) 칼럼명을 하면됨. order by 조건을 뒤에 써도됨.(동적db라 그런가?)

ex1)잘못된 사용 : emp테이블에있는 상위3개가 추출됨.
SQL> select ename, sal
  2  from emp
  3  where rownum <4
  4  order by sal desc;

ENAME                       SAL
-------------------- ----------
ALLEN                      1600
WARD                       1250
SMITH                       800

ex2)잘된사용 : emp에서 내림차순으로 정렬한 새로운 테이블에서 상위3개가 추출됨.
SQL> select ename, sal
  2  from (select ename, sal
  3     from emp
  4     order by sal desc)
  5  where rownum < 4;

ENAME                       SAL
-------------------- ----------
KING                       5000
SCOTT                      3000
FORD                       3000

댓글

이 블로그의 인기 게시물

1장_1절 관계형 데이터베이스 개요

2장_1절. 표준 조인(Standard Join)

BigData 청년인재 프로그램(Java) - 11. 추상 클래스와 인터페이스