MySQL 실습(1)

조재민·2025년 5월 26일
post-thumbnail

실습용 테이블 구조 생성

DATABASE 생성

CREATE DATABASE practicemysql;

테이블 생성

CREATE TABLE customers (
	customer_id INT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100),
    signup_date DATE,
    gendera ENUM('M', 'F'),
    age INT
    );

CREATE TABLE ordere (
	order_id INT PRIMARY KEY,
    customer_id INT,
    product_name VARCHAR(100),
    quantity INT,
    total_price DECIMAL(10,2),
    order_date DATE,
    status ENUM('comleted', 'cancelled', 'pending'),
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
    );

샘플 데이터 삽입

INSERT INTO customers VALUES
(1, 'Alice', 'alice@example.com', '2023-01-10', 'F', 27),
(2, 'Bob', 'bob@example.com', '2023-02-15', 'M', 35),
(3, 'Charlie', 'charlie@example.com', '2023-03-20', 'M', 42),
(4, 'Diana', 'diana@example.com', '2023-01-25', 'F', 29)
;

INSERT INTO orders VALUES
(1001, 1, 'Protein Bar', 3, 15.00, '2023-04-01', 'completed'),
(1002, 2, 'Oatmeal Cookie', 2, 10.00, '2023-04-02', 'completed'),
(1003, 1, 'Vegan Snack', 5, 25.00, '2023-04-05', 'cancelled'),
(1004, 3, 'Granola Pack', 1, 8.00, '2023-04-06', 'completed'),
(1005, 4, 'Protein Bar', 2, 10.00, '2023-04-07', 'pending')
;

조건 필터링

<여성 고객만 조회>
SELECT * FROM customers WHERE gender = 'F';

<가격이 10 이상인 주문만 조회>
SELECT * FROM orders WHERE total_price >= 10;

정렬과 제한

<가격이 높은 순으로 주문 정렬>
SELECT * FROM orders ORDER BY total_price DESC;

<가장 최근 주문 2건만 조회>
SELECT * FROM orders ORDER BY order_date DESC LIMIT 2;

문자열/숫자 처리

<고객 이름과 이메일을 합쳐서 보여주기>
SELECT name, CONCAT(name, ' <', email, '>') AS contact_info FROM customers;

<이메일 주소에서 도메인만 추출>
SELECT email, SUBSTRING_INDEX(email, '@', -1) AS domain FROM customers;

조건 분기 처리

<주문 상태별로 메시지 표시>
SELECT order_id, status,
  CASE
    WHEN status = 'completed' THEN '배송 완료'
    WHEN status = 'cancelled' THEN '취소됨'
    ELSE '처리 중'
  END AS status_message
FROM orders;

profile
“누군가는 너를 사랑하고 있다.”

0개의 댓글