티스토리 뷰
반응형
ORDER BY로 오름차순 정렬하기
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명; //기본이 오름차순
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 ASC;
ORDER BY로 내림차순 정렬하기
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 DESC;
- 문자는 사전식 순서에 의해 대소관계가 결정된다.
- 참고로 숫자를 문자열 형식으로 저장하게 되면 '10'은 '2'보다 작은것으로 판단된다. (사전식 정렬에 의해)
복수의 열을 지정해 정렬하기
앞에 명시한 열기준으로 먼저 정렬된다.
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명1 정렬방식, 열명2 정렬방식; //정렬방식엔 ASC나 DESC
NULL에 경우는 DBMS에 따라 가장 작은 값 혹은 가장 큰 값으로 판단된다.
MySQL은 가장 작은 값으로 취급하여 오름차순으로 정렬시에 가장 먼저 나온다.
결과 행 제한하기 LIMIT
LIMIT 구는 표준 SQL이 아니다. MySQL과 PostgreSQL에서 사용할 수 있다.
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 LIMIT 행수 [OFFSET 시작행]
조회해올 결과의 LIMIT 숫자만큼 상위 열을 조회해온다고 생각한다. 예를들어 DESC를 걸어두면 조회해올 내림차순의 결과중에서 LIMIT의 행수만큼만 출력된다.
LIMIT의 OFFSET 지정
- OFFSET의 기본값은 0이다.
- 즉, LIMIT 값이 3이라면 0 이후의 값 1,2,3 번째 행을 출력한다.
- LIMIT 값이 3이고 OFFSET 값이 3이라면, 3이 후의 값 4,5,6번째 행을 출력한다.
SELECT 구로 연산하기
SELECT *, price * quantity FROM 테이블명;
//price와 quantity라는 열과 그들을 곱셈한 결과를 이용해서 새로운 열를 만들어 낸다.
//열명은 price * quantity로 나온다.
열의 별명 (에일리어스 alias)
SELECT *, price * quantity AS amount FROM 테이블명;
//price * quantity의 결과가 amount라는 새로운 별명으로 표시된다.
SELECT *, price * quantity amount FROM 테이블명;
//AS 키워드 생략가능
WHERE 구에서 연산하기
SELECT *, price * quantity AS amount FROM 테이블명
WHERE price * quantity >= 2000;
//SELECT 구에서 지정한 별명은 WHERE 구에서 쓸 수 없다.
//처리 순서가 WHERE구 -> SELECT 구 순서이기 떄문.
- NULL을 이용해서 연산을 해도 결과값은 NULL이다.
ORDER BY 구에서 연산하기
SELECT *, price * quantity AS amount FROM 테이블명
WHERE price * quantity >= 2000
ORDER BY amount DESC;
//SELECT 구에서 지정한 별명을 ORDER BY 절에서는 쓸 수 있다.
//처리 순서가 WHERE 구 -> SELECT 구 -> ORDER BY 구 순서이기 때문
함수
- 함수도 연산자처럼 사용할 수 있다.
ROUND 함수
반올림을 하는 함수, 매개변수가 없으면 소수점 첫째자리에서 반올림한다.
SELECT amount, ROUND(amount) FROM 테이블명; //amount가 5661.60인 경우 round(amount)라는 열의 이름으로 5661이 출력된다.
반올림 자릿수를 지정, 두번째 매개변수로 출력할 소수점 자리를 지정
SELECT amount, ROUND(amount, 1) FROM 테이블명; //amount가 5661.60인 경우 round(amount)라는 열의 이름으로 5661.6이 출력된다.
반올림 자릿수를 지정, 10단위로 반올림하기
SELECT amount, ROUND(amount, -2) FROM 테이블명; //amount가 5661.60인 경우 round(amount)라는 열의 이름으로 5700이 출력된다.
CONCAT 함수 (문자열 결합)
SELECT CONCAT(열명1, 열명2) FROM 테이블명;
//열명1이 10이고 열명2가 '개'라는 문자라면 10개로 출력된다.
- 문자열 결합하는 방식은 DBMS마다 방언이 있다. MySQL은 CONCAT을 사용한다.
- SQL Server는 + 연산자를, Oracle이나 PostgreSQL은 || 연산자를 사용한다.
SUBSTRING 함수 (문자열 자르기)
SUBSTRING('가나다라마사', 1, 4)
//'가나다라'
SUBSTRING('가나다라마사', 5, 2)
//'마사'
- DBMS에 따라 함수명이 SUBSTR인 경우도 있다. MySQL은 SUBSTRING을 사용한다.
TRIM 함수 (여분의 스페이스 제거하기)
TRIM('가나다 ')
//'가나다'
CHARCTER_LENGTH 함수 (문자열의 길이 계산)
- CHAR는 자료형 선언시에 설정한 최대값(고정 길이)를 반환하고, VARCHAR는 저장된 문자열의 길이(가변 길이)를 반환한다.
- CHAR_LENGTH로 줄여서 사용할 수 있다.
OCTET_LENGTH 함수 (문자열의 길이를 바이트 단위로 계산)
- 문자세트가 EUC-KR인 경우 아스키(영어와 간단한 특수문자)는 1바이트, 한글은 2바이트로 계산된다.
- 문자세트가 UTF-8인 경우 아스키는 1바이트, 한글은 3바이트로 계산된다.
CURRENT_TIMESTAMP 함수 (시스템 날짜)
SELECT CURRENT_TIMESTMAP;
//시스템의 현재 날짜 출력
날짜의 덧셈과 뺄셈도 가능하다.
SELECT CURRENT_TIMESTAP + INTERVAL 1 DAY; //1일 후로 계산
날짜형 간의 뺄셈
- Oracle인 경우 - 연산을 이용한다.
- MySQL에서는 DATEDIFF 함수를 이용한다.
CASE문으로 데이터 변환하기
검색 CASE문
CASE WHEN 조건식1 THEN 식1
[WHEN 조건식2 THEN 식2 ...]
[ELSE 식3]
END
CASE WHEN 열명 IS NULL THEN 0 ELSE 열명 END
//CASE문으로 NULL값을 0으로 변환하기
//(참고로 NULL값을 변환하는 경우라면 COALESCE 함수를 사용해도 된다.)
단순 CASE문
CASE 식1
WHEN 식2 THEN 식3
[WHEN 식4 THEN 식5 ...]
[ELSE 식6]
END
CASE gender_code WHEN 1 THEN '남자'
WHEN 2 THEN '여자'
ELSE '미지정 END "성별"
//gender_code에 따라 문자열인 남자 여자로 바꾸기
- CASE문은 SELECT 구, WHERE 구, OREDER BY 구 어디에서나 사용할 수 있다.
- ELSE를 생략하게 되면 NULL이 된다. 그러므로 가능한 생략하지 않는 편이 낫다.
참고도서
SQL 첫걸음 - 아사이 아츠시
반응형
'Database' 카테고리의 다른 글
표준 SQL 기본 문법 정리 - (집계함수, 서브쿼리) (0) | 2019.04.23 |
---|---|
표준 SQL 기본 문법 정리 - (추가, 삭제, 갱신) (0) | 2019.04.23 |
표준 SQL 기본 문법 정리 - (조회, 조건) (0) | 2019.04.18 |
엘라스틱 서치는 왜 그렇게 빠를까? (5) | 2019.04.11 |
SQL vs NoSQL (MySQL vs. MongoDB) (56) | 2019.03.20 |
댓글