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
댓글
댓글 쓰기