일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 깃허브 토큰 인증
- 백준
- HTTP
- 모두를 위한 딥러닝
- 문자열
- 깃 연동
- 네트워크
- 백준 4358번
- 백준 4358 자바
- 팀플회고
- 데이터베이스
- SQL
- 지네릭스
- 백준 4949번
- 딥러닝
- 깃허브 로그인
- 리액트 네이티브 시작하기
- 머신러닝
- 정리
- 모두를위한딥러닝
- 자바
- 모두의네트워크
- 모두의 네트워크
- 데베
- 리액트 네이티브
- 스터디
- 백준 5525번
- React Native
- 리액트 네이티브 프로젝트 생성
- 깃 터미널 연동
- Today
- Total
솜이의 데브로그
11, 12강 ) LIMIT, 수치 연산 본문
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 등의 함수가 있다.
'CS > Database' 카테고리의 다른 글
13-15강 ) 문자열, 날짜, CASE문 (0) | 2021.10.28 |
---|---|
5장 ) DBMS 기본지식 (0) | 2021.10.28 |
4장 ) 데이터베이스와 아키텍처 구성(2) (0) | 2021.10.13 |
9,10강 ) 정렬, 복수의 열 지정 정렬 (0) | 2021.10.08 |
4장 ) 데이터베이스와 아키텍처 구성(1) (0) | 2021.10.07 |