본문 바로가기

공부일지 #14 | MySQL 시작: SELECT · 함수 · Python 연동

@studying:)2025. 8. 1. 17:47

학습 날짜: 2025.07.31


오늘부터는 SQL을 공부한다. 우선 MySQL을 설치하고, 문법 종류 및 작성법 부터 가장 기초적인 table 만들기와 select 문을 사용해보았다.

 

MySQL

🔧 SQL 문법 종류

분류 설명
DDL Data Definition Language (데이터 정의어)
테이블, 인덱스, 뷰 등의 구조를 정의할 때 사용
예시: CREATE, DROP, ALTER
DML Data Manipulation Language (데이터 조작어)
테이블에 데이터를 삽입, 수정, 삭제, 조회할 때 사용
예시: INSERT, UPDATE, DELETE, SELECT
DCL Data Control Language (데이터 제어어)
사용자 권한을 부여하거나 회수할 때 사용
예시: GRANT, REVOKE
TCL Transaction Control Language (트랜잭션 제어어)
데이터 변경을 하나의 작업 단위로 관리할 때 사용
예시: COMMIT, ROLLBACK, SAVEPOINT

 

🔨 SQL 작성 순서 및 처리순서

나의 첫 SQL 수업 38페이지

 

Schemas 만들기

  • 이름 설정
  • Charset을 utf8mb4로 설정
  • Collation을 utf8mb4_bin으로 설정
  • utf8mb4: 영어, 한글, 숫자, 임티도 가능

 

테이블 생성

  • Schema 생성 후 → Table 우클릭 → create table 선택
    • 아래와 같이 열 이름과 속성 정해주고, Apply 누르면 끝!
열 속성 특징
속성 이름 설명
PK Primary Key 테이블에서 각 행을 고유하게 식별하는 컬럼중복 불가, NULL 불가 (→ 항상 NN과 함께 사용됨)자동으로 인덱스 생성
UQ Unique 중복 불가자주 조회하는 컬럼에 사용자동으로 Unique 인덱스 생성
AI Auto Increment 자동 증가INT형 컬럼에 사용일반적으로 PK 컬럼에 적용
NN Not Null NULL 값을 허용하지 않음
  • 코드로 테이블 생성하기
-- table 생성
Create table staff(
employee_id varchar(10),
employee_name varchar(10),
gender varchar(5),
birth_date date,
department_id varchar(20),
position varchar(20)
)

-- insert value
Insert into staff value("A001", "권지수", "F", "1988-02-03", "HR팀", "과장");
Insert into staff value("A002", "이철희", "M", "1995-10-23", "HR팀", "사원");
Insert into staff value("A003", "김미나", "F", "1997-11-08", "마케팅팀", "대리");
Insert into staff value("A004", "신승민", "M", "2000-03-03", "마케팅팀", "사원");

 

Select문

  • 기능적인 명령어로는 *(all), Alias(as), Distinct가 있다. 
  • as는 별칭 설정, distinct는 중복제거 기능이다.
--select문 형식
Select * from staff;

select employee_id, employee_name, birth_date
From staff;

-- AlIAS(as)
-- select column name as nickname from table name
select employee_id as id
from staff;

select employee_id, birth_date as dob from staff;

-- select Distinct column name form table name -> 중복값 제거
select distinct gender
from staff;

 

SQL 함수

  • 여기에서는 built-in으로 갖고 있는 함수를 의미한다.

문자열함수

문자 데이터와 관련한 함수이며, 주로 사용하는 함수는 substring, length(len), replace, ifnull(isnull)이 있다.

-- SUBSTRING: 문자열 중간 N번째 자리부터 지정한 개수만큼 문자를 가져옴
select product_id, substring(product_id, 6, 2) as 함수적용결과
from apparel_product_info;

-- Len -> Length: 문자열 길이를 구함
select category1, category2, concat(category1, '>', category2) as 함수적용결과
from apparel_product_info;

-- REPLACE: 특정 문자를 찾아 다른 문자로 변경
select product_id, Replace(product_id, 'F', 'A') as 함수적용결과
from apparel_product_info;

-- ISNULL -> IFNULL: 문자열 값이 Null값인 경우 특정 문자로 보여줌
SELECT category2, IFNULL(category2, '정보없음') as 함수적용결과
FROM apparel_product_info;

 

숫자함수

숫자 데이터와 관련한 함수이며, 주로 사용하는 함수는 abs(절댓값), ceiling(올림), floor(버림), round(반올림)이다.

-- ABS
select sales_amount, abs(sales_amount) as 함수적용결과 from sales;

-- CEILING
select sales_amount_usd, ceiling(sales_amount_usd) as 함수적용결과
from sales;

-- FlOOR
select sales_amount_usd, floor(sales_amount_usd) as 함수적용결과
from sales;

-- ROUND
select sales_amount_usd
, Round(sales_amount_usd, 1) as 함수적용결과1
, Round(sales_amount_usd, 0) as 함수적용결과2
, Round(sales_amount_usd, -1) as 함수적용결과3
from sales;

 

기타 문법

  • - - : 코드 앞에 넣으면 주석 처리를 의미
  • /*     */: 범위 주석
  • * :  all 을 의미
  • date type 형식: YYYY-MM-DD

 

Python과 MySQL 연동 실습 (with PyCharm)

PyCharm에서 MySQL과 연동하여 테이블을 생성하고 데이터를 수정하는 실습을 진행했다. 

 

1. Terminal에 Python에서 MySQL 서버와 연결하기 위한 라이브러리를 설치

pip install mysql-connector-python

 

2. 패키지 import

import mysql.connector

 

3.MySQL 서버에 연결

  • mysql.connector 의 connect함수를 이용해 연결할 MySQL을 정보를 가져온다.
  • 이때, MySQL의 기본 포트 번호는 3306 이다.
conn = mysql.connector.connect(
        host = "127.0.0.1", # or "localhost",
        port = 3306,
        user = "root",
        password = "0000",
        database = "igrowth"
    )

 

4. Cursor 객체 생성 (파일 핸들러 역할)

cursor = conn.cursor()

 

5. SQL 실행 및 결과 조회

  •  execute()로 SQL 명령을 실행하고, fetchall()로 결과 전체를 가져온다.
# read
strSQL = "select * from staff"
cursor.execute(strSQL) # 바로 날라가 실행되는 것은 아님. 실행 준비 정도로 생각하면 됨

# 결과 가져오기(select된 결과를 list로 가져옴)
rows = cursor.fetchall() # list로 가져옴

 

6. 데이터 수정 및 반영

  • execute()와 commit() 실행하여 수정사항을 반영한다.
  • commit()을 생략하면 변경 사항이 DB에 저장되지 않는다.
 # write (recent)
 strSQL = "insert into apparel_product_info (product_id, category1, category2, product_name, price) "
 strSQL += "Values (%s, %s, %s, %s, %s)" 
 values = ('JK_23FW_08', '아우터','재킷','레드 시퀀스 재킷', 20000)
 cursor.execute(strSQL, values) # 실행 준비
 conn.commit() # 반영하기

 

studying:)
@studying:) :: what i studied

studying:) 님의 학습 여정을 기록하는 블로그입니다.

목차