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
복사