study/sql

정렬과 연산 - ORDER BY, LIMIT

올스왑 2021. 5. 16. 01:54

SQL 첫걸음이란 책을 읽으면서 정리중.

 

ORDER BY 구를 사용하면 검색 결과의 행의 순서를 바꿀 수 있다.

 

SELECT * FROM sample ORDER BY age; : sample의 모든 컬럼을 나이 순서(오름차순)대로 가져와라.(보통 기본값은 오름차순) -> 기본값은 제품마다 다르기 때문에 명시하는 것이 좋다.

내림차순으로 바꾸려면 ORDER BY age DESC로 하면 된다.

오름차순은 기본값이지만 명시한다면 ORDER BY age ASC.

 

WHERE 구와 같이 사용하려면 WHERE 구 뒤에 지정하면 된다. -> SELECT * FROM sample WHERE age=10 ORDER BY name

 

오름차순, 내림차순을 날짜에서 헷갈릴 수 있다. 최근 날짜일수록 큰 것이다.문자열 데이터는 사전식 순서이다.

 

ORDER BY는 검색 결과의 행 순서를 바꿀 순 있지만, 실제 테이블에 영향을 주지는 않는다.


복수의 열을 지정해서 정렬할 수도 있다.

같은 값을 가진 데이터에 대해 ORDER BY로 정렬하는 경우, 순서는 일정하지 않다. 따라서 일정한 결과를 얻기 위해서 복수로 ORDER BY 구를 지정해야 한다.

 

SELECT * FROM sample ORDER BY a, b; : a 열로 먼저 정렬한다. 그리고 같은 값이 있다면 b 열로 정렬한다.

SELECT * FROM sample ORDER BY b, a; : b 열로 먼저 정렬한다. 그리고 같은 값이 있다면 a 열로 정렬한다.

 

정렬 방법을 지정하면서 복수로 정렬시킬 수 있다.

SELECT * FROM sample ORDER BY a ASC, b DESC; : a 열로 먼저 오름차순으로 정렬한다. 그리고 같은 값이 있다면 b 열로 내림차순으로 정렬한다.

SELECT * FROM sample ORDER BY a ASC, b; : a 열로 먼저 오름차순으로 정렬한다. 그리고 같은 값이 있다면 b 열로 정렬한다. 그러나 기준은 제품마다 다르기 때문에 명시하는 것이 좋다.

 

만약 NULL값이 저장된 열이 있다면 어떻게 정렬할까? 대소비교가 어렵다. 따라서 데이터베이스마다 다르다. '특정 값보다 큰 값 또는 작은 값'으로 할 수도 있고, '가장 작은 값'으로도 취급할 수 있다.


LIMIT 구를 통해 SELECT의 결과값으로 반환되는 행을 제한할 수 있다.

 

LIMIT 구는 표준 SQL은 아니다. 하지만 MySQL에서 사용 가능하다. 데이터베이스 제품마다 비슷한 기능을 하는 구가 있다.

LIMIT 구는 맨 마지막에 지정한다. WHERE나 ORDER BY 뒤에 지정한다. 

 

SELECT * FROM sample LIMIT 3; : sample 테이블에서 모든열의 값을 가져오는데, 최대 3개만 가져온다.

 

여기서 ORDER BY 구문과 같이 사용하면 '데이터 중 가장 큰 것 N개'와 같은 데이터들도 가져올 수 있다.

SELECT * FROM sample ORDER BY age ASC LIMIT 10; : sample 테이블에서 모든열의 값을 가져오는데, 나이가 어린 사람부터 최대 10개만 가져온다.

 

웹 사이트를 보면 모든 데이터를 한 페이지에 보여주는 것이 아니라 몇개씩 페이지를 나눠 보여준다.(pagination)

이 페이지 나누기 기능을 LIMIT를 사용해 간단히 구현할 수 있다.

 

만약 한 페이지당 10개의 데이터를 보여준다면 첫 페이지에선 LIMIT 10의 결과를 보여줄 것이다. 그 다음 페이지에선 11번째 데이터부터 10개의 데이터를 보여줄 것이다. 이 때 '11번째 데이터(행)부터' 라는 표현을 하는, 데이터를 취득할 위치를 가리키는 것으로 LIMIT 구에 OFFSET 으로 지정할 수 있다.

 

SELECT * FROM sample LIMIT 10 OFFSET 0; ㅁ: 0번째 데이터부터 10개를 가져온다.

SELECT * FROM sample LIMIT 10 OFFSET 10; : 10번째 데이터부터 10개를 가져온다. -> 2페이지를 보여주는 경우.

 

실실습습