현업 때 약 2년 조금 안되는 기간 동안 SQL을 쓴 적이 있어서,
python보다는 좀 수월하긴 했다. 첫 회사에서 거의 90% 이상 R만 썼으니까.향후에 SQLD, SQLP 등도 도전해 봐야겠다.
-- SQL로 정의
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50),
birth_date DATE
);
타입 | 의미 | 예시 |
---|---|---|
INT |
정수 | 1, 42, -100 |
FLOAT , REAL |
실수 | 3.14, -2.71 |
VARCHAR(n) |
가변 길이 문자열 (최대 n자) | 'Alice', 'abc123' |
CHAR(n) |
고정 길이 문자열 | 'YES' → 'YES ' |
TEXT |
긴 문자열 | 긴 메모나 설명 |
DATE |
날짜 | 2024-12-25 |
TIMESTAMP |
날짜 + 시간 | 2024-12-25 14:23:00 |
BOOLEAN |
참/거짓 | TRUE, FALSE |
# 환경 설정
# !pip3 install pandasql
import os
import pandas as pd
from pandasql import sqldf
# pandasql을 전역 환경으로 지정
mysql = lambda q: sqldf(q, globals())
# 이후 필요한 데이터 불러오기....
# python환경에서 sql사용
# python이니 주석을 '#' 사용하지만 sql에서는 --로 주석처리
mysql("""
SELECT *
FROM bik
limit 10 -- 데이터가 너무 커서 10개만 추출한다고 가정
""")
# 해석 : bik 데이터의 모든 컬럼을 조회하되, row는 10개로 제한
# python환경에서 sql사용
mysql("""
SELECT *
FROM bike
WHERE yr = 2012
limit 10
""")
비교연산자
구분 | 연산자 | 의미 |
---|---|---|
비교연산자 | A = 'value' | A와 'value'는 같다 |
A !=(<>) 'value' | A와 'value'는 같지 않다 | |
A > n | A가 n보다 크다 | |
A >= n | A가 n보다 크거나 같다 | |
A < n | A가 n보다 작다 | |
A <= n | A가 n보다 작거나 같다 |
논리연산자
산술연산자
# 'weekday'에서 %ur%이 들어간 모든 경우 출력
mysql("""
SELECT *
FROM bike
WHERE hr = 0
AND weekday LIKE '%ur%'
""")
mysql("""
SELECT EMPLOYEE_ID as E_ID
FROM EMP
""")
SELECT
name,
score,
IF(score >= 60, '합격', '불합격') AS result
FROM students;
SELECT
name,
score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
WHEN score >= 60 THEN 'D'
ELSE 'F'
END AS grade
FROM students;
SELECT CAST(123 AS VARCHAR) AS string_num;
-- 결과: '123'
SELECT CAST('3.14' AS FLOAT) AS float_num;
SELECT CAST('2024-12-25' AS DATE) AS holiday;
-- 결과: 2024-12-25 (DATE 타입)