개발일지
SQL 기본 문법 정리( 정렬,연산 ) 본문
728x90
반응형
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이 된다. 그러므로 가능한 생략하지 않는 편이 낫다.
728x90
반응형
'Database' 카테고리의 다른 글
SQL 기본 문법 정리( 추가, 삭제, 갱신) (0) | 2023.03.16 |
---|---|
SQL 기본 문법 정리 (조회, 조건) (0) | 2023.03.14 |
SQL vs NoSQL (0) | 2023.03.14 |