Download presentation
Presentation is loading. Please wait.
Published byHandoko Halim Modified 5년 전
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
Similar presentations