Search

3-7. ORDER BY

ORDER BY 기본 사용법

ORDER BY 절을 사용해 출력되는 결과의 정렬 순서를 정할 수 있다.
아래와 같이 SQL을 실행해보면 상품명(ItemNm)의 순서로 데이터가 정렬되어 출력된다. 이때, ORDER BY 컬럼명 뒤에 특정한 기준을 정의하지 않으면 작은 값이 먼저 나오고 큰 값이 나중에 나오는 오름차순으로 정렬이 된다. 결과를 확인해보면 ItemNm 값이 가장 작은 'Americano(B)'가 가장 먼저 나오고, 그 다음에는 그 다음으로 큰 값인 'Americano(R)', ‘Bagel(R)’과 같은 순서로 데이터가 출력되고 있다.
-- [SQL-3-7-1] ItemNm으로 정렬 SELECT ItemId ,ItemNm ,ItemCat FROM startdb.Item ORDER BY ItemNm; ItemId ItemNm ItemCat ------ ------------------- ------- AMB Americano(B) COF AMR Americano(R) COF BGLR Bagel(R) BKR BMFR Blueberry Muffin(R) BKR CLB Cafe Latte(B) COF ... 생략 ...
SQL
복사

오름차순과 내림차순

데이터를 정렬하는 방법(기준)은 두 가지가 있다. 하나는 작은 값이 먼저 나오고 큰 값이 나중에 나오는 오름차순이고 다른 하나는 정반대로 처리되는 내림차순이다. 내림차순은 큰 값이 먼저 나오고 작은 값이 나중에 나온다. 출력되는 데이터를 오름차순하고 싶다면 ORDER BY의 컬럼명 뒤에 ASC 키워드를 사용하고 내림차순으로 정렬하고 싶다면 DESC 키워드를 사용하면 된다. 방금 살펴본 위의 SQL과 같이 ASC나 DESC를 명시하지 않으면 기본적으로 오름차순으로 처리가 된다.
아래는 상품 세 개를 ItemCat로 내림차순 정렬해 데이터를 출력하는 SQL이다.
-- [SQL-3-7-2] SELECT ItemId ,ItemNm ,ItemCat FROM startdb.Item WHERE ItemId IN ('AMB','BGLR','CITR') ORDER BY ItemCat DESC; ItemId ItemNm ItemCat ------ ------------ ------- AMB Americano(B) COF BGLR Bagel(R) BKR CITR Yuzu Ade(R) BEV
SQL
복사

여러 컬럼의 ORDER BY

