SQL - Scalar Function

jaam._.mini·2023년 12월 28일
0
post-thumbnail
post-custom-banner

sandwich.csv 실습 설정 (mini Quiz data)


import mysql.connector
import pandas as pd
conn = mysql.connector.connect(
    host = "database-1.cj22sogoe8oa.ap-southeast-2.rds.amazonaws.com",
    port = 3306,
    user = "admin",
    password = "94woals!!",
    database = "zerobase"
)
df = pd.read_csv('sandwich.csv', encoding='utf-8')

df.info()

df.tail(3)

sql = "create table sandwich(ranking int, cafe varchar(32), munu varchar(32), price float, address varchar(32))"
cursor = conn.cursor(buffered=True)
cursor.execute(sql)
cursor.execute('desc sandwich')
result = cursor.fetchall()

for row in result:
    print(row)

sql = "insert into sandwich values (%s,%s,%s,%s,%s)"

for i, row in df.iterrows():
    cursor.execute(sql, tuple(row))
    print(tuple(row))
    conn.commit()

conn.close()

Scalar Function

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

1. UCASE

영문을 대문자로 반환


  1. 다음 문장을 모두 대문자로 조회
mysql> select ucase('This Is ucase Test.');
+------------------------------+
| ucase('This Is ucase Test.') |
+------------------------------+
| THIS IS UCASE TEST.          |
+------------------------------+
  1. $15 가 넘는 메뉴를 대문자로 조회
mysql> select ucase(menu)
    -> from sandwich
    -> where price > 15;
+----------------------------------+
| ucase(menu)                      |
+----------------------------------+
| LOBSTER ROLL                     |
| GRILLED LAUGHING BIRD SHRIMP AND |
| SHAVED PRIME RIB                 |
| LOBSTER ROLL                     |
| GRILLED LAUGHING BIRD SHRIMP AND |
| SHAVED PRIME RIB                 |
| LOBSTER ROLL                     |
| GRILLED LAUGHING BIRD SHRIMP AND |
| SHAVED PRIME RIB                 |
+----------------------------------+




2. LCASE

소문자로 반환하는 함수


  1. 다음 문장을 모두 소문자로 조회
mysql> select lcase('This Is LCASE Test.');
+------------------------------+
| lcase('This Is LCASE Test.') |
+------------------------------+
| this is lcase test.          |
+------------------------------+
  1. $5 가 안되는 메뉴를 소문자로 조회
mysql> select lcase(menu)
    -> from sandwich
    -> where price < 5;
+--------------+
| lcase(menu)  |
+--------------+
| meatball sub |
| meatball sub |
| meatball sub |
+--------------+




3. MID

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

SELECT MID(string, start_position, lenth);
SELECT MID (가져올 부분, 시작위치, 길이)


  1. 1번 위치에서 4글자 조회
mysql> select mid('This is mid test', 1, 4);
+-------------------------------+
| mid('This is mid test', 1, 4) |
+-------------------------------+
| This                          |
+-------------------------------+
  1. 6번 위치에서 5글자 조회
mysql> select mid('This is mid test', 6, 5);
+-------------------------------+
| mid('This is mid test', 6, 5) |
+-------------------------------+
| is mi                         |
+-------------------------------+
  1. -4번 위치 (뒤에서 4번째 위치)에서 4글자 조회
mysql> select mid('This is mid test', -4, 4);
+--------------------------------+
| mid('This is mid test', -4, 4) |
+--------------------------------+
| test                           |
+--------------------------------+
  1. 11위 카페이름 중 두번째 단어만 조회 - 6번 위치에서 4글자
mysql> select mid(cafe, -4, 4)
    -> from sandwich
    -> where ranking = 11;
+------------------+
| mid(cafe, -4, 4) |
+------------------+
| Cafe             |
| Cafe             |
| Cafe             |
+------------------+




4. LENGTH

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


  1. 다음 문장의 길이 조회
mysql> select length('This is len test');
+----------------------------+
| length('This is len test') |
+----------------------------+
|                         16 |
+----------------------------+
  1. 공백의 경우에도 문자이므로 길이는 1
mysql> select length(' ');
+-------------+
| length(' ') |
+-------------+
|           1 |
+-------------+
  1. NULL의 경우 길이가 없으므로 NULL
mysql> select length(null);
+--------------+
| length(null) |
+--------------+
|         NULL |
+--------------+




5. ROUND

지정한 자리에서 반올림
SELECT ROUND (반올림 대상, 반올림 소수점 위치);
위치를 지정하지 않는 경우, 소수점 0자리에서 반올림





6. NOW

현재 날짜 및 시간을 반환





7. FORMAT

숫자를 천단위 콤마가 있는 형식으로 반환
SELECT FORMAT (포맷을 적용한 문자/숫자, 표시할 소수점 위치);


  • 소수점을 표시하지 않겠다
    SELECT FORMAT (12345.6789, 0);
profile
비전공자의 데이터 공부법
post-custom-banner

0개의 댓글