티스토리 뷰

반응형

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 첫걸음 - 아사이 아츠시

반응형
댓글