CREATE TABLE 직후에는 아무런 행도 없는 상태이다. 그 후에 INSERT를 사용해서 DB를 삽입한다
INSERT INTO 테이블이름 VALUES (값1, 값2, 값3, ...);
INSERT를 실행할 떄에는 NOT NULL
이 걸린 필드나 외래키 참조 상황인 필드를 고려해서 INSERT
를 실행해야 한다.
SELECT
의 순서
SELECT 컬럼
FROM 테이블
WHERE 조건
GROUP BY 그룹화할컬럼
HAVING 필터조건
ORDER BY 정렬할_컬럼
;
SELECT COUNT(*) FROM products;
SELECT SUM(price) FROM products;
SELECT AVG(price) FROM products;
SELECT MAX(price) FROM products;
SELECT MIN(price) FROM products;
WHERE
를 이용해서 조건 검색을 하기 위해서는 문자열이 완전하게 일치해야 한다.
SELECT name FROM products WHERE name = 'monitor';
그러나 LIKE
를 사용하면 부분적 일치로도 검색을 할 수 있다.
사용 가능한 와일드 카드는 %
, _
두 가지이다.
%
는 임의의 문자열을 뜻하고 _
는 하나의 임의의 문자를 뜻한다
SELECT name FROM products WHERE name LIKE '_onitor';
SELECT name FROM products WHERE name LIKE '%monitor';
SELECT 컬럼
FROM 테이블
WHERE 조건
GROUP BY 그룹화할컬럼
HAVING 필터조건
ORDER BY 정렬할_컬럼
;
테이블 내 데이터를 그룹으로 묶어 조회하고 싶을 때, 주로 집계 함수와 함께 사용한다
HAVING
을 상요해서 그룹화한 결과를 필터링 할 수 있다.
서브 쿼리란 퀴리 속의 select
이다.
UPDATE
를 사용해서 데이터의 수정을 할 수 있다.
UPDATE 테이블 SET 열=값, 열=값 [WHERE 조건식];
where
를 이용해서 특정 행일 식별해 조건에 일치하는 모든 행을 대상으로 업데이트한다.
where
가 생략된 경우 모든 행이 갱신을 하며 set
에 사용된 =
는 대입 연산자이다.
cascade
: 참조 데이터 업데이트 시 상대방 데이터도 함께 업데이트set null
: 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 NULL
로 업데이트set default
: 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 Default
값으로 업데이트restrict
: 참조하고 있을 경우, 업데이트 불가no Action
: Restrict
와 동일, 옵션을 지정하지 않았을 경우에 자동으로 선택DELETE FROM 테이블명 WHERE 조건식;
DELETE FROM 테이블명;
cascade
: 참조 데이터 업데이트 시 상대방 데이터도 함께 삭제set null
: 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 NULL
로 업데이트set default
: 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 Default
값으로 업데이트restrict
: 참조하고 있을 경우, 삭제 불가no Action
: Restrict
와 동일, 옵션을 지정하지 않았을 경우에 자동으로 선택인덱스란 테이블을 더 빠르게 조회하기 위한 참조 수단으로 실무에서 검색 속도를 향상시키기 위해서 빈번히 사용한다.
이미지와 같이 인덱스는 열
단위로 사용한다
인덱스가 없다면 데이터를 찾기 위해서 모든 테이블의 데이터를 스캔해야한다.
PRIMARY KEY
(우선 지정) / UNIQUE
+ NOT NULL
제약 조건 지정 시 자동으로 생성된다.
테이블 당 하나이며 행 데이터가 인덱스로 지정된 데이터에 대해 자동 정렬된다.
select 했을 때 primary key에 대해 자동 정렬되는 이유이다
테이블 당 여러 개가 사용 가능하며 중복이 가능하다
고유키로 지정된 컬럼은 자동으로 보조 인덱스가 생성되며 행 데이터가 인덱스로 지정된 데이터에 대해 자동으로 정렬되지 않는다
보조 인덱스 생성
CREEATE INDEX 인덱스명 ON 테이블명;
인덱스 조회
SHOW INDEX FROM 테이블명;
인덱스 삭제
DROP INDEX 인덱스명 FROM 테이블명;
뷰란 가상의 테이블로 SELECT
의 결과를 마치 테이블과 같이 간주한 것이다. VIEW
로 인해 쿼리를 단순화할 수 있고 모든 데이터를 보여줄 필요가 없어진다
뷰 생성
USE VIEW 뷰이름 AS SELECT;
뷰 삭제
DROP VIEW 뷰이름;
뷰를 조회하는 것은 제한이 없지만 삽입, 수정, 삭제 등은 제약이 있을 수도 있다
JOIN
이란 관계형 데이터베이스의 핵심으로 여러 개의 테이블을 하나로 묶는 방법이다.
JOIN
의 종류에는 INNER JOIN
, (LEFT, RIGHT, FULL) OUTER JOIN
이 있다.
SELECT 열명 FROM 테이블명1 INNER JOIN 테이블명2 ON 결합조건
테이블명 1과 테이블명 2 결합 조건을 모두 만족하는 데이터만을 선택해 결합(교집합)
테이블 1을 모두 선택하고 테이블2를 합치되 매칭되지 않으면 NULL
테이블 2를 모두 선택하고, 테이블1를 합치되 매칭되지 않으면 NULL
두 테이블 모두 선택하고 매칭되지 않으면 NULL
WHERE
은 그룹화되기 전에 데이터를 필터링하는데 사용되고,HAVING
은GROUP BY
로 그룹화된 결과에 대해 조건을 걸 때 사용된다
인덱스는 테이블의 특정 열에 대해 데이터를 빠르게 검색할 수 있도록 도와줍니다.
SELECT
쿼리의 속도를 크게 향상시킬 수도 있지만 반대로INSERT
,UPDATE
,DELETE
작업의 성능은 저하됩니다. 이는 데이터 변경 시 인덱스도 함께 업데이트 되어야 하기 때문입니다.
DELETE
는WHERE
조건을 사용해 특정 행을 사용할 수 있으며, 트랜잭션 로그를 남겨서 복구를 할 수 있습니다. 반면에TRUNCATE
는 테이블의 모든 행을 빠르게 삭제하지만 트랜잭션 로그를 남기지 않아서 복구가 불가능합니다. 또한TRUNCATE
는 자동으로 모든 행을 삭제하므로, 테이블 구조는 그대로 유지됩니다
ON DELETE CASCADE
는 외래 키 제약 조건을 설정할 때 사용하는 옵션입니다. 부모 테이블의 데이터가 삭제될 때, 해당 데이터를 참조하는 자식 테이블의 데이터도 자동으로 삭제됩니다. 이를 통해서 데이터의 무결성을 유지할 수 있습니다