728x90
반응형
🍁 REPLACE
- Replace() : 치환하기
SELECT REPLACE('컬럼1에 찾을값이 있다', '찾을값', '바꿀값') AS msg;
REPLACE 문제
문제1
- 회원의 성씨 중에 이씨를 리씨로 바꾸기
SELECT mem_name,
REPLACE(mem_name , '이', '리') as rep1,
REPLACE(SUBSTRING(mem_name,1,1),'이','리') AS rep2,
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) = '이';
🍁 ROUND
- 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;
ROUND 문제
문제 1
- 상품정보에서 상품명, 원가율 조회하기
- 원가율 = 매입가/판매가의 백분율 값
- 원가율을 소숫점 2자리까지 표현
SELECT prod_name, ROUND((prod_cost/prod_sale)*100, 2) AS 원가율
FROM prod;
문제 2
- 회원 중에 취미가 수영인 회원이 구매한 상품들을 조회하기
- 회원 거주 지역이 서울, 대전, 광주인 회원
- 상품분류중에 피혁이라는 분류에 속해있는 상품을 구매한 회원
- 조회컬럼 : 상품명, 상품분류명, 원가(소숫점 2자리)
SELECT prod_name,
(SELECT lprod_nm
FROM lprod
WHERE lprod_gu = prod_lgu) AS lprod_nm,
ROUND((prod_cost/prod_sale)*100, 2) AS 원가율
FROM prod
WHERE prod_id IN(
SELECT cart_prod
FROM cart
WHERE cart_member IN(
SELECT mem_id
FROM member
where mem_like = '수영'
AND substring(mem_add1,1,2) IN ('서울', '대전', '광주')))
And prod_lgu IN(select lprod_gu
from lprod
WHERE lprod_nm LIKE '%피혁%');
🍁 Case 조건문
- 조회 컬럼 대신 [조건문]으로 조회하기
- 작성 방법 1
Case 기준값
When 비교값 Then 처리할 값
Else 처리할 값(없어도 됨)
End
SELECT Case 1
When 1 Then '1입니다'
When 0 Then '0입니다'
ELSE '음수'
END AS case_data;
- 작성 방법 2
Case
When 비교연산자 Then 처리할 값
When 비교연산자 Then 처리할 값
Else 처리할 값
End
SELECT Case
When 1<0 Then '1입니다'
When 1>0 Then '0입니다'
ELSE '음수'
END AS case_data;
- if 조건문 : mysql, mariadb에만 있음
- true, false 결과 값을 무조건 넣어야 함
SELECT if(10 > 1, '크다',if(10 < 10, '같다', '작다')) AS if_test;
Case 조건문 문제
문제1
- 회원아이디, 회원이름, 성별 조회
SELECT mem_id, mem_name,
case SUBSTRING(mem_regno2,1,1)
when 1 then '남'
when 3 then '남'
ELSE '여'
END AS gender
FROM member;
문제 2
- 회원 이름, 회원성별, 마일리지, 고객구분
- 고객구분은 마일리지의 값이 100이상이면 '우수고객' 100미만이면 '일반고객'
📍 코드 1 - Case 조건문 사용
SELECT mem_name,
case SUBSTRING(mem_regno2,1,1)
when 1 then '남'
when 3 then '남'
ELSE '여'
END AS gender,
mem_mileage,
case
when mem_mileage >=100 then '우수고객'
when mem_mileage < 100 then '일반고객'
END AS grade
FROM member;
📍 코드 2 - If 조건문 사용
SELECT mem_name,
if(MOD(SUBSTRING(mem_regno2, 1, 1), 2)=1, '남자', '여자') AS MF,
mem_mileage,
if(mem_mileage >= 5000, '우수고객', '일반고객') AS mem_best
FROM member;
mod() : 나머지의 값을 가져오는 함수
작성 방법 : SELECT MOD(10, 2) AS mod_test
문제 3
- 회원이 구매한 상품명, 판매가격을 조회
- 여성인 회원들이 구매한 상품이고, 우수고객이 구매한 상품에 대해서만 조회
- 우수고객은 마일리지값이 5000점 이상인 회원
SELECT prod_name, prod_sale
FROM prod
WHERE prod_id IN(
SELECT cart_prod
FROM cart
WHERE cart_member in(
select mem_id FROM member where SUBSTRING(mem_regno2,1,1) = 2 AND mem_mileage >= 5000));
🍁 NULL
- NULL, NAN, NONE
- NULL 체크 → NVL(컬럼명, NULL인 경우 대체할 값)
- NULL인 경우 : 메모리가 존재하지 않는 값
- ' '인 경우 : 메모리는 존재하지만 값은 없는 것(비어있음), white space
SELECT NVL(NULL, 'NULL이다'),
NVL(1, 'NULL이다');
- NULL값 찾기 : IS NULL (WHERE절 내에서만 사용가능)
- 조건에서 NULL을 비교할 때는 비교연산자를 쓸 수 없고 ISNULL이나 IS NOT NULL을 사용해야 한다.
SELECT PROD_NAME, NVL(PROD_MILEAGE,0) AS PROD_MILEAGE
FROM prod
WHERE prod_mileage IS NULL;
- IFNULL vs NULLIF
- IFNULL(A, B) : A가 NULL이면 B를 리턴하고, NULL이 아니면 A 리턴한다.
- NULLIF(A, B) : A = B가 True이면 NULL을 리턴하고, 그렇지 않으면 A을 리턴한다.
🍁 날짜 함수
- NOW() : 데이터 INSERT시에 주로 사용
- CURDATE() : 데이터 INSERT시에 년월일만 넣고자 할 때 주로 사용
- 시간은 자주 사용되지는 않음
SELECT NOW() AS '오늘날짜', CURDATE() AS '오늘 년월일', CURTIME() AS '오늘 시분초';
- 날짜 포맷 이용하기
- DATE_FORMAT(컬럼명, 날짜형식)
SELECT DATE_FORMAT('20231122144059', '%Y-%M-%D %H:%I:%S') AS dt1,
DATE_FORMAT(NOW(), '%Y-%M-%D %H:%I:%S') AS dt2;
날짜 함수 문제
문제 1
- 회원아이디, 회원이름, 회원생일 조회
- 생일은 '년-월-일' 형태로 조회
- 조회 되는 날짜의 가장 최솟값은 1970년 1월 1일이다. 그렇기 때문에 성윤미의 경우 mem_regno1에 460409로 데이터 값이 저장되어 있지만 %Y 형태로 연도를 가져오면 1946년으로 조회되지 못하고 2046년으로 나타나는 것이다.
SELECT mem_id, mem_name,
DATE_FORMAT(mem_bir,'%Y년-%m월-%d일') AS birthday,
DATE_FORMAT(mem_regno1,'%Y-%m-%d') AS mem_regno1
FROM member;
🍁 형(타입) 변환 함수
- Cast() or Convert()
- 형 변환을 주로 사용하는 경우 : 문자타입의 날짜값을 날짜타입으로 바꾸고자 할 때 주로 사용된다.
SELECT CAST('20231122' AS DATE), CONVERT('20231122', DATE);
728x90
반응형
'Digital Boot > Database' 카테고리의 다른 글
[Database][SQL] Join 조인 / Inline View 가상 테이블 (0) | 2023.11.23 |
---|---|
[Database][SQL] 집계 함수 / 그룹 함수 (0) | 2023.11.22 |
[Database][SQL] SubQuery 서브쿼리 (4) | 2023.11.21 |
[Database][SQL] 별칭 / 연산자 / 함수 (0) | 2023.11.21 |
[Database] MariaDB / HeidiSQL 설치 및 사용 (5) | 2023.11.20 |