Presentation is loading. Please wait.

Presentation is loading. Please wait.

12장. SELECT 명령문: ORDER BY절 단일 열 정렬 순서번호로 정렬 오름차순과 내림차순 정렬 하나 이상의 행 정렬

Similar presentations


Presentation on theme: "12장. SELECT 명령문: ORDER BY절 단일 열 정렬 순서번호로 정렬 오름차순과 내림차순 정렬 하나 이상의 행 정렬"— Presentation transcript:

1 12장. SELECT 명령문: ORDER BY절 단일 열 정렬 순서번호로 정렬 오름차순과 내림차순 정렬 하나 이상의 행 정렬
수식과 함수의 정렬 NULL 값의 정렬 쉽게 배우는 MySQL 5.x

2 12.1 단일 열 정렬 -SELECT 명령문이 ORDER BY 절을 사용하지 않는다면 순서는 예측할 수 없다.
[예제12-1] 등록한 학생에 대하여 학번과 등록일자를 출력하라. 이때 정렬순서는 학번으로 한다. mysql> select stu_no, fee_year, fee_term, fee_date     -> from fee     -> where year(fee_date) = 2006     -> order by stu_no; | stu_no   | fee_year | fee_term | fee_date   | | | 2006     |        1 | | | | 2006     |        2 | | | | 2006     |        1 | | | | 2006     |        2 | | 4 rows in set (0.05 sec) “ORDER BY STU_NO” 명령문은 STU_NO 다음에 정렬시키는 순서를 생략 기본 값으로 SQL은 오름차순(Ascending)으로 정렬 쉽게 배우는 MySQL 5.x

3 12.2 순서번호로 정렬 ORDER BY 절에서 순서 번호로 열 명세를 대치할 수 있다.
12.2 순서번호로 정렬 ORDER BY 절에서 순서 번호로 열 명세를 대치할 수 있다. [예제12-1]을 순서번호를 사용하면 명령문은 다음과 같다. mysql> select stu_no, fee_year, fee_term, fee_date      -> from fee      -> where year(fee_date) = 2006      -> order by 1; | stu_no   | fee_year | fee_term | fee_date   | | | 2006     |        1 | | | | 2006     |        2 | | | | 2006     |        1 | | | | 2006     |        2 | | 4 rows in set (0.05 sec) 순서 번호는 SELECT 절에 있는 열 명세의 위치에 따른 순서로서, 이는 수식이 함수, 리터럴, 수치 수식으로 구성되었을 때 순서 번호이다. 쉽게 배우는 MySQL 5.x

4 [예제12-2] 등록한 학생에 대하여 학번과 전체 등록금의 총액을 출력하라. 이때 출력순서는 등록금총액이다.
mysql> select stu_no, sum(fee_total)         mysql> select stu_no, sum(fee_total)     -> from fee                                  -> from fee     -> group by stu_no                           -> group by stu_no     -> order by 2;                               -> order by sum(fee_total); | stu_no   | sum(fee_total) | | |        | | |        | | |        | | |        | | |        | | |        | | |       | | |       | 8 rows in set (0.01 sec) -MySQL에서는 ORDER BY절에 “SUM(FEE_TOTAL)”를 우측과 같이 사용 가능 -SQL제품에 따라 “SUM(FEE_TOTAL)”을 사용할 수 없는 제품이 있다. -통계함수를 사용할 수 없는 경우 순서번호를 좌측과 같이 사용 쉽게 배우는 MySQL 5.x

