데이터 조작 기본 문법
SELECT (데이터 조회)
# 모든 컬럼 조회
SELECT * FROM 테이블명;
# 특정 컬럼만 조회
SELECT 컬럼1, 컬럼2, ... FROM 테이블명;
# 조건부 조회
SELECT * FROM 테이블명 WHERE 조건;
# 정렬
SELECT * FROM 테이블명 ORDER BY 컬럼명 [ASC|DESC];
# 개수 제한
SELECT * FROM 테이블명 LIMIT 개수;
INSERT (데이터 삽입)
# 모든 컬럼에 데이터 삽입
INSERT INTO 테이블명 VALUES (값1, 값2, 값3, ...);
UPDATE (데이터 수정)
# 단일 컬럼 수정
UPDATE 테이블명 SET 컬럼명 = 값 WHERE 조건;
# 여러 컬럼 동시 수정
UPDATE 테이블명
SET 컬럼1 = 값1, 컬럼2 = 값2, ...
WHERE 조건;
# 조건 없이 모든 행 수정 (주의!)
UPDATE 테이블명 SET 컬럼명 = 값;
DELETE (데이터 삭제)
# 조건에 맞는 행 삭제
DELETE FROM 테이블명 WHERE 조건;
# 모든 데이터 삭제 (주의!)
DELETE FROM 테이블명;
# 테이블 구조는 유지하고 데이터만 삭제
TRUNCATE TABLE 테이블명;
WHERE 절 조건 연산자
# 비교 연산자
WHERE 컬럼명 = 값 # 같음
WHERE 컬럼명 != 값 # 같지 않음
WHERE 컬럼명 <> 값 # 같지 않음 (위와 동일)
WHERE 컬럼명 > 값 # 큼
WHERE 컬럼명 >= 값 # 크거나 같음
WHERE 컬럼명 < 값 # 작음
WHERE 컬럼명 <= 값 # 작거나 같음
# 논리 연산자
WHERE 조건1 AND 조건2 # 둘 다 만족
WHERE 조건1 OR 조건2 # 하나라도 만족
WHERE NOT 조건 # 조건 불만족
# 범위 검색
WHERE 컬럼명 BETWEEN 값1 AND 값2
WHERE 컬럼명 IN (값1, 값2, 값3, ...)
WHERE 컬럼명 NOT IN (값1, 값2, ...)
# 패턴 검색
WHERE 컬럼명 LIKE '패턴' # % (여러 문자), _ (한 문자)
WHERE 컬럼명 NOT LIKE '패턴'
# NULL 검색
WHERE 컬럼명 IS NULL
WHERE 컬럼명 IS NOT NULL
실전 예제
1. person 테이블 생성
먼저 예제를 위한 person 테이블을 생성합니다.
CREATE TABLE person (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
sex CHAR(1)
);
2. 데이터 삽입 및 확인
문제: person 테이블에 다음의 데이터를 추가하고 확인하세요.
- ID: 2, NAME: 이미자, AGE: 28, SEX: F
- ID: 3, NAME: 유재석, AGE: 50, SEX: F
# 데이터 삽입
INSERT INTO person (id, name, age, sex) VALUES
(2, '이미자', 28, 'F'),
(3, '유재석', 50, 'F');
# 데이터 확인
SELECT * FROM person;
결과:
+----+--------+------+------+
| id | name | age | sex |
+----+--------+------+------+
| 2 | 이미자 | 28 | F |
| 3 | 유재석 | 50 | F |
+----+--------+------+------+
3. 조건부 조회
문제 1: person 테이블에서 나이가 50세인 데이터를 조회하세요.
SELECT * FROM person WHERE age = 50;
결과:
+----+--------+------+------+
| id | name | age | sex |
+----+--------+------+------+
| 3 | 유재석 | 50 | F |
+----+--------+------+------+
문제 2: person 테이블에서 성별이 여자인 데이터를 조회하세요.
SELECT * FROM person WHERE sex = 'F';
결과:
+----+--------+------+------+
| id | name | age | sex |
+----+--------+------+------+
| 2 | 이미자 | 28 | F |
| 3 | 유재석 | 50 | F |
+----+--------+------+------+
4. 데이터 수정
문제 1: person 테이블에서 유재석의 성별을 남자(M)로 수정하고 확인하세요.
# 데이터 수정
UPDATE person SET sex = 'M' WHERE name = '유재석';
# 수정 결과 확인
SELECT * FROM person WHERE name = '유재석';
결과:
+----+--------+------+------+
| id | name | age | sex |
+----+--------+------+------+
| 3 | 유재석 | 50 | M |
+----+--------+------+------+
문제 2: person 테이블에서 ID가 2번의 이름을 이미주로 수정하고 확인하세요.
# 데이터 수정
UPDATE person SET name = '이미주' WHERE id = 2;
# 수정 결과 확인
SELECT * FROM person WHERE id = 2;
결과:
+----+--------+------+------+
| id | name | age | sex |
+----+--------+------+------+
| 2 | 이미주 | 28 | F |
+----+--------+------+------+
전체 데이터 확인:
SELECT * FROM person;
결과:
+----+--------+------+------+
| id | name | age | sex |
+----+--------+------+------+
| 2 | 이미주 | 28 | F |
| 3 | 유재석 | 50 | M |
+----+--------+------+------+
5. 데이터 삭제
문제 1: person 테이블에서 성별이 여자인 데이터를 삭제하고 확인하세요.
# 데이터 삭제
DELETE FROM person WHERE sex = 'F';
# 삭제 결과 확인
SELECT * FROM person;
결과:
+----+--------+------+------+
| id | name | age | sex |
+----+--------+------+------+
| 3 | 유재석 | 50 | M |
+----+--------+------+------+
문제 2: person 테이블의 모든 데이터를 삭제하고 확인하세요.
# 모든 데이터 삭제
DELETE FROM person;
# 삭제 결과 확인
SELECT * FROM person;
결과:
Empty set (0.00 sec)
테이블 구조는 유지되고 데이터만 삭제되었는지 확인:
DESC person;
결과:
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | PRI | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
추가 예제
여러 조건 사용
# 나이가 30 이상이고 성별이 남자인 데이터 조회
SELECT * FROM person WHERE age >= 30 AND sex = 'M';
# 나이가 20대이거나 50대인 데이터 조회
SELECT * FROM person WHERE (age >= 20 AND age < 30) OR (age >= 50 AND age < 60);
# 이름이 '이'로 시작하는 데이터 조회
SELECT * FROM person WHERE name LIKE '이%';
# ID가 1, 2, 3 중 하나인 데이터 조회
SELECT * FROM person WHERE id IN (1, 2, 3);
정렬 및 제한
# 나이순으로 정렬 (오름차순)
SELECT * FROM person ORDER BY age ASC;
# 나이순으로 정렬 (내림차순)
SELECT * FROM person ORDER BY age DESC;
# 나이순으로 정렬 후 상위 3개만 조회
SELECT * FROM person ORDER BY age DESC LIMIT 3;
# 여러 컬럼으로 정렬 (나이 먼저, 같으면 이름순)
SELECT * FROM person ORDER BY age ASC, name ASC;
특정 컬럼만 조회
# 이름과 나이만 조회
SELECT name, age FROM person;
# 컬럼에 별칭(alias) 사용
SELECT name AS 이름, age AS 나이 FROM person;
SELECT name 이름, age 나이 FROM person; # AS 생략 가능
집계 함수
# 전체 행 개수
SELECT COUNT(*) FROM person;
# 평균 나이
SELECT AVG(age) FROM person;
# 최대 나이
SELECT MAX(age) FROM person;
# 최소 나이
SELECT MIN(age) FROM person;
# 나이 합계
SELECT SUM(age) FROM person;
주의사항
- WHERE 절 필수: UPDATE와 DELETE 문에서 WHERE 절을 생략하면 모든 행이 수정/삭제됨
- 트랜잭션: 중요한 데이터 조작 전에는 트랜잭션을 사용하여 롤백 가능하도록 준비
- 데이터 확인: UPDATE나 DELETE 실행 전에 SELECT로 조건 확인 권장
- 문자열 비교: 문자열 비교 시 대소문자 구분 여부는 데이터베이스 설정에 따라 다름
- NULL 처리: NULL 값 비교 시
=대신IS NULL또는IS NOT NULL사용 - LIKE 패턴:
%는 0개 이상의 문자,_는 정확히 1개의 문자를 의미 - DELETE vs TRUNCATE:
DELETE: 조건부 삭제 가능, 트랜잭션 로그 기록, 느림TRUNCATE: 모든 데이터 삭제, 트랜잭션 로그 기록 안 함, 빠름, AUTO_INCREMENT 초기화
- 성능: 대용량 데이터 조작 시 인덱스 활용 및 조건 최적화 고려
- 백업: 중요한 데이터 수정/삭제 전 백업 필수