DBMS/개념정리

[구조] 레코드

xowoony 2022. 9. 29. 19:01

학습일 : 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`가 오면 안 된다.