본문 바로가기

db/MySql

MySQL 연산자와 내장 함수

연산자

  • 동등 비교
    • Null safe <=>
      NULL을 하나의 값으로 인식하고 비교함으로 NULL을 반환하지 않는다.
    • Null unsafe =
      NULL을 비교시에는 NULL을 반환한다.
  • 부정 비교 <>, !=
  • NOT 연산 !, NOT
  • AND, OR 연산
  • divide 연산 /, DIV, %, MOD
  • REGEXP 연산 REGEXP, RLIKE
    • 정규 표현식을 비교하는 연산자
    • 문자열 칼럼 비교에 사용할 때 REGEXP 조건의 비교는 인덱스 레인지 스캔을 사용 X
  • LIKE 연산
    • % : 0 또는 1 이상의 모든 문자
    • _ : 정확히 하나의 문자
    • ESCAPE : %, _ 문자 비교를 위해서 escape 문자를 설정하여 %, _사용이 가능하게 함
    • ex) select ‘a%’ LIKE ‘a/%’ ESCAPE ‘/‘;
  • BETWEEN 연산
    • 범위가 크거나 특정 구간의 선택도가 높을 때, 제한된 값을 동등 비교하는 IN의 사용을 통해서 성능을 개선할 여지가 있음
  • IN 연산
    • IN 연산자에 상수값을 입력으로 전달하는 경우는 다른 DBMS만큼 최적화를 수행
    • IN 연산자의 입력이 상수가 아니라 서브 쿼리인 경우에는 상당히 느려질 수 있음

내장 함수

  • IFNULL(a, b)

    • a : NULL 비교 대상
    • b : NULL 인 경우 반환 값
    • return if ( a = NULL ) a else b
  • ISNULL(a)

    • return if ( a = NULL) true else false
  • NOW(), SYSDATE()

    • NOW() : 하나의 SQL에서 동일한 결과 보장
    • SYSDATE() : 호출되는 시점에 따른 결과 반환
    • SYSDATE() 보다는 NOW()를 사용하거나 환경 변수로 NOW() 처럼 동작하게 처리하기를 권장한다.
  • DATE_FORMAT
    날짜를 문자열로 변환한다.

    SELECT DATE\_FORMAT(NOW(), ‘%Y-%m-%d %H:%i:%s’) AS current\_dttm;
    결과 : 2023-03-23 12:33:44
  • STR_TO_DATE
    문자열을 날짜 데이터로 변경한다.

    SELECT STR\_TO\_DATE(‘2023-03-23 12:33:44’, ‘%Y-%m-%d %H:%i:%s’) AS current\_dttm 
    결과 : 2023-03-23 12:33:44
  • DATE_ADD, DATE_SUB
    특정 날짜에서 년도나 월일 또는 시간을 더하거나 뺄 때 사용

    SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) AS tomorrow;
    SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) AS tomorrow;
  • 타임 스템프 연산 UNIX_TIMESTAMP, FROM_UNIXTIME

    SELECT UNIX_TIMESTAMP('2023-03-03 03:03:00');
    결과 : 23404995 (단순한 예제 값입니다. 실제와는 다름니다)
    SELECT FROM_UNIXTIME(UNIX_TIMESTAMP('2023-03-03 03:03:00'));
    결과 : 2023-03-03 03:03:00
  • 문자열 처리
    RPAD

    SELECT RPAD('HELLO', 10, '_');
    결과 : HELLO_____

    LPAD

    SELECT LPAD('HELLO', 10, '_');
    결과 : _____HELLO

    RTRIM

    SELECT RTRIM('  HELLO  ');
    결과 : '  HELLO'

    LTRIM

    SELECT LTRIM('  HELLO  ');
    결과 : 'HELLO  '

    TRIM

    SELECT TRIM('  HELLO  ');
    결과 : 'HELLO'

'db > MySql' 카테고리의 다른 글

SELECT 최적화  (0) 2023.03.17
MySQL의 주요 처리 방식  (0) 2023.03.06
DB 실행 계획 분석 EXPLAIN - 2  (0) 2023.03.05
DB 실행 계획 분석 EXPLAIN - 1  (0) 2023.02.22