[구조] 레코드
학습일 : 2022. 09. 28
2022. 10. 04
레코드
C : 삽입하기
어떠한 테이블에 레코드를 삽입하기 위해 아래와 같이 명령한다.
INSERT INTO `스키마`.`테이블` (`열 이름`,...) VALUES (값,...),...;
값을 삽입할 때에는 테이블이 가지고 있는 열의 순서와 무관하게 테이블 이름 뒤 괄호 안에 명시하는 순서대로 값이 삽입된다.
`VALUES` 뒤에 오는 괄호 세트 하나는 하나의 레코드를 의미하며 콤마로 구분하여 한 쿼리에 여러 레코드를 삽입할 수 있다.
명시한 (`열 이름`,...)의 순서와 (`값`, ...)의 순서가 반드시 일치해야 한다.
R : 선택하기
어떠한 테이블에 존재하는 레코드를 선택(조회)하기 위해 아래와 같이 명령한다.
SELECT [`열` 혹은 값 [AS `별명`]?],...
FROM `스키마`.`테이블` AS `별명`
[[LEFT|RIGHT|FULL OUTER|INNER] JOIN `대상 스키마`.`대상 테이블` AS `별명` ON `조건`]?...
[WHERE 조건]?
[GROUP BY [`열 이름`,...]]?
[ORDER BY [`열 이름` ASC|DESC],...]?
[LIMIT 개수 OFFSET 개수]?;
선택하고자 하는 테이블에 있는 열을 콤마를 이용하여 여러개 정의할 수 있다. 이 때 테이블에 존재하는 열의 순서와 관계 없이 `SELECT` 뒤에 적는 순서가 유의미하다.
열을 명시하지 않고 선택하는 테이블에 존재하는 모든 열을 사용코자 할 때 별표(`*`)로 대신할 수 있다. (대신 별명을 못지어서 자바랑 연동할 때 힘듬)
열이 아니더라도 리터럴 값을 명시할 수 있는데, 리터럴 값은 그 값이 선택되는 레코드의 개수 만큼 반복된다.
열 혹은 값에 대해 함수를 사용할 수 있다.
JOIN은 현재 SELECT 하는 대상이 되는 테이블이 가지고 있지 않은 정보를 다른 외부 테이블에서 가져오기 위해 사용한다.
OUTER JOIN | LEFT JOIN : JOIN 키워드 기준 왼쪽에 있는 테이블(SELECT 대상이 되는 테이블)을 기준으로 한다. RIGHT JOIN : JOIN 키워드 기준 오른쪽에 있는 테이블(JOIN 대상이 되는 테이블)을 기준으로 한다. FULL (OUTER) JOIN : 생략 (성능 문제로 안씀) |
INNER JOIN | SELECT 대상이 되는 테이블과 JOIN 대상이 되는 테이블 둘을 기준으로 한다. |
CROSS JOIN | 생략(성능 문제로 안씀) |
GROUP BY는 통계함수 사용시 통합시킬 기준 값을 가지는 열(들)이다. 명시하지 않는다면 결과상의 모든 레코드를 통합한다.
ORDER BY는 `[열 이름 ASC|DESC]`로 구성된 정렬 기준을 콤마로 구분하여 여러개 지정할 수 있으며,
가장 앞에 나오는 기준을 최우선으로 한다.
여기서 `ASC`는 Ascending(오름차순)이고 `DESC`는 Descending(내림차순) 정렬이다.
정렬 순서 생략시 `ASC`를 사용한다.
LIMIT x는 SELECT에 의해 선택될 레코드의 개수를 제한한다.
OFFSET x 는 제한되지 않는 상태에서의 SELECT 결과 상에서 생략할 레코드의 개수를 지정한다.
★★★★★ <페이징 공식>★★★★★ 한 페이지에 표시할 게시글의 개수[n] : 10 요청한 페이지[p] - 2페이지 부터 보고 싶을 때 p에 2를 넣으면 됨 LIMIT n OFFSET (p - 1) * n (암기) |
U : 수정하기
어떠한 테이블에 존재하는 레코드가 가진 값을 열 별로 수정하기 위해 아래와 같이 명령한다.
UPDATE `스키마`.`테이블`
SET [`열 이름` = 변경할 값],...
[WHERE 조건]?
[LIMIT 개수]? ;
`UPDATE` 키워드는 대상이 되는 테이블에 존재하는 레코드를 기본적으로 모두 수정하려 한다. 하지만 DBMS에 기본적으로 안전 장치가 있음으로 작동하지 않는다.
`SET` 키워드 뒤에는 [`열 이름` = `값`] 쌍을 콤마로 구분하여 수정할 열과 값을 여러개 지정할 수 있다.
이 때 수정하고자 하는 레코드를 `WHERE` 조건을 이용하여 제한할 수 있다.
마찬가지로, 조건 유무와 관계 없이 수정되는 레코드의 개수 자체를 `LIMIT` 키워드를 이용하여 제한할 수 있다.
`WHERE`와 `LIMIT`는 선택 사항이지만 그 순서는 반드시 지켜야 한다. 즉, `LIMIT`가 먼저오고 뒤에 `WHERE`가 오면 안 된다.
D : 삭제하기
어떠한 테이블에 존재하는 레코드를 삭제하기 위해 아래와 같이 명령한다.
DELETE
FROM `스키마`.`테이블`
[WHERE 조건]?
[LIMIT 개수]?;
`DELETE` 키워드는 대상이 되는 테이블에 존재하는 레코드를 기본적으로 모두 삭제하려 한다. 하지만 DBMS에 기본적으로 안전 장치가 있음으로 작동하지 않는다.
이 때 삭제 하고자 하는 레코드를 `WHERE` 조건을 이용하여 제한할 수 있다.
마찬가지로, 조건 유무와 관계 없이 삭제되는 레코드의 개수 자체를 `LIMIT` 키워드를 이용하여 제한할 수 있다.
`WHERE`와 `LIMIT`는 선택 사항이지만 그 순서는 반드시 지켜야 한다. 즉, `LIMIT`가 먼저오고 뒤에 `WHERE`가 오면 안 된다.