SQL 첫걸음 3장

0Chae0·2026년 9월 26일

3장 정렬과 연산

정렬-ORDER BY

SELECT 명령에 ORDER BY 구를 지정하면 검색 결과의 행 순서를 바꿀 수 있다.ORDER BY 구를 지정하지 않을 경우에는 데이터베이스 내부에 저장된 순서로 반환된다. 언제나 정해진 순서로 결괏값을 얻기 위해서는 ORDER BY 구를 지정해야 한다.

WHERE 구 뒤에 ORDER BY 구를 지정하는 경우
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명

FROM 구 뒤에 ORDER BY 구를 지정하는 경우
SELECT 열명 FROM 테이블명 ORDER BY 열명

DESC, ASC 뒤에 붙이면 내림차순/오름차순 정렬 가능

정렬 시 '수치형 데이터', '날짜시간형 데이터'는 숫자 크기로 비교한다. '문자열'은 사전식 순서로 정렬한다.

ORDER BY는 어디까지나 서버에서 클라이언트로 행 순서를 바꾸어 결과를 반환하는 것뿐. 저장장치에 저장된 데이터의 행 순서를 변경혜는 것은 아니다.

복수의 열 정렬 또한 마찬가지이다.

SELECT * FROM sanple32 ORDER BY a, b;

먼저 b열에서 값의 크기 순서대로 정렬되고, 값이 같은 부분은 a 열로 정렬된 것을 알 수 있다.

복수의 열 지정한 경우에도 각 열에 대해 개별적으로 정렬 방법을 지정할 수 있다. (ASC, DESC)

SELECT 열명 FROM 테이블명 ORDER BY 열명1 [ASC|DESC], 열명2 [ASC|DESC],,,

+)NULL 정렬 방법
MySQL의 경우 NULL 값을 가장 작은 값으로 취급해 ASC(오름치순)에서는 가장 먼저, DESC(내림치순)에서는 가장 나중에 표시한다.

결과 행 제한하기-LIMIT


ex) 쇼핑몰 사이트 항목 개수 제한

정렬 후 제한하기

sample33을 정렬 후 LIMIT 3으로 상위 3건만 취득하기
SELECT * FROM sample33 ORDER BY no DESC LIMIT 3;

그러나, LIMIT는 표준 SQL이 아니기 때문에 MySQL과 PostgreSQL 이외의 데이터베이스에서는 사용할 수 없다. SQL Server에서는 LIMIT와 비슷한 기능을 하는 'TOP'을 사용할 수 있다.

페이지 나누기 기능 구현하기

오프셋 지정

LIMIT 3 OFFSET 0으로 첫 번째 페이지 표시
SELECT * FROM sample33 LIMIT 3 OFFSET 0;


수치 연산

산술 연산

+-*/% MOD




SELECT 구로 연산하기

가격수량으로 금액 계산하기
SELECT
, price * quantity FROM sample34;

식에 별명 붙이기
SELECT , pricequantity AS amount FROM sample34;

+) 이름에 ASCII 문자 이외의 것을 포함할 경우는 더블쿼트로 둘러싸서 지정한다.

+) 예약어와 같은 이름은 지정할 수 없다 -> 더블쿼트로 둘러싸서 지정하면 사용할 수 있다.

WHERE 구에서 연산하기

SELECT , price quantity AS amount FROM sample34;

WHERE 구에서 금액을 계산하고 2000원 이상인 행 검색하기
SELECT , price quantity AS amount FROM sample34
WHERE price * quantity >= 2000;

NULL 값의 연산

SQL에서는 NULL 값이 0으로 처리되지 않는다. 'NULL + 1' 의 결괏값은 1이 아닌 NULL이다.

ORDER BY 구에서 연산하기

SELECT 구에서 지정한 별명을 사용할 수 있다

SELECT , price quantity AS amount FROM sample34;

SELECT , price quantity AS amount FROM sample34 ORDER BY amount DESC;

함수

연산자 외에 함수를 사용해 연산할 수도 있다.

ROUND 함수

반올림

SELECT amount, ROUND(amount) FROM sample341;

ROUND는 기본적으로 소수점 첫째 자리를 기준으로 반올림한 값을 반환한다

ROUND 함수의 두 번째 인수를 저장해, 소수점 둘째 자리를 반올림
SELECT amount, ROUND(amount, 1) FROM sample341;

문자열 연산

문자열 결합


SELECT CONCAT(quantity, unit) FROM sample35:

SUBSTRING 함수

SUBSTRING 함수는 문자열의 일부분을 계산해서 반환하는 함수

TRIM 함수

문자열의 앞뒤로 여분의 스페이스가 있을 경우 이를 제거해주는 함수로 문자열 도중에 존재하는 스페이스는 제거되지 않는다

CHARACTER_LENGTH

문자열의 길이를 계산해 돌려주는 함수
VARCHAR 형의 문자열은 가변 길이이므로 길이가 서로 다르다. CHARACTER_LENGTH 함수를 사용하면 문자열의 길이를 계산할 수 있다.

날짜 연산

날짜나 시간 데이터는 수치 데이터와 같이 사직 연산을 할 수 있다

날짜 덧셈과 뺄셈

날짜시간형 데이터는 기간형 수치데이터와 덧셈 및 뺄셈을 할 수 있다. 날짜시간형 데이터에 기간형 수치데이터를 더하거나 빼면 날짜시간형 데이터가 반환된다.

CASE 문으로 데이터 변환하기

CASE 문

간단한 처리의 경우에는 사용자 정의 함수를 작성하지 않고도 CASE 문으로 처리할 수 있다

CASE로 NULL 값을 0으로 변환하기
SELECT a, CASE WHEN a IS NULL THEN 0 ELSE a END "a(null=0)" FROM sample37;

COALESCE

NULL 값을 반환하는 경우라면 COALESCE 함수를 사용하는 편이 더 쉽다
**SELECT a, COALESCE(a, 0) FROM sample37;

profile
아무것도 하지 않으면 아무 일도 일어나지 않기에... 시작하는 컴공생의 블로그

0개의 댓글