SQL 첫걸음: 3장-1

나르·2021년 1월 21일
0

RDBMS

목록 보기
4/15
post-thumbnail

🐬 9장 정렬 - ORDER BY


9-1 ORDER BY로 검색결과 정렬

SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명
ORDER BY 명령을 사용하면 지정한 열의 값에 따라 행의 순서가 변경된다.
검색조건이 필요없는 경우에는 SELECT 열명 FROM 테이블명 ORDER BY 열명 처럼 WHERE 구를 생략할 수 있다

SELECT * FROM sample31 ORDER BY age
↑테이블을 나이 순으로 정렬한 결과


SELECT * FROM sample31 ORDER BY address
↑테이블을 주소지 순으로 정렬한 결과

9-2 ORDER BY DESC로 내림차순 정렬

SELECT 열명 FROM 테이블명 ORDER BY 열명 DESC
ORDER BY DESC 를 사용하면 데이터가 내림차순으로 정렬된다
ASC 는 오름차순 정렬로 생략 가능하다


SELECT * FROM sample31 ORDER BY age
↑테이블을 나이 내림차순으로 정렬한 결과

SELECT * FROM sample31 ORDER BY address DESC
↑테이블을 주소지 내림차순으로 정렬한 결과

9-3 대소관계
ORDER BY 에서는 값의 대소관계가 중요하다

  • 수치형 : 숫자의 크기로 판별
  • 날짜시간형 : 숫자의 크기로 판별
  • 문자열형 : 알파벳 > 한글자음 > 한글모음 (사전식 순서)
    e.g. 나비, 가방, 가족 => 가방, 가족, 나비

주의점

sample311은 a열이 문자열형(VARCHAR), b열이 수치형(INTEGER) 으로 구성돼있다.
이 테이블을 a열 오름차순으로 정렬하면 아래와 같은 결과가 나온다.

SELECT * FROM sample311 ORDER BY a;

a열은 문자열형이기 때문에 ODRER BY로 정렬하면 사전식 순서에 따라 위와 같은 값이 출력되는 것이다. 때문에 정렬이나 비교연산을 할 때는 데이터형을 잘 확인해야한다!

9-4 ORDER BY 는 테이블에 영향을 주지 않는다
ORDER BY는 행 순서를 바꾸어 출력하는 것 뿐, 실제 데이터의 행 순서를 변경하는 것이 아니다. 또한 SELECT 명령은 검색 명령으로 데이터를 참조할 뿐 변경하지 않는다.

🐬 10강 복수의 열을 지정해 정렬하기


10-1 복수의 열로 정렬 지정

SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열1, 열2...;

데이터양이 많을 경우 하나의 열만으로는 행을 특정짓기 어려울 때가 많다. e.g. 상품코드와 해당 상품의 하위번호

위와 같은 경우 a를 오름차순으로 정렬한다면 b는 어떤 기준으로 정렬될까?
정답은 알 수 없다 이다. ORDER BY 구로 순서를 지정하지 않는 한 DB의 서버 상황에 따라 다른 순서로 정렬이 되기 때문이다.

SELECT * FROM SAMPLE32 ORDER BY a;
a를 기준으로 정렬했을 때 b는 정렬되지 않는다

이것을 ORDER BY로 복수의 열을 지정해준다면

SELECT * FROM SAMPLE32 ORDER BY a,b;
위와 같이 a값으로 우선정렬하고 b값으로 다시 정렬된 결과가 반환된다.

10-2 정렬방법 지정하기

SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열1 [ASC/DESC], 열2[ASC/DESC] ...;

복수 열을 지정한 경우에도 ASC/DESC 등 각 열에 대해 개별적으로 정렬방법 지정이 가능하다.

SELECT * FROM SAMPLE32 ORDER BY a ASC, b DESC;
↑ a열은 오름차순, b열은 내림차순으로 정렬된 것을 볼 수 있다. (ASC는 생략가능)

10-3 NULL 값의 정렬순서

NULL 값은 특성상 대소비교를 할 수 없어 '가장 먼저''가장 나중에' 표시된다. 그 기준은 표준 SQL에도 규정되어 있지 않아 데이터베이스 제품에 따라 기준이 다르다. (MySQL의 경우는 가장 작은 값으로 취급한다)

🐬 11강 결과 행 제한하기 - LIMIT


여러 사이트를 보다보면 한 페이지에 몇 건씩 게시물이 나누어 표시되는 것처럼, LIMIT를 사용해 표시할 행의 수를 제한할 수 있다.

LIMIT는 표준 SQL이 아니라 특정 DB에서만 사용할 수 있는 문법이다.(MySQL과 PostgreSQL)
SQL server에서는 TOP, Oracle에서는 ROWNUM 이라는 명령을 사용한다.

11-1 행수 제한
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 LIMIT 행
LIMIT 구는 SELECT 명령의 마지막에 지정한다.
LIMIT 구는 정렬 후 제한도 가능하다.

SELECT * FROM sample33 LIMIT 3;
상위 3건만 취득
SELECT * FROM sample33 ORDER BY no DESC LIMIT 3;
내림차순 정렬 후 상위 3건만 취득

11-2 오프셋 지정

웹에서 대량의 데이터를 한 페이지에 표시하는 것은 효율적이지 못하므로 일반적으로 pagination을 사용한다. 게시판 하단 부분에 '1 2 3 4 5 다음' 등이 그 예이다.
이 페이지 나누기는 LIMIT를 통해 간단히 구현할 수 있다. 첫 페이지를 LIMIT 5로 정하고, 6번 째 행부터는 결과값으로부터 데이터를 취득할 위치를 지정하는 OFFSET으로 출력할 수 있다.
OFFSET은 생략 가능하며 기본값은 0이다.

SELECT * FROM sample33 LIMIT 3 OFFSET 3;

profile
💻 + ☕ = </>

0개의 댓글