본문 바로가기
공부/데이터베이스

sql 기본 문법 정리

by 라이티아 2025. 12. 11.
drop table if exists testtbl;

create table testtbl
(
	id int auto_increment,
    name varchar(10),
    in_date date
);

테이블 생성

 

select id, name, in_date from testtbl
join 연결 테이블 a on a column = b column
where 조건
group by 그룹 기준 column
order by 정렬 기준 desc/asc
limit 제한수;

테이블 조회

 

SELECT
    review_id,
    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 review;

select 조회시 조건 검색

 

INSERT INTO review (
    user_id,
    product_id,
    score,
    comment,
    created_at
)
VALUES (
    p_user_id,
    p_product_id,
    p_score,
    p_comment,
    CURDATE()
);

insert 문법

update testtbl
set name = change_name
where 조건;

테이블 업데이트

 

alter table testtbl
	add column extra_colume int;
    
alter table testtbl
	modify extra_colume char(10);

alter table testtbl
	drop column extra_column;

테이블 수정

 

delimiter $$
create function testfunc(test_int int)
returns int
deterministic
begin
	if test_int / 4 < 2 then
		return 1;
	else
		return 0;
	end if;
end $$
delimiter ;

스토어드 함수

 

delimiter $$
create procedure testproc(test_int int, test_char char(1))
main:begin
	if test_int / 2 = 0 then
		select '짝수';
        leave main;
	elseif not exists (select 1 from testtbl where name = test_char) then
		select '찾는 이름 없음';
        leave main;
	end if;
end $$
delimiter ;

스토어드 프로시저

 

delimiter $$
create trigger test_trigger
	before/after update/insert/delete on testtbl
    for each row
begin
	-- [핵심] NEW와 OLD
    -- INSERT 시: NEW.컬럼명 (들어온 값)
    -- UPDATE 시: NEW.컬럼명 (새 값), OLD.컬럼명 (옛날 값)
    -- DELETE 시: OLD.컬럼명 (지워진 값)
    
    UPDATE 다른테이블
    SET 카운트 = 카운트 + 1
    WHERE ID = NEW.ID; -- [주의] WHERE 조건 필수!
end $$
delimiter ;

트리거

 

import pymysql

# 1. 연결
conn = pymysql.connect(host='localhost', user='root', password='...', db='...', charset='utf8')
cur = conn.cursor()

# 2. SQL 준비 (%s 사용)
sql = "SELECT * FROM question WHERE question_id = %s"

# 3. 실행 (튜플로 전달)
input_id = 1
cur.execute(sql, (input_id,)) 

# 4. 결과 받기
rows = cur.fetchall() # 전체 다 가져오기

# 5. 출력 (f-string 포맷팅)
for row in rows:
    print(f"{row[0]:<10} {row[1]}")

# 만약 insert 같은것이 있다면
conn.commit()
# 6. 마무리
conn.close()

pymysql 사용