a battle with myself

[ANSI SQL] 5. 데이터 가져오기/데이터 정렬(SELECT FROM/ORDER BY) 본문

sql

[ANSI SQL] 5. 데이터 가져오기/데이터 정렬(SELECT FROM/ORDER BY)

열공_중 2016. 8. 10. 09:47

데이터 가져오기 - SELECT ~ FROM

 

예제 table 1

테이블 생성 및 데이터 삽입

 

User_Table

 user_num

 user_id

user_pass

user_mobile

user_gender

1

user1

aaaa

01011112222

male

2

user2

bbbb

01033334444

female

3

user3

cccc

01055556666

male

4

user4

dddd

01077778888

female

5

user5

eeee

01088889999

male

 

기본 SELECT 문(어디서 무엇을)

User_Table에서 user_mobile 에 대한 정보를 가져와 보자

 

SELECT user_mobile FROM User_Table ;

출력    

 

User_Table에서 user_mobile 에 대한 정보를 가져 왔지만 테이블의 다른 순서로 나열되어 출력된걸 알수 있다.

이 것은 당연한 결과로 정렬방식을 명확하게 지정하지 않을 경우 데이터는아무 의미 없는 순서로 나열되어 출력된다.

기본적으로 정렬문이 존재 하지 않으면 데이터는 무작위로 불러오게 된다.

 

-------------------------------------------------------------------------------------------------------------

 

여러 열의 정보를 가져오기

 

User_Table 에서 user_id , user_mobile , user_gender  3가지에 대한 정보를 동시에 가져와 보자.

 

SELECT user_id , user_mobile , user_gender FROM User_Table ;

출력

 

 

필요한 만큼의 열의 정보를 가져오기 위해서는 콤마( , )로 구분 하여 적어 주면 된다. 

 

-------------------------------------------------------------------------------------------------------------

 

모든 열의 정보를 가져오기

User_Table 에서 모든 열에 대한 정보를 동시에 가져와 보자.

 

SELECT ~ FROM 문의 열 지정 부분에 와일드카드( * : asterisk) 을 지정 해주면 모든 열을 의미하게 된다.

 

SELECT * FROM User_Table ;

 

출력

 

----------------------------------------------------------------------------------------------------- 

 

데이터 정렬하기(ORDER BY)

 

기본적으로 SELECT ~ FROM 문을 사용하여 데이터를 가져오면 아무런 순서 없이 출력 되게 된다.

(정렬을 하지않으면 대개 테이블에 있는 순서대로 표시되는 것이 일반적이며 이는애초에 테이블에 추가된 순서에 해당한다. 하지만 데잍가 업데이트 되거나 삭제되면 DBMS 가 저장 공간을 어떻게 활용하는가 하는 방식에 따라 순서가 뒤바뀔 것이다. 즉 최종적인 결과를 우리가 예측하할 수 없으며, 직접적으로 제어할 수도 없다. 관계형 데이터베이스 에서는 직접적인 순서를 지정하지 않는 한 가져온 데이터는 특정한 방식으로 정렬되지 않는다.)

그래서 기본적으로 데이터를 가져올때는 ORDER BY 절을 이용하여 정렬하게 된다.

ORDER BY 절과 하나이상의 열이름을 지정하면 그 열을 기준으로 출력 결과를 정렬할 수 있다.

 

User_Table 에서 user_iduser_gender 열에 대한 정보를 user_gender  열을 기준으로 정렬해서 출력해보자.

 

SELECT user_id , user_gender FROM User_Table ORDER BY user_gender ;

출력

 

 

기본적으로 ORDER BY 절을 사용 하면 알파벳 순으로 정렬된다.

 

----------------------------------------------------------------------------------------------------- 

 

여러 열로 정렬

 

User_Table 에서 user_iduser_gender 열에 대한 정보를 user_gender  열을 기준으로 정렬해서 출력해보자.

 

SELECT user_num , user_id , user_gender FROM User_Table ORDER BY user_gender, user_num ;

 

출력

 

----------------------------------------------------------------------------------------------------- 

 

열 위치로 정렬

 

User_Table 에서 user_iduser_gender 열에 대한 정보를 user_gender  열을 기준으로 정렬해서 출력해보자.

 

SELECT user_num , user_id , user_gender FROM User_Table ORDER BY 3 , 1;

 

출력

 

해당 구문에서 ORDER BY 3,1 ; 절은 SELECT 열이름 FROM 절에서  열이름의 위치 값이다.

해석 하자면 User_Table 에서 user_num , user_id , user_gender 의 정보를 가져오되 user_gender 의 값으로 알파벳 순서로 정렬하고 같은 값이 있다면 user_num 으로 오름차순으로 정렬하여 출력하라.  이다 

분석 하자면 SELECT user_num , user_id , user_gender FROM User_Table ORDER BY user_gender, user_num ; 와 같은 Query 문이 된다.

※ 이 방법을 사용하면 열의 이름을 다시입력해야 하는 수고를 덜 수 있지만 잘못된 열을 입력할 가능성도 그만큼 높아진다는 단점이 있다. 또한 만약 데이터의 순서가 바뀌면 SELECT 문도 수정해야하며, SELECT 문에 없는 열로 데이터를 정렬할 수 없다는 단점도 있다.

 

----------------------------------------------------------------------------------------------------- 

 

정렬 방향지정(ORDER BY DESC, ASC)

기본적으로 정렬 방향을 지정해주지 않으면 ORDER BY 절은 오름차순으로 적용된다

ASCENDING(ASC)         ORDER BY '열이름' ASC      :  오름차순(A~Z)

DESCENDING(DESC)     ORDER BY '열이름' DESC    :  내림차순(Z~A)

 

정렬 비교

SELECT * FROM User_Table ORDER BY user_num ASC;

출력

 

SELECT * FROM User_Table ORDER BY user_num DESC;

출력