5 12.3 오름차순과 내림차순 정렬 -열 명세나 순서 번호 다음에 아무 것도 지정하지 않는다면 오름차순으로 정렬
12.3 오름차순과 내림차순 정렬 -열 명세나 순서 번호 다음에 아무 것도 지정하지 않는다면 오름차순으로 정렬 -수치 값에 대한 오름차순 정렬은 작은 값이 먼저 나타나고 큰 값이 나중에 -영수치 값에 대한 오름차순 정렬은 영문자 ASCII코드 값의 크기순서와 동일 [예제12-3]학적테이블의 영문이름의 첫 번째 문자가 ‘J'보다 큰 ASCII코드로 시작하는 학생의 학번과 이름, 영문이름을 출력(영문이름 내림차순으로 정렬)하라 mysql> select stu_no, stu_name, stu_ename     -> from student     -> where substring(stu_ename,1,1) > 'J'     -> order by stu_ename desc; | stu_no   | stu_name | stu_ename        | | | 유하나   | Yoo Ha-Na        | | | 연개소문 | Yean Gae-So-Moon | | | 박정인   | Park Jung-In     | | | 박도준   | Park Do-Jun      | | | 이순신   | Lee Sun-Shin     | | | 이상길   | Lee Sang-Gil     | | | 고혜진   | Ko Hea-Jin       | | | 김영호   | Kim Young-Ho     | | | 김유신   | Kim Yoo-Shin     | | | 김유미   | Kim Yoo-Mi       | | | 김문영   | Kim Moon-Young   | 11 rows in set (0.08 sec) 쉽게 배우는 MySQL 5.x

6 12.4 하나 이상의 행 정렬 ORDER BY 절에 여러 개의 열을 지정할 수 있다.
12.4 하나 이상의 행 정렬 ORDER BY 절에 여러 개의 열을 지정할 수 있다. [예제12-4] 2006년에 등록한 학생에 대하여 학번과 납입한 등록금총액을 출력하라. 이때 출력순서는 학번은 오름차순, 등록금총액은 내림차순이다. mysql> select stu_no, fee_year, fee_term, fee_pay     -> from fee     -> where fee_year = 2006     -> order by stu_no asc, fee_pay desc; | stu_no   | fee_year | fee_term | fee_pay | | | 2006     |        1 |  | | | 2006     |        2 |  | | | 2006     |        1 | | | | 2006     |        2 |  | 4 rows in set (0.00 sec) ORDER BY 절은 출력 순서를 학번은 오름차순으로 정렬하고, 납부 총액은 내림차순으로 정렬한다. 이 때 오름차순을 나타내는 “ASC"는 생략이 가능 쉽게 배우는 MySQL 5.x

7 [예제 12-5] 교과목 테이블에서 생성년도가 2003년~2005년 사이 값으로 과목코드, 과목명, 생성년도를 출력하라
[예제 12-5] 교과목 테이블에서 생성년도가 2003년~2005년 사이 값으로 과목코드, 과목명, 생성년도를 출력하라.(단, 출력순서는 생성년도 내림차순으로 정렬한 뒤 같은 생성년도인 경우는 과목코드순으로 정렬) mysql> select sub_code, sub_name, create_year       -> from subject     -> where create_year between 2003 and 2005     -> order by create_year desc, sub_code; | sub_code | sub_name            | create_year | | 4007     | UML                 | 2005        | | 4012     | 네트워크 프로그래밍 | 2005        | | 4013     | 컴포넌트 프로그래밍 | 2004        | | 4002     | 웹사이트 구축       | 2003        | | 4003     | 소프트웨어공학      | 2003        | | 4009     | 전자상거래 실무     | 2003        | 6 rows in set (0.05 sec) 쉽게 배우는 MySQL 5.x

8 [예제 12-6] 성적 테이블에서 2007년도 1학기 석차순 명부를 학번, 연도, 학기, 평점평균, 총점을 출력하라
[예제 12-6] 성적 테이블에서 2007년도 1학기 석차순 명부를 학번, 연도, 학기, 평점평균, 총점을 출력하라.(단, 출력순서는 평점평균 내림차순, 총점 내림차순, 동점인 경우에는 학번순서로 정렬한다) mysql> select stu_no, sco_year, sco_term, exam_avg, exam_total     -> from score     -> where sco_year = '2007' and sco_term = 1     -> order by exam_avg desc, exam_total desc, stu_no; | stu_no   | sco_year | sco_term | exam_avg | exam_total | | | 2007     |        1 |      4.4 |        577 | | | 2007     |        1 |      4.4 |        575 | | | 2007     |        1 |      4.2 |        572 | 3 rows in set (0.00 sec) 위의 예제에서는 학생과 학생의 평점평균이 4.4로 동일하기 때문에 백분율 총점이 높은 번이 먼저 출력되고 이 출력되고 다음으로 번이 출력되었다. 쉽게 배우는 MySQL 5.x

