# mydatabase라는 이름의 데이터베이스 생성
CREATE DATABASE mydatabase;
# 모든 데이터베이스 목록 조회
SHOW DATABASES;
# mydatabase 데이터베이스 사용
USE mydatabase;
# mydatabase 데이터베이스 삭제 (만약 존재하면)
DROP DATABASE IF EXISTS mydatabase;
SELECT * FROM users;SELECT user_id, username, email FROM users;
DISTINCTSELECT DISTINCT age FROM users; : age칸에 중복되는 데이터를 한개남기고 제거AS

ORDER BY나이순으로 오름차순 정렬 = SELECT * FROM users ORDER BY age;
나이순으로 내림차순 정렬 = SELECT * FROM users ORDER BY age DESC;
여러 기준으로 정렬 (ASC: 오름차순, DESC: 내림차순)
SELECT * FROM users ORDER BY age ASC, created DESC;WHERE특정 조건에 맞는 데이터 조회 = SELECT * FROM users WHERE age = 30;
특정 조건 이상 데이터 조회 = SELECT * FROM users WHERE age >= 30;
AND, OR를 사용한 복합 조건
SELECT * FROM users WHERE age = 33 AND name = 'Leo';SELECT * FROM users WHERE age = 33 OR name = 'Leo';NOT을 사용한 부정 조건
SELECT * FROM users WHERE NOT age = 33;BETWEEN을 사용한 범위 지정
SELECT * FROM users WHERE age BETWEEN 20 AND 25;LIMITSELECT * FROM users LIMIT 5;SELECT * FROM users LIMIT 10, 5; UPDATE users
SET username = 'top5_young_people'
WHERE age = 30
LIMIT 5;
# 어린 5명만
GROUP BY CREATE TABLE orders (
order_id INT,
customer VARCHAR(50),
menu VARCHAR(50),
price INT
);
INSERT INTO orders VALUES
(1, '철수', '불고기버거', 5000),
(2, '영희', '치즈버거', 5500),
(3, '철수', '치즈버거', 5500),
(4, '민수', '불고기버거', 5000),
(5, '영희', '콜라', 2000);
# 결과
order_id | customer | menu | price
---------+----------+------------+------
1 | 철수 | 불고기버거 | 5000
2 | 영희 | 치즈버거 | 5500
3 | 철수 | 치즈버거 | 5500
4 | 민수 | 불고기버거 | 5000
5 | 영희 | 콜라 | 2000
SELECT menu, COUNT(*) AS order_count
FROM orders
GROUP BY menu;
# 결과
menu | order_count
-----------+------------
불고기버거 | 2
치즈버거 | 2
콜라 | 1
JOIN
SELECT c.name, o.menu, o.price
FROM customers c
INNER JOIN orders o
ON c.customer_id = o.customer_id;
# 결과
name | menu | price
-----+------------+------
철수 | 불고기버거 | 5000
영희 | 치즈버거 | 5500
철수 | 콜라 | 2000
민수 | 불고기버거 | 5000
SELECT c.name, o.menu, o.price
FROM customers c
LEFT JOIN orders o
ON c.customer_id = o.customer_id;
# 결과
name | menu | price
-----+------------+------
철수 | 불고기버거 | 5000
철수 | 콜라 | 2000
영희 | 치즈버거 | 5500
민수 | 불고기버거 | 5000
(만약 주문 없는 고객 있었다면 → menu, price = NULL)
SELECT c.name, o.menu, o.price
FROM customers c
LEFT JOIN orders o
ON c.customer_id = o.customer_id;



user_id INT PRIMARY KEY,
-- 첫 삽입
INSERT INTO users (user_id, email, name)
VALUES (1, 'hong@test.com', '홍길동');
-- 같은 user_id 중복 → 원래라면 에러
INSERT IGNORE INTO users (user_id, email, name)
VALUES (1, 'hong@test.com', '홍길순');
user_id INT PRIMARY KEY,
-- user_id = 1 인 데이터 삽입
INSERT INTO users (user_id, name, age)
VALUES (1, '홍길동', 25);
-- user_id = 1 을 다시 삽입하려고 하면 충돌 발생 → 대신 UPDATE 실행
INSERT INTO users (user_id, name, age)
VALUES (1, '홍길동', 30)
ON DUPLICATE KEY UPDATE
age = VALUES(age);
user_id INT PRIMARY KEY,
-- user_id = 1 인 데이터 삽입
INSERT INTO users (user_id, name, age)
VALUES (1, '홍길동', 25);
-- user_id = 1 을 다시 삽입하려고 하면 중복이므로 기존 행 삭제 후 새 행 삽입
REPLACE INTO users (user_id, name, age)
VALUES (1, '홍길자',35);
REPLACE INTO users (id, name, age)
VALUES (1, '홍길자', 35);
# 결과
id | name | age
---+--------+----
2 | 홍길자 | 35
UPDATE users
SET username='john', email='john@example.com'
WHERE age=25 ;
SET username='john', email='john@example.com' : username과 email 컬럼을 새로운 값으로 바꾼다.WHERE age=25; : 나이가 25인 행만 수정한다. UPDATE 테이블명 : 업데이트 할 테이블의 이름
SET 컬럼1 = 값1, 컬럼2 = 값2, ... : 업데이트할 칼럼과 새로운 값을 지정
WHERE 조건; : 어떤 레코드를 업데이트할지 결정하는 조건
UPDATE users
SET name = 'John'
WHERE id = 1;
# users 테이블에서 id가 1인 레코드의 이름을 'John'으로 수정
-------------------------------------------------
# 여러 레코드 동시에 업데이트
UPDATE users
SET username = 'senior'
WHERE age >= 60;
# age기준에 해당하는 여러개 수정
CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
...
ELSE 기본값
END
SELECT
name,
score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'F'
END AS grade
FROM students;
SELECT name, role
FROM employees
ORDER BY
CASE
WHEN role = 'Manager' THEN 1
WHEN role = 'Staff' THEN 2
ELSE 3
END;
UPDATE products
SET price = price * 1.1
WHERE category_id IN (SELECT id FROM categories WHERE name ='Electronics');
# 다른 서브쿼리 결과에 따라 업데이트
UPDATE users
SET email = CONCAT(email, '_new')
WHERE email REGEXP '@example\.com$';
# 정규 표현식을 활용하여 업데이트
DELETE e FROM employees AS e
JOIN departments AS d ON e.department_id = d.id
WHERE d.name = 'Marketing';
DELETE FROM employees
USING employees, departments
WHERE employees.department_id = departments.id AND departments.name = 'HR';
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
product VARCHAR(100),
price DECIMAL(10,2),
CONSTRAINT fk_orders_users
FOREIGN KEY (user_id) REFERENCES users(user_id)
ON DELETE RESTRICT
ON UPDATE CASCADE
);

users 테이블에 이렇게 값이 들어가 있다면 orders 테이블의 user_id의 값에는 1이 들어갈 수 없다.
이름 붙이기: CONSTRAINT fk_orders_users
ALTER TABLE orders
DROP FOREIGN KEY fk_orders_users;
# 삭제
ALTER TABLE orders DROP FOREIGN KEY fk_orders_users;
# 다시 추가
ALTER TABLE orders
ADD CONSTRAINT fk_orders_users
FOREIGN KEY (user_id) REFERENCES users(user_id);
ALTER TABLE orders # 자식테이블
ADD CONSTRAINT fk_orders_users # 제약조건이름
FOREIGN KEY (user_id) # 자식 컬럼 REFERENCES users(user_id) # 부모테이블(부모컬럼)
ON DELETE RESTRICT
ON UPDATE CASCADE;