Scalar Functions

Jane의 study note.·2022년 12월 2일
0

MySQL

목록 보기
16/17

Scalar Functions

실습할데이터베이스에접속
AWS RDS (database-1) zerobase 에접속

mysql -h "database-1.aaaaaaaaa.ap-northeast-1.rds.amazonaws.com" -P 3306 -u admin -p 비밀번호입력

실습할데이터확인
sandwich 데이터확인 (50 rows)

use zerobase;
show tables;
select * from sandwich;
+------+-----------+-----------+-------+-------------------------+
| 순위 | cafe      | menu      | price | address                 |
+------+-----------+-----------+-------+-------------------------+
|    1 | Old Oak   | BLT       |    10 | 2109 W. Chicago Ave     |
|    2 | Au Cheva  | Fried Bo  |     9 | 800 W. Randolph St      |
|    3 | Xoco      | Woodland  |   9.5 |  445 N. Clark St        |

1. UCASE

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

UCASE 문법

SELECT UCASE(string);

UCASE 예제 1
다음문장을모두대문자로조회

SELECT UCASE('This Is ucase Test.');
=> THIS IS UCASE TEST.

UCASE 예제 2
$15 가넘는메뉴를대문자로조회

SELECT UCASE(menu), price FROM sandwich WHERE price > 15;
=> | UCASE(menu)                    | price |
+--------------------------------+-------+
| LOBSTER ROLL                   |    16 |
| GRILLED LAUGHING BIRD SHRIMP A |    17 |
| SHAVED PRIME RIB               |    21 |

2. LCASE

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

LCASE 문법

SELECT LCASE(string);

LCASE 예제 1

SELECT LCASE('This Is LCASE Test.');
=>  this is lcase test.

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

SELECT LCASE(menu), price FROM sandwich WHERE price < 5;
 LCASE(menu)  | price |
+--------------+-------+
| meatball sub |   4.5 |

3. MID

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

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

MID 예제 1
1번위치에서 4글자를조회

SELECT MID('This Is mid Test.', 1, 4);
=> This

MID 예제 2
6번위치에서 5글자를조회: 각글자가 1개, 1부터 시작, 공백포함, 6번째 위치 I에서부터 공백포함 5글자 가져옴

SELECT MID('This Is mid Test.', 6, 5);
=> Is mi

MID 예제 3
-4번위치 (뒤에서 4번째위치) 에서 4글자를조회

SELECT MID('This Is mid Test', -4, 4);
=> Test

MID 예제 4
-8번위치 (뒤에서 8번째위치) 에서 3글자를조회

SELECT MID('This Is mid Test', -8, 3);
=> mid

MID 예제 5
11위카페이름중두번째단어만조회 - 6번위치에서 4글자

SELECT cafe FROM sandwich WHERE 순위 = 11;

=>
cafe      |
+-----------+
| Lula Cafe |

SELECT MID(cafe, 6, 4) FROM sandwich WHERE 순위 = 11;
=>Cafe

11위카페이름중두번째단어만조회 - -4번위치 (뒤에서 4번째) 에서 4글자
SELECT MID(cafe, 6, 4) FROM sandwich WHERE 순위 = 11;
=>Cafe

4. LENGTH

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

SELECT LENGTH(string);

LENGTH 예제 1
다음문장의길이를조회

SELECT LENGTH('This is len test');
=> 16

LENGTH 예제 2
문자가없는경우길이도 0

SELECT LENGTH('');
=> 0

LENGTH 예제 3
공백의경우에도문자이므로길이가 1

SELECT LENGTH(' ');
=> 1

LENGTH 예제 4
NULL 의경우길이가없으므로 NULL

SELECT LENGTH(NULL);
=> NULL

LENGTH 예제 5
sandwich 테이블에서 Top 3의주소길이를검색

SELECT LENGTH(address), address FROM sandwich WHERE 순위 <=3;

| LENGTH(address) | address             |
+-----------------+---------------------+
|              19 | 2109 W. Chicago Ave |
|              18 | 800 W. Randolph St  |
|              16 |  445 N. Clark St    |

5. ROUND

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

SELECT ROUND(number, decimals_place);
- number : 반올림할대상
- decimals : 반올림할소수점위치 (Option)

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

SELECT ROUND(315.625);
=> 316

ROUND 예제 2
소수점첫번째위치는 0

SELECT ROUND(315.625, 0);
=> 316

ROUND 예제 3
소수점첫번째위치는 1

SELECT ROUND(315.625, 1);
=> 315.6

ROUND 예제 4
소수점첫번째위치는 2

SELECT ROUND(315.625, 2);
=> 315.63

ROUND 예제 5
일단위위치는 -1

SELECT ROUND(315.625, -1);
=> 320

ROUND 예제 6
십단위위치는 -2

SELECT ROUND(315.625, -2);
=> 300

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

SELECT 순위, price, ROUND(price) FROM sandwich ORDER BY 순위 DESC LIMIT 3;

 순위 | price | ROUND(price) |
+------+-------+--------------+
|   50 |  6.85 |            7 |
|   49 |  8.75 |            9 |
|   48 |   7.5 |            8 |

6. NOW

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

SELECT NOW();
=>  2022-11-08 15:19:19 |

7. FORMAT

숫자를천단위콤마가있는형식으로반환하는함수

FORMAT 문법

SELECT FORMAT(number, decimal_place);
- number : 포맷을적용할문자혹은숫자
- decimals : 표시할소수점위치

FORMAT 예제 1
소수점을표시하지않을경우 0 (반올림해서 출력함)

SELECT FORMAT(12345.6789, 0);
=>  12,346

FORMAT 예제 2
소수점두자리까지표시할경우 2

SELECT FORMAT(12345.6789, 2);
=>  12,345.68

FORMAT 예제 3
소수점열자리까지표시

SELECT FORMAT(12345.6789, 10);
=>  12,345.6789000000

FORMAT 예제 4
oil_price 테이블에서가격이백원단위에서반올림했을때 2000원이상인경우천원단위에콤마를넣어서조회

SELECT FORMAT(가격, 0) FROM oil_price WHERE ROUND(가격, -3) >= 2000;

<문제5>
- 1. sandwich 테이블에서 가게 이름은대문자, 메뉴이름은소문자로조회하세요.

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

| UCASE(cafe)                    | LCASE(menu)                    |
+--------------------------------+--------------------------------+
| OLD OAK TAP                    | blt                            |
| AU CHEVAL                      | fried bologna                  |

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

11위카페이름중두번째단어만조회

select 순위, cafe, menu from sandwich where 순위=10;
=> 일단 확인

순위 | cafe | menu                           |
+------+------+--------------------------------+
|   10 | Nana | Grilled Laughing Bird Shrimp a |

SELECT MID(menu, -1, 1) FROM sandwich where 순위 = 10;
=> a

(실습강의에서는 and까지 보임
SELECT MID(menu, -3, 3) FROM sandwich where 순위 = 10;
=> 끝에서 3글자에서부터 3글자를 뱉어줘라.
=> 답: and

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

SELECT menu, length(menu) FROM sandwich limit 3;

SELECT avg(length(menu)) FROM sandwich;
=>  13.8600 

SELECT sum(length(menu)) FROM sandwich;
=>   693

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

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

0개의 댓글