11강 : 결과행 제한하기 - LIMIT
1. 행수 제한
limit
mysql, postgresql에서만 사용 가능!
mysql> select * from sample33;
+------+
| no |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
+------+
7 rows in set (0.01 sec)
mysql> select * from sample33 limit 3;
+------+
| no |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
# no열로 정렬
mysql> select * from sample33 order by no desc limit 3;
+------+
| no |
+------+
| 7 |
| 6 |
| 5 |
+------+
3 rows in set (0.00 sec)
2. 오프셋 지정
offset
페이지 나누기 기능 구현 가능
-> n번째 행부터 n건의 데이터 표시
이때 맨 처음 시작점은 1이 아닌 0부터!
mysql> select * from sample33 limit 3 offset 0;
+------+
| no |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
mysql> select * from sample33 limit 3 offset 3;
+------+
| no |
+------+
| 4 |
| 5 |
| 6 |
+------+
3 rows in set (0.00 sec)
12강 : 수치 연산
1. 사칙 연산
연산자는 기호로 표기 : +, -, *(곱셈), /(나눗셈), %(나머지)
우선순위는 일반 산수와 동일함
2. SELECT 구로 연산하기
mysql> select * from sample34;
+------+-------+----------+
| no | price | quantity |
+------+-------+----------+
| 1 | 100 | 10 |
| 2 | 230 | 24 |
| 3 | 1980 | 1 |
+------+-------+----------+
3 rows in set (0.02 sec)
mysql> select *, price*quantity from sample34;
+------+-------+----------+----------------+
| no | price | quantity | price*quantity |
+------+-------+----------+----------------+
| 1 | 100 | 10 | 1000 |
| 2 | 230 | 24 | 5520 |
| 3 | 1980 | 1 | 1980 |
+------+-------+----------+----------------+
3 rows in set (0.00 sec)
3. 열의 별명
좀더 알아보기 쉽게 별명 사용 가능
중복은 지양할 것
as 키워드 생략 가능
한글 사용 시엔 더블쿼트(mysql에선 백쿼트)로 둘러싸서 저장
숫자로 시작할 시엔 더블쿼트로 묶어야 가능(하지만 지양하자)
예약어(ex. select)는 더블쿼트로 둘러싸면 지정 가능
mysql> select *, price*quantity as amount from sample34;
+------+-------+----------+--------+
| no | price | quantity | amount |
+------+-------+----------+--------+
| 1 | 100 | 10 | 1000 |
| 2 | 230 | 24 | 5520 |
| 3 | 1980 | 1 | 1980 |
+------+-------+----------+--------+
3 rows in set (0.00 sec)
mysql> select *, price*quantity amount from sample34;
+------+-------+----------+--------+
| no | price | quantity | amount |
+------+-------+----------+--------+
| 1 | 100 | 10 | 1000 |
| 2 | 230 | 24 | 5520 |
| 3 | 1980 | 1 | 1980 |
+------+-------+----------+--------+
3 rows in set (0.00 sec)
mysql> select *, price*quantity "금액" from sample34;
+------+-------+----------+------+
| no | price | quantity | 금액 |
+------+-------+----------+------+
| 1 | 100 | 10 | 1000 |
| 2 | 230 | 24 | 5520 |
| 3 | 1980 | 1 | 1980 |
+------+-------+----------+------+
3 rows in set (0.00 sec)
더블쿼트 : 데이터베이스 객체 이름으로 간주
싱글쿼트 : 문자열 상수
4. where 구에서 연산하기
계산 결과값에 대한 조건 붙이기 가능
mysql> select *, price*quantity as amount from sample34;
+------+-------+----------+--------+
| no | price | quantity | amount |
+------+-------+----------+--------+
| 1 | 100 | 10 | 1000 |
| 2 | 230 | 24 | 5520 |
| 3 | 1980 | 1 | 1980 |
+------+-------+----------+--------+
3 rows in set (0.00 sec)
mysql> select *, price*quantity as amount from sample34 where price*quantity >= 2000;
+------+-------+----------+--------+
| no | price | quantity | amount |
+------+-------+----------+--------+
| 2 | 230 | 24 | 5520 |
+------+-------+----------+--------+
1 row in set (0.00 sec)
단, select 구에서 지정한 별명을 사용하여 검색은 불가능
왜냐하면 where 구 -> select 구 순서로 처리하기 때문
mysql> select *, price*quantity as amount from sample34 where amount >= 2000;
ERROR 1054 (42S22): Unknown column 'amount' in 'where clause'
5. NULL 값의 연산
null !== 0
null에 대한 연산 결과는 null이 됨
6. order by 구에서 연산하기
처리 순서
where 구 -> select 구 -> order by 구
mysql> select *, price*quantity as amount from sample34;
+------+-------+----------+--------+
| no | price | quantity | amount |
+------+-------+----------+--------+
| 1 | 100 | 10 | 1000 |
| 2 | 230 | 24 | 5520 |
| 3 | 1980 | 1 | 1980 |
+------+-------+----------+--------+
3 rows in set (0.00 sec)
mysql> select *, price*quantity as amount from sample34 order by price*quantity desc;
+------+-------+----------+--------+
| no | price | quantity | amount |
+------+-------+----------+--------+
| 2 | 230 | 24 | 5520 |
| 3 | 1980 | 1 | 1980 |
| 1 | 100 | 10 | 1000 |
+------+-------+----------+--------+
3 rows in set (0.00 sec)
# amount 별명 사용 가능
mysql> select *, price*quantity as amount from sample34 order by amount desc;
+------+-------+----------+--------+
| no | price | quantity | amount |
+------+-------+----------+--------+
| 2 | 230 | 24 | 5520 |
| 3 | 1980 | 1 | 1980 |
| 1 | 100 | 10 | 1000 |
+------+-------+----------+--------+
3 rows in set (0.00 sec)
7. 함수
함수도 연산자와 같은 역할을 함. 다만 표기법이 다를 뿐임
ROUND 함수
소수점 이하를 반올림(자료형이 INTEGER 형이 아닌 DECIMAL 형인 경우)
mysql> select * from sample341;
+---------+
| amount |
+---------+
| 5961.60 |
| 2138.40 |
| 1080.00 |
+---------+
3 rows in set (0.02 sec)
# 소수점 이하를 반올림
mysql> select amount, round(amount) from sample341;
+---------+---------------+
| amount | round(amount) |
+---------+---------------+
| 5961.60 | 5962 |
| 2138.40 | 2138 |
| 1080.00 | 1080 |
+---------+---------------+
3 rows in set (0.00 sec)
# 소수점 자리수 지정 가능
mysql> select amount, round(amount, 1) from sample341;
+---------+------------------+
| amount | round(amount, 1) |
+---------+------------------+
| 5961.60 | 5961.6 |
| 2138.40 | 2138.4 |
| 1080.00 | 1080.0 |
+---------+------------------+
3 rows in set (0.00 sec)
# -2 : 10단위를 반올림
mysql> select amount, round(amount, -2) from sample341;
+---------+-------------------+
| amount | round(amount, -2) |
+---------+-------------------+
| 5961.60 | 6000 |
| 2138.40 | 2100 |
| 1080.00 | 1100 |
+---------+-------------------+
3 rows in set (0.00 sec)
13강 : 문자열 연산
1. 문자열 결합
+ 연산자, || 연산자, CONCAT 함수로 문자열 데이터를 결합할 수 있음
ex. 'ABC' || '1234' -> 'ABC1234'
mysql> select * from sample35;
+------+-------+----------+------+
| no | price | quantity | unit |
+------+-------+----------+------+
| 1 | 100 | 10 | 개 |
| 2 | 230 | 24 | 통 |
| 3 | 1980 | 1 | 장 |
+------+-------+----------+------+
3 rows in set (0.02 sec)
mysql> select concat(quantity, unit) from sample35;
+------------------------+
| concat(quantity, unit) |
+------------------------+
| 10개 |
| 24통 |
| 1장 |
+------------------------+
3 rows in set (0.00 sec)
2. SUBSTRING 함수
문자열의 일부분을 계산해서 반환해주는 함수 = SUBSTR
# 앞 4자리(년도)
SUBSTRING('20140125001', 1, 4) -> '2014'
# 5째 자리부터 2자리(월)
SUBSTRING('2014125001', 5, 2) -> '01'
3. TRIM 함수
문자열의 앞뒤로 여분의 스페이스가 있을 경우 이를 제거하는 함수
trim('abc ') -> 'abc'
4. CHARACTER_LENGTH 함수
문자열의 길이를 계산해 돌려주는 함수
character set에 따라 길이가 문자 수로 간주되기도 함
'공부 > TIL' 카테고리의 다른 글
[SQL 첫걸음] 17강 - 19강 (0) | 2024.01.06 |
---|---|
[SQL 첫걸음] 14강 - 16강 (1) | 2024.01.05 |
[SQL 첫걸음] 2장 07강 조건 조합하기 (0) | 2023.11.21 |
[SQL 첫걸음] 2장 06강 검색 조건 지정하기 (0) | 2023.11.13 |
[SQL 첫걸음] 2장 05강 테이블 구조 참조하기 (0) | 2023.11.11 |