[SQL] 3장. 가져온 데이터 정렬하기

김상현·2022년 9월 19일
0

SQL

목록 보기
3/22
post-thumbnail

[손에 잡히는 10분 SQL - 벤 포터 지음, 박남혜 옮김] 책의 학습 후 정리자료입니다.


📌 데이터 정렬하기

  • SQL 문을 통해 데이터베이스의 테이블에서 가져온 데이터는 정렬하지 않는 이상 테이블에 있는 순서대로 출력하는데 이 순서는 데이터가 테이블에 삽입되는 순서이다.
  • 즉, 정렬을 명시하지 않으면, 검색된 데이터의 순서를 가정해서는 안된다.
  • SELECT 문으로 가져온 데이터를 정렬하려면 ,ORDER BY 절을 사용한다.
  • ORDER BY 절 뒤에는 하나 이상의 열 이름을 적는데, 이를 기준으로 결과를 정렬한다.
SELECT prod_name
FROM Products
ORDER BY prod_name;

❗️ ORDER BY 절의 위치

  • ORDER BY 절은 SELECT 문의 가장 마지막에 와야 한다.

📌 여러 개의 열로 정렬하기

  • 두 개 이상의 열로 데이터를 정렬해야 하는 일도 종종 발생한다.
  • 여러 열을 검색할 때와 마찬가지로, 간단하게 열을 콤마로 구분해 사용하면 여러 열로 정렬할 수 있다.
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;

  • 여러 열로 정렬할 때의 정렬 순서는 ORDER BY 옆에 열을 적은 순서 그대로이다.
  • 위 결과처럼 prod_price 가 같을 때만 prod_name 으로 정렬된다.
  • 만약 prod_price 의 값이 다 다르다면 prod_name 으로 정렬되는 일은 발생하지 않는다.

📌 열의 위치로 정렬하기

  • ORDER BY는 열 이름을 사용하여 정렬할 수 있고, 열 위치로도 정렬할 수 있다.
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY 2,3;

  • ORDER BY 2,3 의 결과는 ORDER BY prod_price, prod_name 의 결과와 완전히 똑같다.
  • 차이는 ORDER BY 절에 열 이름을 적는 대신, SELECT 절에 나열된 열의 상대적인 위치를 적었다는 것뿐이다.
  • 이 기법의 가장 큰 장점은 열 이름을 다시 적을 필요가 없다는 것이지만 단점도 존재한다.
    • 열 이름을 작성하지 않기 때문에 사용자가 잘못된 열을 지정할 가능성이 있다.
    • SELECT 절에서 가져오는 열이 변경될 때 ORDERY BY 절을 수정하지 않아 정렬의 방식이 잘못될 가능성이 있다.
    • 이 기법은 SELECT 절에는 없는 열로 정렬하는 것이 불가능하다.

✏️ 개인적인 생각

  • 열의 위치를 이용한 정렬하기는 수정이 발생하지 않는 SQL 문을 제외하고는 최대한 사용을 지양해야겠다.
  • 열의 위치를 이용한 정렬하기 방식을 사용했을 때 프로그램 실행도중 발생할 수 있는 논리적 오류의 문제를 찾기 어려울 수 있다.

📌 정렬 순서 지정하기

  • 오름차순이 정렬의 기본 값이긴 하지만, ORDER BY 절에서 DESC 키워드를 추가함으로써 내림차순 정렬을 수행할 수 있다.
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC

  • 여러 개의 열로 정렬 하는 방법은 ORDER BY 절 옆에 여러 개의 열을 콤마로 나누어 작성하는 것이다.
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC, prod_name;

  • prod_price 를 기준으로 내림차순으로 정렬되었다.
  • prod_price 의 값이 같은 경우는 prod_name 을 기준으로 오름차순으로 정렬되었다.
  • DESC 키워드는 명시된 열에만 적용된다.
  • 따라서 여러 열을 내림차순으로 정렬하려면, 각각의 열에 DESC 키워드를 모두 적어야 한다.

📌 도전 과제

  1. Customers 테이블에서 모든 고객의 이름(cust_name)을 가져오고, 그 결과를 내림차순(Z→A)으로 정렬하여 표시하는 SQL 문을 작성하라.
SELECT cust_name
FROM Customers
ORDER BY cust_name DESC;

  1. Orders 테이블에서 고객 ID(cust_id)와 주문 번호(order_num)를 검색해, 결과를 고객 ID로 먼저 정렬하고 나서 최근에 주문한 순서대로 정렬하는 SQL 문을 작성하라.
SELECT cust_id, order_num
FROM Orders
ORDER BY cust_id, order_num;

  1. 우리가 운영하는 가상 상점은 비싼 품목을 많이 팔고 싶어 한다. OrderItems 테이블에서 수량 및 가격(item_price)을 검색해 가장 수량이 많고 높은 가격순으로 정렬하는 SQL 문을 작성하라.
SELECT quantity, item_price
FROM OrderItems
ORDER BY quantity DESC, item_price DESC

  1. 다음 SQL 문은 무엇이 잘못되었는가?
SELECT vend_name
FROM Vendors
ORDER vend_name DESC;
  • ORDER BY 절에 BY 가 누락되었다.
  • ORDER 키워드 뒤에 BY 를 추가한 결과는 아래와 같다.
SELECT vend_name
FROM Vendors
ORDER BY vend_name DESC;

profile
목적 있는 글쓰기

0개의 댓글