9 12.5 수식과 함수의 정렬 [예제 12-7] 교수 테이블에서 임용일자가 1997년 이전인 교수코드와, 교수이름, 임용일자를 교수임용일자 순으로 정렬하라.(DATE_FORMAT( ) 함수를 이용하라) mysql> select prof_code, prof_name, create_date "임용일자"     -> from professor     -> where date_format(create_date, '%Y') < 1997     -> order by date_format(create_date, '%Y'); | prof_code | prof_name | 임용일자   | | 4007      | 김영식    | | | 4006      | 고진광    | | | 5011      | 최종주    | | | 4001      | 정진용    | | | 4009      | 문창수    | | 5 rows in set (0.02 sec) DATE_FORMAT 함수에서 임용일자 중 년도만을 오름차순 정렬하였기 때문에 정진용 교수와 문창수 교수의 임용일자와 상관없이 같은 년도이기 때문에 바뀌어 출력되었다. 쉽게 배우는 MySQL 5.x

10 [예제12-7]을 임용일자 순으로 출력하기를 원한다면 ORDER BY 절을 “order by create_date”로 변경해 주면 된다.
mysql> select prof_code, prof_name, create_date "임용일자"     -> from professor     -> where date_format(create_date, '%Y') < 1997     -> order by create_date; | prof_code | prof_name | 임용일자   | | 4007      | 김영식    | | | 4006      | 고진광    | | | 5011      | 최종주    | | | 4009      | 문창수    | | | 4001      | 정진용    | | 5 rows in set (0.02 sec) 쉽게 배우는 MySQL 5.x

11 12.6 NULL 값의 정렬 다양한 SQL 제품에서 NULL 값의 순서화는 그 방법에 있어서 차이가 있다.
MySQL에서는 NULL 값을 열에서 가장 작은 값으로 취급한다. -오름차순으로 정렬한다면 결과에서 가장 먼저 출력 -내림차순으로 정렬한다면 결과에서 가장 나중에 출력 쉽게 배우는 MySQL 5.x

12 Mysql에서 오름차순은 NULL값을 가장 작은 값으로 취급하여 가장 먼저 출력
[예제 12-8] 등록테이블에서 2007년에 등록한 학생의 학번과 장학금 총액을 출력하라. 단, 순서는 장학금 총액 오름차순이다. mysql> select stu_no, jang_total         -> from fee     -> where year(fee_date) = 2007     -> order by jang_total; | stu_no   | jang_total | | |       NULL | | |       NULL | | |       NULL | | |       NULL | | |     | | |     | | |     | | |     | | |     | | |     | | |     | | |    | | |    | | |    | | |    | | |    | 16 rows in set (0.00 sec) Mysql에서 오름차순은 NULL값을 가장 작은 값으로 취급하여 가장 먼저 출력 쉽게 배우는 MySQL 5.x

13 내림차순에서는 NULL값이 가장 작은 값이므로 가장 나중에 출력
[예제 12-8]예제를 내림차순으로 정렬하여라. mysql> select stu_no, jang_total         -> from fee     -> where year(fee_date) = 2007     -> order by jang_total desc; | stu_no   | jang_total | | |    | | |    | | |    | | |    | | |    | | |     | | |     | | |     | | |     | | |     | | |     | | |     | | |       NULL | | |       NULL | | |       NULL | | |       NULL | 16 rows in set (0.00 sec) 내림차순에서는 NULL값이 가장 작은 값이므로 가장 나중에 출력 쉽게 배우는 MySQL 5.x


Download ppt "12장. SELECT 명령문: ORDER BY절 단일 열 정렬 순서번호로 정렬 오름차순과 내림차순 정렬 하나 이상의 행 정렬"

Similar presentations


Ads by Google