DML(데이터 조작어)
1. INSERT(삽입)
INSERT는 테이블에 테이더를 삽입하는 명령어이다.
문법)
INSERT INTO { 테이블명 } ( 컬럼명1, 컬럼명2, ... )
VALUES ('데이터', '데이터', ... );
이때 데이터 배치 순서는 위의 컬럼명 배치 순서대로이다.
INSERT INTO { 테이블명 }
VALUES ( '데이터', '데이터', ... );
이때 데이터 배치 순서는 데이블의 컬럼 순서대로이다.
INSERT INTO board (b_mid, b_title, b_content, b_date)
VALUES ('test01', '그냥..', '아무거나', '2022-09-30');
INSERT INTO board
VALUES (null, 'jun01', '그냥2..', null, '2022-09-30');
2. UPDATE(수정)
UPDATE는 테이블에 삽입된 데이터를 수정하는 명령어이다. 컬럼 단위로 수정할 수 있으며, 행을 선택하는 조건이 없는 경우 모든 행을 수정한다.
문법)
UPDATE { 테이블명 }
SET 컬럼명1 = 변경데이터[, 컬럼명2 = 변경데이터, ...]
[WHERE 조건];
* WHERE절 : 조건을 지정할 때 사용하는 명령어절로, 이 절에 설정된 조건에 따라 맞는 행만 선별한다.
UPDATE board
SET b_date = '2022-09-29'
WHERE b_no = 3;
3. DELETE(삭제)
DELETE는 테입르에서 데이터를 삭제하는 명령어이다. 행단위로 수행하며 조건이 없을 경우 모든 행을 삭제한다.
문법)
DELETE FROM { 테이블명 }
[ WHERE 조건 ];
DELETE FROM board
WHERE b_no = 4;
DELETE FROM board
WHERE b_date = '2022-09-30';
DELETE FROM board
WHERE b_mid = 'jun01';
4. SELECT(선색, 읽어오기)
DQL(Data Query Language, 데이터 질의어)로 분류되기도 하는 SELECT는 테이블의 데이터를 검색하는 명렁어이다. 행단위로 처리하면 결과에 대한 컬럼을 지정할 수 있다.
문법)
SELECT [DISTINCT] { *, 컬럼명 [별칭], 컬럼명 [별칭], ... }
FROM { 테이블명 }
[WHERE 조건]
[ORDER BY { 컬럼명 } [ASC|DESC];
* DISTINCT : 결과 데이터의 중복을 제거 (대상은 1개의 컬럼) => * = 모든 컬럼
* ORDER BY : 특정 컬럼의 데이터로 결과행들을 정렬 => ASC = 오름차순 정렬 / DESC = 내림차순 정렬
SELECT m_id, m_name, m_age
FROM member
WHERE m_age >= 25
ORDER BY m_age DESC; -- ASC는 생략 가능
WHERE절의 연산자
1. 비교연산자
종류)
=, !=. >, <, >=, <=
* '=' 연산자의 차이(Java와 SQL)
- Java의 같다 : ==
- SQL의 같다 : = (WHERE절에서만 사용)
- Java의 대입 : =
- SQL의 대입 : = (UPDATE의 SET절에서만 사용)
-- 고용일 1992년부터 1995년 사이인 사원의 사번과 이름 검색
SELECT emp_no, first_name, last_name, hire_date
FROM employees
WHERE hire_date >= '1992-01-01'
AND hire_date <= '1995-12-31'
ORDER BY hire_date ASC, first_name DESC, last_name ASC
;
2. 논리연산자
종류)
AND, OR, NOT
BETWEEN a AND b : a와 b 사이의 범위 지정
IN (list) : list에서 찾고자 하는 조건값의 목록을 작성
=> NOT을 조합하여 반대 경우의 조건을 작성할 수 있음
-- 고용일 1992년부터 1995년 사이인 사원의 사번과 이름 검색
SELECT emp_no, first_name, last_name, hire_date
FROM employees
WHERE hire_date BETWEEN '1992-01-01'
AND '1995-12-31'
ORDER BY hire_date DESC
;
-- to_date가 '9999-01-01'이면 현재의 급여
SELECT emp_no, salary
FROM salaries
WHERE to_date LIKE '9999%'
;
-- 이름이 'Mark' 이거나 'Elvis' 이거나 'Ohad'인 사원의 사번과 생일을 구하시오.
SELECT emp_no, first_name, birth_date
FROM employees
WHERE first_name = 'Mark'
OR first_name = 'Elvis'
OR first_name = 'Ohad'
;
-- IN 연산자 = 복합적 or 연산
SELECT emp_no, first_name, birth_date
FROM employees
WHERE first_name IN ('Mark','Elvis','Ohad')
;
3. 문자열 검색 연산자
종류)
LIKE : 컬럼의 데이터를 문자열로 검색
* 모르는 부분에 대한 처리를 위한 특수 문자
- % : 여러 글자를 대체하여 표현(대체하는 글자의 수는 0개부터)
LIKE '%대%'; => '대'가 포함된 데이터
- _ : 한 글자를 대체하여 표현
LIKE '_대'; => 두 번째 글자가 '대'인 두 글자의 단어를 검색
ex) 3번째 글자가 '대'인 경우의 검색 = LIKE '__대'
전체 글자의 개수는 모르고 3번째 글자가 '대'일 경우 검색 = LIKE '__대%'
SELECT emp_no, first_name
FROM employees
WHERE BINARY first_name LIKE '%A%';
* BINARY : 대소문자를 구분하여 검색 결과를 구할 때 사용한다. 검색 시 WHERE절에서 컬럼명 앞에 추가한다. 테이블 생성 시에는 type 다음에 BINARY를 추가한다. ex) m_id VARCHAR(10) BINARY NOT NULL
4. NULL 관련 연산자
종류)
IS NULL : 컬럼의 데이터가 NULL인 행을 검색
IS NOT NULL : 컬럼의 데이터가 NULL이 아닌 행을 검색
SELECT emp_no, first_name, birth_date
FROM employees
WHERE first_name = 'Mark'
OR first_name = 'Elvis'
OR first_name = 'Ohad';
SELECT emp_no, first_name, birth_date
FROM employees
WHERE first_name IN ('Mark','Elvis','Ohad');
* 출력 개수 제한 LIMIT n[ , m ]
=> n 단독 : 0부터 n - 1번까지의 행 조회
=> n과 m의 경우, n : 조회할 행의 시작 번호 / m : 조회할 행의 개수
-- 출력 개수 제한 LIMIT
SELECT *
FROM employees
LIMIT 10
;
SELECT *
FROM employees
WHERE gender = 'F'
ORDER BY first_name
LIMIT 0, 10
;