KoreanFoodie's Study
SQL 첫걸음 - 3. 정렬과 연산 본문
SQL 첫걸음이라는 책을 보고 SQL에 대한 기초적인 내용을 정리한 리마인더 글입니다.
3장 : 정렬과 연산
// ORDER BY로 검색 결과 정렬하기 -> 테이블에 영향을 주지 않는다
SELECT * FROM sample31 ORDER BY age;
// 기본은 오름차순 정렬
SELECT * FROM sample31 ORDER BY age DESC;
// 내림차순 SELECT * FROM sample31 ORDER BY age ASC;
// 오름차순
// 수치형과 문자열형 데이터는 대소관계의 계산 방법이 다름
// INTEGER : 1 < 2 < 10 < 11 ...
// VARCHAR : 1 < 10 < 11 < 2 ... (한글자씩 비교하기 때문이다)
// 복수의 열을 지정해 정렬
SELECT * FROM sample32 ORDER BY a, b;
// 먼저 a열로 정렬 후 b열로 정렬
SELECT * FROM sample32 ORDER BY a ASC, b DESC;
// 각각의 열에 대해 옵션을 줄 수 있음
// NULL 값의 정렬순서 : MySQL의 경우는 NULL을 가장 작은 값으로 취급한다 (DB 제품마다 다름)
// 결과 행 제한하기 - LIMIT (표준 SQL이 아님. MySQL, PostgreSQL에서 사용)
SELECT * FROM sample33 ORDER BY no DESC LIMIT 3;
// no열을 내림차순 정렬 후 상위 3개 행을 선택
// 결과 행 제한하기 - <= (ORACLE)
SELECT * FROM sample33 ORDER BY no DESC ROWNUM <= 3;
// 위와 같은 결과
// 오프셋 지정
// 대량의 데이터를 페이지 나누기(pagination)기능을 사용해 나눈다.
SELECT * FROM sample33 LIMIT 3 OFFSET 0; // 1-3 행을 1페이지로 (0 : 인덱스라고 생각)
SELECT * FROM sample33 LIMIT 3 OFFSET 3; // 4행부터 3건의 데이터 표시 (3+1 = 4행)
수치 연산
// + - * / % MOD SELECT *, price * quantity FROM sample34;
// price * quantity 값이 계산된 새로운 column이 추가되어 리턴된다
// 예약어 / 별명 : 숫자로 시작하면 안된다!
SELECT *, price * quantity AS amount FROM sample34;
// 계산된 값의 column이 amount라는 이름으로 추가
SELECT *, price * quantity "금액" FROM sample34;
// "금액" 이라는 column이 붙어 나온다
// WHERE 구에서 연산하기
SELECT *, price * quantity AS amount FROM sample34 WHERE price * quantity >= 2000;
// 잘 동작
SELECT *, price * quantity AS amount FROM sample34 WHERE amount >= 2000;
// 동작하지 않음
// 내부처리 순서가 WHERE -> SELECT 로 가기 때문이다! (일반적으로)
// 또한, 별명은 SELECT 구문을 내부처리할 때 붙여진다.
// NULL 값 연산 : SQL에서, NULL + 1 = NULL
// 2 * NULL = NULL
// 1 / NULL = NULL
// 금액의 별명을 사용해 내림차순으로 정렬
SELECT *, price * quantity AS amount FROM sample34 ORDER BY amount DESC;
// ORDER BY는 제일 나중에 실행된다!
// 실행 순서 :WHERE -> SELECT(별명 지정) -> ORDER BY
// ROUND 함수
SELECT amount, ROUND(amount) FROM sample34;
// 소수점 이하를 반올림
SELECT amount, ROUND(amount, 1) FROM sample34;
// 소수점 둘째 자리를 반올림
SELECT amount, ROUND(amount, -2) FROM sample34;
// 10의 자리를 반올림
문자열 연산
// +, ||, CONCAT 함수로 문자열을 결합할 수 있다.
SELECT CONCAT(quantity, unit) FROM sample35;
// 문자열 붙이기
SUBSTRING('20140125001', 1, 4);
// '2014' SUBSTRING('20140125001', 5, 2);
// '01' TRIM('ABC ');
// 'ABC' CHARACTER_LENGTH('ABC');
// 3
// 시스템 날짜 확인하기
SELECT CURRENT_TIMESTAMP;
SELECT CURRENT_DATE + INTERVAL 1 DAY;
// 시스템 날짜의 1일 후를 계산
// 날짜간의 차이 : '2014-01-01' - '2010-01-01'
// ORACLE에서...
// CASE문으로 데이터 변환하기
// CASE로 조건을 줘서 케이스를 나눈다 (WHEN - ELSE) ELSE가 필수는 아님
SELECT a, CASE WHEN a IS NULL THEN 0 ELSE a END "a(null=0)" FROM sample37;
// COALIESCE 함수는 여러 개의 인수를 지정하여 주어진 인수 가운데 NULL이 아닌 값에 대해서는 가장 먼저 지정된 인수의 값을 반환한다.
SELECT A, COALESCE(a, 0) FROM sample37;
// 성별 코드 변환하기 (검색 CASE)
SELECT a AS "코드", CASE WHEN a = 1 THEN '남자' WHEN a = 2 THEN '여자' ELSE '미지정' END AS "성별" FROM sample37;
// ELSE를 생략하면 ELSE NULL이 된다!
'Database' 카테고리의 다른 글
SQL 기초 - 5. 데이터 집계 (집계함수, 그룹핑) (0) | 2021.10.12 |
---|---|
SQL 기초 - 4. 데이터 읽기(SELECT, 조건문, 정렬) (0) | 2021.10.12 |
SQL 기초 - 2. 테이블 생성과 삽입 (2) | 2021.10.12 |
SQL 첫걸음 - 2. 테이블에서 데이터 검색 (0) | 2021.10.07 |
SQL 첫걸음 - 1. 데이터베이스와 SQL 개념 정리 (0) | 2021.10.07 |
Comments