솜이의 데브로그

11, 12강 ) LIMIT, 수치 연산 본문

CS/Database

11, 12강 ) LIMIT, 수치 연산

somsoming 2021. 10. 14. 23:40

reference : SQL 첫걸음

 

 

11. 결과 행 제한하기 - LIMIT

 

SELECT 명령에서는 결괏값으로 반환되는 행을 제한할 수 있다.

LIMIT 구에서는 결과 행을 제한할 수 있다.

 

(1) 행수 제한

LIMIT 구는 MySQL과 postgreSQL에서 사용할 수 있는 문법이다. (표준 SQL이 아님)

SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 LIMIT 행수

ex)
SELECT * FROM sample33 ORDER BY no DESC LIMIT 3;

LIMIT 뒤에는 최대 행수를 수치로 지정한다. 지정한 수 만큼 행이 반환된다.

 

  • WHERE 구에 조건을 지정해 LIMIT과 동일한 결과를 얻을 수도 있다.
  • 그러나 LIMIT은 반환할 행수를 제한하는 기능으로, WHERE 구로 검색한 후 ORDER BY로 정렬한 뒤 최종적으로 처리한다.

 

LIMIT을 사용할 수 없는 데이터베이스에서의 행 제한

MySQL과 PostgreSQL 외의 데이터베이스에서는 LIMIT을 사용할 수 없다.

SQL Server에서는 비슷한 기능으로 'TOP'을 사용할 수 있다.

ex)

SELECT TOP 3 * FROM sample33;

Oracle에는 ROWNUM이라는 열을 사용해 WHERE 구로 조건을 지정하여 행을 제한할 수 있다.

다만 WHERE 구로 지정하므로 정렬하기 전에 처리되어 LIMIT로 행을 제한한 경우와 결괏값이 다르다.

ex)

SELECT * FROM sample33 WHERE ROWNUM <=3;

 

(2) 오프셋 지정

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

  • 한 페이지에 5건의 데이터를 표시하도록 한다면 첫 번째 페이지의 경우 LIMIT 5로 결괏값을 표시
  • 그 다음페이지부터는 6번째 행부터 표시하는데, 이 표현은 OFFSET으로 지정할 수 있다. (결괏값으로부터 데이터를 취득할 위치를 가리킴)
  • Ex) sample33에서 LIMIT 3 OFFSET 0으로 첫 번째 페이지 표시, 4행부터 3건의 데이터를 두번째 페이지에 표시
    SELECT * FROM sample33 LIMIT 3 OFFSET 0;​
    SELECT * FROM sample33 LIMIT 3 OFFSET 3;
  • LIMIT 구의 OFFSET은 생략 가능하며 기본값은 0이다. (위치 지정은 0부터 시작)

 

 

12. 수치 연산

어떤 계산을 할 지는 연산자를 이용해 지정한다.

 

(1) 사칙 연산

산술 연산자는 기호로 표시한다.

연산자 연산
+ 덧셈 (가산) 1+2 → 3
- 뺄셈 (감산) 1-2 → -1
* 곱셈 (승산) 1*2 → 2
/ 나눗셈 (제산) 1/2 → 0.5
% 나머지 1%2 → 1

연산자의 우선순위

계산 시 *, /, % 계산을 먼저 하고 +, - 계산은 나중에 한다.

계산 순서는 기본적으로 왼쪽에서 오른쪽으로 진행한다.

 

 

(2) SELECT 구로 연산하기

select 구에서는 열명 외에 식을 기술할 수 있다.

ex)

SELECT *, price * quantity FROM sample34;

출력 결과는 price*quantity 결과의 행이 추가되어 나타난다.

no price quantity price * quantity
1 100 10 1000
2 230 24 5520
3 1980 1 1980

 

 

(3) 열의 별명

위의 표에서 price*quantity 의 이름을 예약어 AS를 사용해 별명으로 지정하여 출력할 수 있다.

ex)

SELECT *, price*quantity AS amount FROM sample34;

AS는 생략 가능하며 'SELECT price * quantity amount' 라고 써도 무방하다.

alias 라고도 부르며, 별명은 영어, 숫자, 한글 등으로 지정할 수 있다. 다만 한글로 지정 시 더블쿼트로 둘러싸서 지정하는 것이 좋다.

더블쿼트로 둘러싸면 데이터베이스 객체의 이름이라고 간주하며, 싱글쿼트로 둘러싸는 것은 문자열 상수이다.

 

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

☆이름을 지정하는 경우 숫자로 시작되지 않도록 한다.

 

 

(4) WHERE 구에서 연산하기

 

Ex) WHERE 구에서 금액을 계산하고 2000원 이상인 행 검색하기

SELECT *, price * quantity AS amount FROM sample34
WHERE price * quantity >= 2000;

 

WHERE 구와 SELECT 구의 내부 처리 순서

  • 데이터베이스 서버 내에서 WHERE구 → SELECT 구 순서로 처리된다.
  • WHERE 구로 행이 조건에 일치하는지를 먼저 조사 후 SELECT 구에 지정된 열을 선택해 결과로 반환.
  • 별명은 SELECT 구문을 내부 처리할 때 붙여진다.
  • 따라서 위의 예시에서 WHERE 구에 amount 를 입력하면 오류가 난다.

☆ SELECT 구에서 지정한 별명은 WHERE 구 안에서 사용할 수 없다!

 

 

(5) NULL 값의 연산

 

SQL 에서는 NULL 값이 0으로 처리되지 않는다.

따라서 NULL + 1 의 결괏값은 NULL 이다.

 

☆NULL로 연산하면 결과는 NULL이 된다

 

 

(6) ORDER BY 구에서 연산하기

 

ORDER BY 구에서도 연산하고 결괏값을 정렬할 수 있다.

Ex) ORDER BY 구에서 금액을 계산하고 내림차순으로 정렬하기

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

ORDER BY 는 서버에서 내부적으로 가장 나중에 처리된다.

즉, SELECT 구보다 나중에 처리되기 때문에 SELECT 구에서 지정한 별명을 ORDER BY에서도 사용할 수 있다.

Ex)

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

 

 

(7) 함수

 

연산 외에 함수를 사용해 연산 가능하다.

함수는 함수명에 따라 연산 방법이 결정되며, 계산 대상을 인수로 지정한다.

 

 

(8) ROUND 함수

 

거래되는 단위를 고려해 반올림을 할 때 사용한다.

Ex)

SELECT amount, ROUND(amount) FROM sample341;

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

ROUND 함수의 두 번째 인수로 반올림 할 자릿수를 지정 할 수 있다. 인수를 생략하는 경우 0으로 간주되어 소수점 첫째 자리를 반올림한다.

 

ROUND(amount, 1) 이라고 하는 경우 소수점 둘째자리에서 반올림. (첫째 자리까지 표시한다고 생각)

인수를 음수로 지정해 정수부의 반올림할 자릿수도 지정할 수 있다.

Ex) ROUND(amount, -2) : 10 단위를 반올림.

버림을 하는 경우 TRUNCATE 함수로 계산할 수 있다.

 

 

이 외에도 SIN, COS등의 삼각함수나 루트를 계산하는 SQRT, 대수를 계산하는 LOG 등의 함수가 있다.