[SQL] Scalar Functions

허재훈·2023년 4월 28일
0

SQL

목록 보기
15/17
post-thumbnail

1. 실습환경 만들기

실습할 데이터베이스로 이동

  • AWS RDS (database-1) zerobase 에 접속

% mysql -h database-1.dddddd-2.rdddddd -P 3306 -u
zero -p zerobase

실습할 데이터 확인

  • sandwich 데이터 확인 (50 rows)

2. Scalar Functions : 단일 값 반환

  • 입력값을 기준으로 단일 값을 반환하는 함수

3. UCASE : 대문자로 변환

  • 영문을 대문자로 반환하는 함수

  • UCASE 문법

SELECT UCASE(string);
  • 예제 1. 다음 문장을 모두 대문자로 조회
SELECT UCASE('This Is ucase Test.');

  • 예제 2. $15 가 넘는 메뉴를 대문자로 조회
SELECT UCASE(menu)
FROM sandwich
WHERE price > 15;

4. LCASE : 소문자로 변환

  • 영문을 소문자로 변환하는 함수

  • LCASE 문법

SELECT LCASE(string);
  • 예제 1. 다음 문장을 모두 소문자로 조회
SELECT LCASE('This Is LCASE Test.');

  • 예제 2. $5 가 안되는 메뉴를 소문자로 조회
SELECT LCASE(menu)
FROM sandwich
WHERE price < 5;

5. MID : 문자열 부분 반환

  • 문자열 부분을 반환하는 함수

  • MID 문법

SELECT MID(string, start_position, lenth);

• string : 원본 문자열
• start : 문자열 반환 시작 위치. (첫글자는 1, 마지막글자는 -1)
• length : 반환할 문자열 길이

  • 예제 1. 1번 위치에서 4글자를 조회
SELECT MID('This is mid test.', 1, 4);

  • 예제 2. 6번 위치에서 5글자를 조회
SELECT MID('This is mid test.', 6, 5);

  • 예제 3. -4번 위치 (뒤에서 4번째 위치) 에서 4글자를 조회
SELECT MID('This is mid test.', -4, 4);

  • 예제 4. -8번 위치 (뒤에서 8번째 위치) 에서 3글자를 조회
SELECT MID('This is mid test.', -8, 3);

  • 예제 5. 11위 카페이름 중 두번째 단어만 조회 - 6번 위치에서 4글자
SELECT cafe FROM sandwich WHERE ranking = 11;

  • 예제 6. 11위 카페이름 중 두번째 단어만 조회 - 6번 위치에서 4글자
SELECT MID(cafe, 6, 4) FROM sandwich WHERE ranking = 11;

  • 예제 7. 11위 카페이름 중 두번째 단어만 조회 - -4번 위치 (뒤에서 4번째) 에서 4글자
SELECT MID(cafe, -4, 4) FROM sandwich WHERE ranking = 11;

6. LENGTH : 문자열 길이 반환

  • 문자열의 길이를 반환하는 함수

  • LENGTH 문법

SELECT LENGTH(sting);
  • 예제 1. 다음 문장의 길이를 조회
SELECT LENGTH('This is len test');

  • 예제 2. 문자가 없는 경우 길이도 0
SELECT LENGTH('');

  • 예제 3. 공백의 경우에도 문자이므로 길이가 1
SELECT LENGTH(' ');

  • 예제 4. NULL 의 경우 길이가 없으므로 NULL
SELECT LENGTH(NULL);

  • 예제 5. sandwich 테이블에서 Top 3의 주소 길이를 검색(상위 3개)
SELECT LENGTH(address), address FROM sandwich WHERE ranking <= 3;

7. ROUND : 반올림

  • 지정한 자리에서 숫자를 반올림하는 함수

  • ROUND 문법

SELECT ROUND(number, decimals_place);

• number : 반올림할 대상
• decimals : 반올림할 소수점 위치 (Option)

  • 예제 1. 반올림할 위치를 지정하지 않을 경우, 소수점 자리 (0) 에서 반올림
SELECT ROUND(315.625);

  • 예제 2. 소수점 첫번째 위치는 0
SELECT ROUND(315.625, 0);

  • 예제 3. 두번째 소수점 위치는 1
SELECT ROUND(315.625, 1);

  • 예제 4. 세번째 소수점 위치는 2
SELECT ROUND(315.625, 2);

  • 예제 5. 일(1)단위 위치는 -1
SELECT ROUND(315.625, -1);

  • 예제 6. 십(10)단위 위치는 -2
SELECT ROUND(315.625, -2);

  • 예제 7. sandwich 테이블에서 소수점 자리는 반올림해서 1달러 단위까지만 표시 (최하위 3개만 표시)
SELECT ranking, price, ROUND(price) FROM sandwich ORDER BY ranking DESC LIMIT 3;

8. NOW : 현재 날짜 및 시간 반환

  • 현재 날짜 및 시간을 반환하는 함수

  • NOW 문법

SELECT NOW;

9. FORMAT : 천단위 콤마 형식으로 반환

  • FORMAT 문법
  • FORMAT 은 string으로 반환됨. 그래서 =, <, > 등을 쓸 수 없음
SELECT FORMAT(number, decimal_place);

• number : 포맷을 적용할 문자 혹은 숫자
• decimals : 표시할 소수점 위치

  • 예제 1. 소수점을 표시하지 않을 경우 0
SELECT FORMAT(12345.6789, 0);

  • 예제 2. 소수점 두자리까지 표시할 경우 2
SELECT FORMAT(12345.6789, 2);

  • 예제 3. 소수점 열자리까지 표시
SELECT FORMAT(12345.6789, 10);

  • 예제 4. oil_price 테이블에서 가격이 백원단위에서 반올림 했을 때 2000원 이상인 경우 천원단위에 콤마를 넣어서 조회
SELECT FORMAT(가격, 0)
FROM oil_price
WHERE ROUND(가격, -3) >= 2000;

혼자서 해봅시다

  • 문제 1. sandwich 테이블에서 가계이름은 대문자, 메뉴이름은 소문자로 조회하세요.

SELECT UCASE(cafe), LCASE(menu)
FROM sandwich;

  • 문제 2. sandwich 테이블에서 10위 메뉴의 마지막 단어를 조회하세요.

# 메뉴 전체 이름이 나오지 않네
SELECT ranking, cafe, menu
FROM sandwich
WHERE ranking=10;

# 메뉴 전체 이름이 나오지 않네
SELECT ranking, cafe, mid(menu, -3, 3)
FROM sandwich
WHERE ranking=10;

  • 문제 3. sandwich 테이블에서 메뉴 이름의 평균 길이를 조회하세요.
SELECT menu, length(menu)
FROM sandwich
LIMIT 3;

SELECT avg(length(menu))
FROM sandwich
LIMIT 3;

# 이걸 왜 하지?
SELECT sum(length(menu))
FROM sandwich
LIMIT 3;

  • 문제 4. oil_price 테이블에서 가격을 십원단위에서 반올림해서 조회하세요.

SELECT 가격, round(가격, -2)
FROM oil_price;

  • 문제 5. oil_price 테이블에서 가격이 십원단위에서 반올림 했을 때 2000원 이상인 경우, 천단위에 콤마를 넣어서 조회하세요.
SELECT format(가격, 0), 가격
FROM oil_price
WHERE round(가격, -2) >= 2000;


위 글은 제로베이스 데이터 취업 스쿨의 강의자료를 참고하여 작성되었습니다.

profile
허재

0개의 댓글