[제로베이스 데이터 취업 스쿨] 9기 10주차 – SQL 심화 (6): Scalar Functions

Inhee Kim·2023년 1월 9일
0
post-thumbnail

실습환경

  • AWS RDS (database-1) zerobase 에 접속
mysql -h "엔드포인트" -P 3306 -u zero -p zerobase

실습 데이터 확인

select * from sandwich;

Scalar Functions

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

(1) UCASE

  • 영문을 대문자로 반환하는 함수
# 문법
select ucase(string);

예제

1. 다음 문장을 모두 대문자로 조회

select ucase('This Is ucase Test.');

2. $15 가 넘는 메뉴를 대문자로 조회

select ucase(menu)
from sandwich
where price > 15;

(2) LCASE

  • 영문을 소문자로 변환하는 함수
# 문법
select lcase(string);

예제

1. 다음 문장을 모두 소문자로 조회

select lcase('This Is LCASE Test.');

2. $5 가 안되는 메뉴를 소문자로 조회

select lcase(menu)
from sandwich
where price < 5;

(3) MID

  • 문자열 부분을 반환하는 함수
# 문법
# string : 원본 문자열
# start_position : 문자열 반환 시작 위치. (첫글자는 1, 마지막글자는 -1)
# length : 반환할 문자열 길이
select mid(string, start_position, 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 mid(cafe, -4, 4)
from sandwich
where ranking = 11;

(4) LENGTH

  • 문자열의 길이를 반환하는 함수
# 문법
select length(string);

예제

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의 주소 길이 검색

select length(address), address
from sandwich
where ranking <= 3;

(5) ROUND

  • 지정한 자리에서 숫자를 반올림하는 함수
# 문법
# number : 반올림할 대상
# decimals_place : 반올림할 소수점 위치 (Option)
select round(number, decimals_place);

예제

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

select round(315.625, -1);

6. 십단위 위치는 -2

select round(315.625, -2);

7. sandwich 테이블에서 소수점 자리는 반올림해서 1달러 단위까지만 표시 (최하위 3개만 표시)

select ranking, price, round(price)
from sandwich
order by ranking desc
limit 3;

(6) NOW

  • 현재 날짜 및 시간을 반환하는 함수
# 문법
select now();

예제

1. 현재 날짜 및 시간 반환

select now();

(7) FORMAT

  • 숫자를 천단위 콤마가 있는 형식으로 반환하는 함수
# 문법
# number : 포맷을 적용할 문자 혹은 숫자
# decimal_place : 표시할 소수점 위치
select format(number, decimal_place);

예제

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
limit 15;

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

select ranking, cafe, mid(menu, -1, 1)
from sandwich
where ranking = 10;

3. sandwich 테이블에서 메뉴 이름의 평균 길이를 조회하세요.

select avg(length(menu))
from sandwich;

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

select 가격, round(가격, -2)
from oil_price;

5. oil_price 테이블에서 가격이 십원단위에서 반올림 했을 때 2000원 이상인 경우, 천단위에 콤마를 넣어서 조회하세요.

select format(가격, 0), 가격
from oil_price
where round(가격, -2) >= 2000;
profile
Date Scientist & Data Analyst

0개의 댓글