ORDER BY 절에는 콤마를 사용해 여러 컬럼을 지정할 수 있다. ORDER BY에 여러 컬럼을 지정하면 가장 왼쪽 컬럼부터 차례대로 정렬이 처리된다. 아래는 상품종류(ItemCat)가 BEV(음료), BKR(베이커리)인 데이터를 HotColdCd 컬럼으로 정렬하는 SQL이다. (아직은 하나의 컬럼만 사용해 정렬 중이다.) ORDER BY HotColdCd에 정렬 방향을 지정하지 않았기 때문에 작은 값이 먼저 나오는 오름차순으로 결과가 출력된다.
-- [SQL-3-7-3] SELECT HotColdCd ,ItemId ,ItemNm ,ItemCat FROM startdb.Item WHERE ItemCat IN ('BEV','BKR') ORDER BY HotColdCd; HotColdCd ItemId ItemNm ItemCat --------- ------ ------------------- ------- COLD CITR Yuzu Ade(R) BEV COLD LEMR Lemonade(R) BEV COLD ZAMB Grapefruit Ade(R) BEV COLD BMFR Blueberry Muffin(R) BKR COLD CMFR Chocolate Muffin(R) BKR HOT HCHB Hot Chocolate(B) BEV HOT HCHR Hot Chocolate(R) BEV HOT BGLR Bagel(R) BKR HOT MACA Macaron(R) BKR
SQL
복사
결과를 보면, COLD인 상품이 먼저 출력되고 HOT인 상품이 나중에 출력되고 있다. 이번에는 위 SQL의 ORDER BY 절에 ItemId도 추가해보자.
-- [SQL-3-7-4] SELECT HotColdCd ,ItemId ,ItemNm ,ItemCat FROM startdb.Item WHERE ItemCat IN ('BEV','BKR') ORDER BY HotColdCd, ItemId; -- > ORDER BY에 ItemId 추가 HotColdCd ItemId ItemNm ItemCat --------- ------ ------------------- ------- COLD BMFR Blueberry Muffin(R) BKR COLD CITR Yuzu Ade(R) BEV COLD CMFR Chocolate Muffin(R) BKR COLD LEMR Lemonade(R) BEV COLD ZAMB Grapefruit Ade(R) BEV HOT BGLR Bagel(R) BKR HOT HCHB Hot Chocolate(B) BEV HOT HCHR Hot Chocolate(R) BEV HOT MACA Macaron(R) BKR
SQL
복사
SQL 결과를 확인해보면, HotColdCd로 데이터가 먼저 정렬 되어 있고, 같은 HotColdCd를 가진 데이터 간에는 ItemId로 정렬이 처리된 것을 알 수 있다. COLD인 상품들을 살펴보면, ItemId가 가장 작은 BMFR이 가장 먼저 나오고 그 다음에 CITR, CMFR, LEMR, ZAMB 순으로 정렬된 것을 알 수 있다.
ORDER BY HotColdCd와 ORDER BY HotColdCd, ItemId 에 따른 결과를 하나의 그림에 담아서 살펴보면 다음과 같다. ORDER BY에 여러 컬럼을 사용하면 가장 왼쪽의 컬럼 기준으로 먼저 정렬 된 후에, 가장 왼쪽의 컬럼 값이 같은 데이터는 다시 두 번째 컬럼 기준으로 정렬이 된다.
Tip. 한 건의 레코드는 공동운명체
당연한 이야기이지만 누군가는 궁금해할지 모를 내용을 하나 말하자면, 한 건의 레코드(로우)를 구성하는 컬럼의 값들이 ORDER BY로 인해 각각 다른 레코드로 분리되는 경우는 없다.
한 건의 레코드를 구성하는 값들은 공동운명체로서 언제나 같이 이동한다. 물론 나중에 분석함수 등을 사용하면, 다른 레코드의 값을 현재의 레코드로 가져올 수는 있지만 기본적으로 한 건의 레코드는 공동운명체다.
이번에는 세 개 컬럼을 ORDER BY에 사용한 SQL이다.
-- [SQL-3-7-5] SELECT ItemNm ,ItemCat ,HotColdCd ,ItemId FROM startdb.Item WHERE ItemCat IN ('BEV','BKR') ORDER BY ItemCat ASC ,HotColdCd DESC ,ItemId ASC; ItemNm ItemCat HotColdCd ItemId ------------------- ------- --------- ------ Hot Chocolate(B) BEV HOT HCHB Hot Chocolate(R) BEV HOT HCHR Yuzu Ade(R) BEV COLD CITR Lemonade(R) BEV COLD LEMR Grapefruit Ade(R) BEV COLD ZAMB Bagel(R) BKR HOT BGLR Macaron(R) BKR HOT MACA Blueberry Muffin(R) BKR COLD BMFR Chocolate Muffin(R) BKR COLD CMFR
SQL
복사

BOOSTER QUIZ

BOOSTER QUIZ ERD

BOOSTER QUIZ 3-7-1

상품종류가 커피이면서 뜨거운 상품 목록을 보여주세요. 상품명으로 내림차순 정렬해주세요.
대상 테이블: 상품(Item)
조회 조건: ItemCat가 COF(커피)이면서, HotColdCd가 HOT인 데이터
조회 컬럼: ItemId, ItemNm, ItemCat ,HotColdCd
정렬 기준: ItemNm 으로 내림차순 정렬하시오.
ItemId ItemNm ItemCat HotColdCd ------ ------------- ------- --------- FLTR Flat White(R) COF HOT EINR Einspanner(R) COF HOT CLR Cafe Latte(R) COF HOT CLB Cafe Latte(B) COF HOT AMR Americano(R) COF HOT AMB Americano(B) COF HOT
SQL
복사

BOOSTER QUIZ 3-7-2

상품ID가 A 이상이면서 C이하인 상품을 보여주세요. HOT/COLD구분으로 먼저 오름차순한 다음에, ItemCat로 오름차순해서 보여주세요.
대상 테이블: 상품(Item)
조회 조건: ItemId가 A 이상(>=), C 이하(<=)인 데이터
조회 컬럼: ItemId, ItemNm, ItemCat ,HotColdCd
정렬 기준: HotColdCd로 오름차순 한 후에, ItemCat로 오름차순 정렬하시오.
ItemId ItemNm ItemCat HotColdCd ------ ------------------- ------- --------- BMFR Blueberry Muffin(R) BKR COLD BGLR Bagel(R) BKR HOT AMB Americano(B) COF HOT AMR Americano(R) COF HOT
SQL
복사
Next: 3-8. TOP-N