Do It SQL입문 03-3 ORDER BY문으로 데이터 정렬하기

stan·2023년 6월 20일
0

T - SQL (SQL Server)

목록 보기
7/12

데이터를 정렬 하려면 ORDER BY 문을 SELECT문의 가장 마지막에 추가해 사용한다

ORDER BY 문의 기본 형식

SELECT [열] FROM [테이블] WHERE [열] = [조건값] ORDER BY [열][ASC, DESC]

1) [열]: 정렬할 열 이름을 입력한다.
2) [ASC,DESC]: 정렬 기준에 따라 오름차순, 내림차순을 정의한다


symbol열 기준으로 정렬

SELECT * FROM nasdaq_company ORDER BY symbol

company_name 열 기준으로 정렬

SELECT * FROM nasdaq_company ORDER BY company_name

===================================================================

열을 2개 이상 기준으로 정렬할 때는 정렬 순서에 따라 쉼표를 사용해 열 이름을 나열한다.
이때 열 입력 순서에 따라 정렬 우선순위가 정해지므로 열 입력 순서에 주의하자.

다음은 정렬 순서를 sector와 industry 순서로 작성한 쿼리이다.

SELECT * FROM nasdaq_company
WHERE sector IS NOT NULL AND sector <> ''
ORDER BY sector, industry

이렇게 하면 sector 열에 같은 값이 있는 경우 industry 열의 값으로 정렬한다


정렬 순서가 다르면 결과도 다르게 표시 됨 :

SELECT * FROM nasdaq_company
WHERE sector IS NOT NULL AND sector <> ''
ORDER BY industry, sector

*<> : not equal to

For example, in the condition sector <> '', it checks if the value of the sector column is not an empty string. If the sector column is not empty, the condition evaluates to true.

Similarly, in the condition sector IS NOT NULL, it checks if the value of the sector column is not null. If the sector column has a non-null value, the condition evaluates to true.

In the given SQL query, the <> operator is used in the WHERE clause to filter rows from the nasdaq_company table. It ensures that only rows with a non-null and non-empty sector value are included in the result set.

==============================

ASC으로 오름차순 정렬하기

  • 오름차순 정렬은 ASC을 정렬하려는 열 이름 뒤에 붙이면 된다.
    • 이때 정렬 기본값은 오름차순이므로 ASC은 생략할 수 있다.

SYMBOL 열을 오름차순으로 정렬

SELECT * FROM nasdaq_company
ORDER BY symbol ASC

symbol열을 내림차순으로 정렬

SELECT * FROM nasdaq_company
ORDER BY symbol DESC

====================================================================

오름차순과 내림차순을 조합해 정렬하기

  • 각 열 이름 뒤에 ASC, DESC을 붙인 뒤 쉼표로 연결

sector열에서는 오름차순으로 정렬하고 symbol열에서는 내림차순으로 정렬

SELECT * FROM nasdaq_company
WHERE sector IS NOT NULL AND sector <> ''
ORDER BY sector ASC, symbol DESC

==================================================================

TOP으로 상위 N개 데이터 검색하기

  • TOP의 경우 상위 N개의 데이터를 반환하므로 정렬 우선순위가 중요하다

ipo_year에서는 내림차순으로 symbol에서는 오름차순으로 정렬

SELECT TOP 10 * FROM nasdaq_company
ORDER BY ipo_year DESC, symbol ASC

※상위 N개의 데이터를 검색할 때는 반드시 ORDER BY 문을 사용하는 것이 좋다. 정렬하지 않으면 어떤 값을 기준으로 정렬한 상위 N개의 데이터가 출력되었는지 알 수 없기 때문이다.

  • TOP은 주로 테이블에 어떤 데이터가 어떻게 저장되어 있는지 확인할때 자주 사용
  • 데이터를 가볍게 보는 용도로 적합

====================================================================

OFFSET ... FETCH NEXT로 지정한 개수만큼 행 건너뛰고 검색하기

ORDER BY로 데이터를 정렬한 다음, 상위나 하위가 아닌 특정 구간의 데이터를 검색해야 하는 경우

예) 2페이지나 3페이지에 있는 데이터를 보고 싶은 경우

OFFSET은 검색결과에서 지정한 행 개수만큼 건너뛰고 출력

symbol을 기준으로 정렬한 다음 1,000개의 데이터를 건너뛰고 1,001번째 데이터부터 출력하는 쿼리

그냥 출력

!1000개의 데이터를 건너뛰고 출력

SELECT * FROM nasdaq_company
ORDER BY symbol
OFFSET 1000 ROWS

조건 없이 출력한 결과의 1,001번째 데이터가 OFFSET조건을 넣어 출력한 결과의 1번째 데이터

※※※ 반드시 ORDER BY문을 함께 사용 ※※※

FETCH NEXT는 반드시 OFFSET과 함께 사용

  • 출력할 행의 개수를 지정 할 수 있음

    예) 한 페이지에 10개만 보여주는 기능과 같음

    1001번째 데이터부터 10개의 데이터를 출력 하는 쿼리

    SELECT * FROM nasdaq_company
    ORDER BY symbol
    OFFSET 1000 rows
    FETCH NEXT 10 ROWS ONLY

====================================================================

퀴즈 4.

nasdaq_company 테이블에서 ipo_year 열이 2021년인 데이터 중에 sector 열이 Finance인 데이터를 검색해서 industry 오름차순으로 정렬하고, 같은 industry일 경우 close_price가 높은 순으로 출력

SELECT * FROM nasdaq_company
WHERE ipo_year = 2021
AND sector = 'Finance'
ORDER BY industry ASC, close_price DESC

profile
이진 입니다

0개의 댓글