SELECT · INSERT · UPDATE · DELETE
모든 데이터 조작은 이 4 가지로 압축됩니다. 본 과정의 게시판도 SQL 책 한 권 안 보고 이 4 개로 만듭니다.
| 동작 | SQL |
|---|---|
| 조회 | SELECT |
| 추가 | INSERT |
| 수정 | UPDATE |
| 삭제 | DELETE |
-- 모든 회원 조회
SELECT * FROM mymember;
-- 특정 컬럼만
SELECT id FROM mymember;
-- 조건
SELECT * FROM mymember WHERE id = 'hong';
-- 여러 조건
SELECT * FROM myboard WHERE writer = 'hong' AND num > 1;
-- 정렬
SELECT * FROM myboard ORDER BY num DESC;
-- 개수 제한
SELECT * FROM myboard ORDER BY num DESC LIMIT 10;
-- 개수 세기
SELECT COUNT(*) FROM myboard;
-- 회원 (모든 컬럼 직접 지정)
INSERT INTO mymember (id, pwd)
VALUES ('hong', 'temp1234');
-- 게시글 (PK num 은 AUTO_INCREMENT 라 생략)
INSERT INTO myboard (title, writer, content)
VALUES ('첫 글', 'hong', '안녕하세요');
-- 여러 행 한 번에
INSERT INTO mymember (id, pwd) VALUES
('kim', 'temp1234'),
('lee', 'temp1234'),
('park', 'temp1234');
👉 AUTO_INCREMENT 컬럼(num)은 안 적으면 자동 부여됨.
-- 한 행 수정
UPDATE mymember
SET pwd = 'newpw'
WHERE id = 'hong';
-- 여러 컬럼
UPDATE myboard
SET title = '수정된 제목', content = '수정된 본문'
WHERE num = 3;
UPDATE mymember SET pwd = '???';
→ 모든 회원의 비밀번호가 ??? 로. 실무에서 가장 무서운 실수.
-- 한 행
DELETE FROM mymember WHERE id = 'hong';
-- 여러 조건
DELETE FROM myboard
WHERE writer = 'hong' AND num > 100;
DELETE FROM mymember;
→ 모든 회원 삭제. 복구 불가능. WHERE 가 절대 빠지면 안 됨.
| 조건 | 의미 |
|---|---|
= != | 같음 / 다름 |
> < >= <= | 크기 비교 |
AND OR | 조건 결합 |
IN (a, b, c) | 여럿 중 하나 |
BETWEEN x AND y | 범위 |
LIKE '%검색%' | 문자열 포함 |
IS NULL IS NOT NULL | NULL 검사 |
-- 게시글 + 작성자 (myboard.writer = mymember.id)
SELECT b.num, b.title, b.writer
FROM myboard b
INNER JOIN mymember m ON b.writer = m.id
ORDER BY b.num DESC;
| JOIN | 의미 |
|---|---|
| INNER JOIN | 양쪽 모두 매칭되는 행만 ⭐ 가장 많이 씀 |
| LEFT JOIN | 왼쪽 테이블 모든 행 + 매칭되는 오른쪽 |
| RIGHT JOIN | 오른쪽 테이블 모든 행 + 매칭되는 왼쪽 |
👉 본 과정에서는 INNER JOIN 만으로 거의 충분.
👉 위 순서로 실행. SQL 작성도 이 순서로.
-- 게시글 목록 (최신순)
SELECT num, title, writer, content
FROM myboard
ORDER BY num DESC;
-- 페이징 (한 페이지 10 개, 2 페이지)
SELECT num, title, writer, content
FROM myboard
ORDER BY num DESC LIMIT 10 OFFSET 10;
-- 검색
SELECT * FROM myboard WHERE title LIKE '%spring%';
-- 본인 글 개수
SELECT COUNT(*) FROM myboard WHERE writer = #{writer};
-- 게시글 + 작성자 매칭 확인 (JOIN)
SELECT b.num, b.title, b.writer
FROM myboard b
INNER JOIN mymember m ON b.writer = m.id
ORDER BY b.num DESC;
| 실수 | 결과 |
|---|---|
| UPDATE 에 WHERE 누락 | 전체 행 수정 (재앙) |
| DELETE 에 WHERE 누락 | 전체 삭제 (재앙) |
| JOIN 에 ON 빠뜨림 | 카티전 곱 (모든 조합) |
| 컬럼명 잘못 | "Unknown column" 에러 |
| 따옴표 중첩 | SQL 문법 오류 |
DB 의 구조는 안다. SQL 은 들어본 정도.
CRUD 4 명령 + JOIN 으로 게시판 SQL 80% 를 직접 짠다.