ORDER BY
- ORDER BY height : height(컬럼)를 기준으로 정렬
- 오름차순 : ASC // 기본값
- 내림차순 : DESC
- SQL 문법상 WHERE는 ORDER BY 앞에 나와야 함
예제 1. member 테이블에서 gender가 'm'이고, weight가 70 이상인 회원들을 height를 기준으로 오름차순 정렬
예제 2. 전체 회원들에 대해서 가입한 연도를 기준으로 가장 최근에 가입한 사람부터 내림차순으로 정렬하고,
같은 연도에 가입한 사람들은 다시 이메일 주소를 기준으로 오름차순으로 정렬
- YEAR()는 연도만 추출해주는 것
- 우선순위로 따지면 가입한 날짜(sign_up_day)를 내림차순으로 정렬, 그 안에서 같다면 email을 오름차순으로 정렬
- 이름을 먼저 쓴 컬럼을 우선으로 해서 정렬이 차례대로 수행
정렬할 때 주의할 점
- INT 타입 : 숫자의 크고 작음을 기준으로 정렬 수행
- TEXT 타입 : 숫자의 대소가 아니라 한 문자, 한 문자씩 그 문자 순서를 비교해서 정렬이 수행
- 만약 TEXT 타입의 120과 19를 오름차순으로 정렬하면, 120-19 이 순서대로 나오게 됨 // 맨 앞의 1을 비교했더니 같았지만 그 바로 뒷자리는 문자 2가 문자 9보다 문자 순서상 더 앞에 있는 것이라 120이 먼저 나오게 됨
- 이렇게 TEXT 타입인 컬럼에 있는 숫자값들을 그냥 INT 등의 숫자형 타입으로 보고 정렬하기 위해서는 CAST라는 함수를 사용해야 함
- SELECT * FROM FOR_TEST.ordering_test ORDER BY CAST(data AS signed) ASC; 이렇게
- ㄴ signed는 양수와 음수를 포함한 모든 정수를 나타낼 수 있는 데이터 타입
- 만약 문자열 타입으로 저장된 숫자값에 소수점이 포함되어 있다면 signed 대신 decimal(소수점이 있는 수를 나타내는 타입)을 적어주어 사용
LIMIT
- LIMIT n
- 데이터 일부만 추리는 것
- ORDER BY - LIMIT 순서로 작성
LIMIT 10; -> 데이터 10개까지만 조회
LIMIT의 또 다른 사용법
LIMIT m, n
EX) 9번째, 10번째로 가입한 사람
- 8은 8번째 로우부터 시작해서, 총 2개의 로우만 조회
- 로우는 0번째부터 시작함, 즉 8은 사실 9번째 로우를 뜻함
LIMIT과 Pagenation
- 새로운 페이지를 누르면 그때마다 새로운 내용을 로드하는 페이지네이션
- 만약 페이지를 순서대로 누를 때마다 서버에서 SQL문이 실행된다면?
- 아래와 같이 실행될 것임
- 1페이지 : SELECT * FROM db.search_result ~ ORDER BY registration_date DESC LIMIT 0, 10
- 2페이지 : SELECT * FROM db.search_result ~ ORDER BY registration_date DESC LIMIT 10, 10
- 3페이지 : SELECT * FROM db.search_result ~ ORDER BY registration_date DESC LIMIT 20, 10
- 4페이지 : SELECT * FROM db.search_result ~ ORDER BY registration_date DESC LIMIT 30, 10
- 원리를 기억해놓기