Database/MySQL

[MySQL]MYSQL 기본 문법: SELECT절 - 여러가지 함수 사용해서 조회하기

GAEBAL 2022. 3. 16. 22:49
728x90

함수

작성자 기준

  • ANSI 표준 함수
  • 특정 DBMS 벤더 전용 함수: MYSQL 전용, ORACLE 전용
  • 사용자 정의 함수
    • PL/SQL
    • Stored Function, Stored Procedure

 

수행결과 반환 기준

  • 단일행 함수
    • 하나의 레코드에 대해서 하나의 결과를 반환하는 함수
    • length(), trim()
  • 그룹(복수행 함수)
    • 여러개의 레코드에 대해서 연산 후 하나의 결과를 반환하는 함수
    • count(*), max()

 

문자 관련 함수

  • length()
    • 문자길이 반환
    • 영문, 숫자는 한자리는 1byte
    • 한글 한자리는 2byte, 3byte 반환: db설정에 따라 다름
    • 테이블 설계 시에 한글데이터 컬럼의 경우는 길이 * db설정byte길이
-- 문자 관련 함수
select length('abc12'), length('홍길동') from dual;

 

  • trim(), ltrim(), rtrim(): 공백 제거
    • 문자열 타입
    • char(고정길이)
    • varchar(가변길이)
    insert into table_name(data1, data2)
    values(’abc’, ‘abc’);
    
    • data1 char(10) ⇒ ‘abc       ‘ 이렇게 들어감(뒤에 공백 7칸)
    • data2 varchar(10) ⇒ ‘abc’ 이렇게 들어감

→ 이럴때 공백제거 해서 써야됨!

 

  • insert()
    • ‘hello ssafy !!!’ 문자열에서 ‘ssafy’를 ‘hello’로 변경
  • replace()
  • instr()
  • substring()
  • mid()
  • lower()
  • upper()
  • concat()

 

실습1 : ‘helloabc!!!’에서 abc를 ssafy로 변경

  • insert(’문자열’, 시작위치, 길이)
  • db 문자열 index 시작: 1번부터 시작!!!

 

실습2: ‘helloabc!!!’에서 hello를 welcome으로 변경

  • replace(’문자열’, ‘검색어’, ‘변경어’)

 

실습3: ‘hello ssafy !!!’ 에서 ‘ssafy’문자만 추출하기

  • substring(’문자열’, 시작위치, 길이), mid(’문자열’, 시작위치, 길이)
  • instr(’문자열, ‘검색어’): 위치반환, length(’문자열’): 길이반환

 

select substring('hello ssafy !!!', instr('hello ssafy !!!', 'ssafy'), length('ssafy')) "결과";

 

실습4: ‘hello ssafy !!!’ 모두 대문자 변경

  • upper(’문자열’)

 

실습5: ‘hello ssafy !!!’ 에서 ssafy 위치 인덱스 조회

  • instr(’문자열’, ‘검색어’)

 

숫자 관련 함수

  • 12345.456
  • abs(숫자): 절대값
  • truncate(숫자, [자릿수]): 버림
    • 자릿수가 2면 소수점 2자리 이후로는 버림(12345.456 → 12345.45)
    • 자릿수가 -2면 (12345.456 → 12300)
    • 자릿수가 0이면 (12345.456 → 12345)
  • round(숫자, [자릿수]): 반올림
    • truncate와 비슷
  • ceil(숫자), ceiling(숫자): 올림
  • floor(숫자): 내림

 

날짜 관련 함수

  • now(), sysdate(), current_timestamp()

 

  • current_date(), curdate()

 

 

  • current_time(), curtime()

 

  • select year(now()), month(now());

 

 

복수행(그룹함수)

  • count(*), count(PK): 전체 레코드 행수 반환
    • count(*): null 포함 행수 반환
  • count(컬럼명): null을 제외한 행수 반환
-- 복수행(그룹) 함수
-- 전체직원 숫자 조회
select count(*), count(employee_id) from employees;

 

-- 부서를 배정받은 직원의 숫자 조회
select count(department_id) "부서배정 받은 직원 숫자" from employees;

 

-- 부서를 배정받지 못한 직원의 숫자 조회
select count(*) "부서배정 받지 못한 직원 숫자" from employees
where department_id is null;

 

  • sum(): 총액
  • max(): 최대, 숫자, 날짜
  • min(): 최소, 숫자, 날짜
  • avg(): 평균
-- 전체직원숫자, 총급여, 평균급여, 최대급여, 최소급여 정보 조회
-- 평균급여는 소수이하 버림 처리
select count(*) 전체직원숫자, sum(salary) 총급여, floor(avg(salary)) 평균급여, max(salary) 최대급여, min(salary) 최소급여
from employees;

 

-- 가장 오래된 직원의 입사일과, 가장 최근에 입사한 직원 입사일 조회
select min(hire_date) 가장오래된입사일, max(hire_date) 가장최근입사일
from employees;

 

728x90