코딩헤딩

MariaDB 데이터베이스[database, DB] 함수 본문

데이터베이스

MariaDB 데이터베이스[database, DB] 함수

멈머이 2023. 11. 22. 23:06
728x90

mariadb, mysql 종속함수 다른 db에서는 함수이름이 조금 다를 수 있다.

 

1. REPLACE() : 치환하기

SELECT REPLACE ('컬럼1에 찾을값이 있어요','찾을값','바꿀값') AS msg;

 

 

2. ROUND() : 반올림 함수 / [,] 뒤의 숫자는 소수점의 위치를 의미함

SELECT ROUND(123.567, 0) AS r1,
		ROUND(123.567, 1) AS r2,
		ROUND(123.567, 2) AS r3,
		ROUND(123.567, 3) AS r4,
		ROUND(123.567, 4) AS r5,
		ROUND(123.567, -1) AS r6,
		ROUND(123.567, -2) AS r7,
		ROUND(123.567, -3) AS r8,
		ROUND(123.567, -4) AS r9;

반올림 할 자릿수가 마이너스로 넘어가면 값은 "0"이 된다.

 

 

3. mod() : 나눈 나머지의 값 함수

SELECT MOD(10,4) AS mod_test;

 

 

4.  if문 : mysql, mariadb에만 있음

SELECT if(10>100, '크다', if(10<10, '같다', '작다')) AS if_test;

if절 안에 if절 사용가능. / if (조건, 참일 때 결과, 거짓일 때결과)

 

 

5. case문 

*작성방법

<비교연산자 사용 x>

 - case기준값
 - when 비교값 then 처리값 
 - when 비교값 then 처리값
 - Else 처리할 값
 - End
 - else를 제외한 모든 요소가 있어야 오류가 안 난다

 

<비교연산자 사용>

  - case
  - when 기준값 비교연산자 then 처리값 
  - when 기준값 비교연산자 then 처리값
  - Else 처리할 값
  - End
  - else를 제외한 모든 요소가 있어야 오류가 안 난다

SELECT case 1
			when 1 then '1입니다'
			when 0 then '0입니다'
			ELSE '음수'
			END AS case_data;

SELECT case 
			when 1<0 then '1입니다'
			when 1>0 then '0입니다'
			ELSE '음수'
			END AS case_data;

비교연산자 사용 시 결괏값이 TRUE인 것 출력.

 

 

4. nvl(컬럼명, null인 경우 대체할 값) : null, NaN, None => null체크

null인 경우 : 메모리가 존재하지 않는 값
'공백'인 경우 : 1. 메모리는 존재하지만 값은 없는 것(비어있는 것)
                        2. white space

SELECT nvl(NULL, 'null임'), 
		 nvl(1, 'null아님');

테이블 내에 null값이 있다면 연산을 할 때 오류가 뜬다. 따라서 null값을 미리 찾아서 다른 값으로 대체해야 한다.

 

 

5. is null(***where절 내에서만 사용가능) : null값 찾기 

SELECT*
FROM prod
WHERE prod_mileage IS NULL;

맞는 표현

SELECT*
FROM prod
WHERE prod_mileage = NULL;

틀린 표현

비교연산자는 왼쪽값과 오른쪽 값을 비교한다. 비교한다라는 것은 메모리공간에 있는 값을 비교 따라서 성립 불가

 

 

6. 날짜 함수

SELECT NOW() AS '오늘날짜', CURDATE() AS '오늘 년월일', CURTIME() AS '오늘 시분초';


*날짜 포맷 이용하기

SELECT DATE_FORMAT('20231122144059', '%Y-%m-%d %H%i%s') AS dt1,
 DATE_FORMAT(NOW(),'%Y-%m-%d %H%i%s') AS dt2;

 

 

7. cast() or convert() : 형 변환 함수

형변환을 주로 사용하는 경우 : 문자타입의 날짜값을 날짜타입으로 바꾸고자 할 때 주로 사용됨

SELECT CAST('20231122' AS DATE), CONVERT('20231122', DATE);

 

 

 

예제)

1. [ replace() 함수 사용 ]

   회원의 성씨 중에 이 씨를 리 씨로 바꾸기 

SELECT mem_name,
        REPLACE(mem_name,'이','리') AS lee,
        REPLACE(SUBSTRING(mem_name,1,1), '이','리') AS lee1,
        SUBSTRING(mem_name,2,2) AS nm,
        CONCAT(REPLACE(SUBSTRING(mem_name,1,1), '이','리'),
            SUBSTRING(mem_name,2,2)) AS rep_name
FROM member
WHERE SUBSTRING(mem_name,1,1) = '이';

성씨만 바꾸어주어야 하기 때문에 성씨와 이름을 분리하여 바꿔준 뒤 다시 합쳐주어야 한다.

 

 

2. [ round()  함수사용]

  회원 중에 취미가 수영인 회원이 구매한 상품들 조회하기
  회원 지역이 서울, 대전, 광주에 거주하는 회원들
  상품분류명 중에 피혁이라는 분류에 속해있는 상품을 구매한 회원
  조회컬럼 : 상품명, 상품분류명, 원가(소수점 2자리까지) 

SELECT prod_name, 
	  (SELECT lprod_nm
	   FROM lprod
	   WHERE lprod_gu = prod_lgu) AS prod_name,
		ROUND((prod_cost/prod_sale)*100,2) AS price
FROM prod
WHERE prod_id IN (SELECT cart_prod
		FROM cart
		WHERE cart_member IN(SELECT mem_id
								FROM member
								WHERE mem_like LIKE '%수영%'
								AND SUBSTRING(mem_add1,1,2) IN ('서울','대전','광주')))
		AND prod_lgu IN (SELECT lprod_gu
								FROM lprod
								WHERE lprod_nm LIKE '%피혁%');

 

 

3. [if / case문 사용]

    회원이름, 회원성별, 마일리지, 고객구분
    고객구분은 마일리지의 값이 5000 이상이면 '우수고객', 5000 미만이면 '일반고객'

SELECT mem_name, mem_mileage,
       (case SUBSTRING(mem_regno2,1,1)
					when 1 then '남'
					when 3 then '남'
					ELSE '여'
					END) AS mem_gen,
		 if(mem_mileage<5000, '일반고객', '우수고객') AS mem_grade
FROM member;

 

4. [날짜 함수 사용]

    회원아이디, 회원이름, 회원생일 조회하기
     생일은 '년-월-일' 형태로 출력

SELECT mem_id, mem_name,
 DATE_FORMAT(mem_bir, '%Y년%m월%d일') AS mem_bir,
 DATE_FORMAT(mem_regno1, '%Y년%m월%d일') AS mem_regno
FROM member;
728x90