1. KEY
- 관계형 데이터베이스 KEY
1) 식별자: 데이터베이스 설계 단계에서 사용하는 용어로 각 행을 고유하게 식별할 수 있는 모든 속성 혹은 속성 조합을 나타냄
2) 기본키: 각 행을 고유하게 식별하는 데 사용되는 선택된 식별자로 테이블 간의 관계(JOIN)를 기술하기 위해 사용
구분 | 설명 | 특징 |
기본 키(Primary Key) | 각 행을 고유하게 식별하게 사용되는 하나 이상의 컬럼 | 한 테이블에는 하나의 키만 존재 NULL 값을 가질 수 없음 각 행에 고유한 값 |
외래 키(Foreign Key) | 한 테이블의 컬럼이 다른 키의 기본키를 참조하는데 사용되는 컬럼 | 부모 테이블의 기본 키와 동일 제약조건을 통해 참조 무결성을 유지할 수 있음 |
2. 테이블 생성하기 (DDL)
데이블을 생성할 때 컬럼별로 제약조건을 설정할 수 있다. 제약조건은 데이터의 엄격한 관리를 위해 정해둔 규칙으로 데이터의 무결성(결함 없음)을 보장하는데 도움이 되는 시스템이다.
-- 테이블 생성하기
CREATE TABLE {테이블명} (
{컬럼1} {자료형} PRIMARY KEY #일반적으로PK가 첫 번째옴
{컬럼2} {자료형}
{제약조건} -- 서로 관계를 가지고 있는 RDB 특성상 제약조건이 필요할때가 있음
);
제약조건 종류(이름) | 설명 |
UNIQUE | 해당 열에서 중복된 값 입력 불가 |
NOT NULL | NULL 값 허용 안 됨 |
PRIMARY KEY | 각 행의 고유한 식별자이면서 NULL 존재 불가 (UNIQUE + NOT NULL) |
FOREIGN KEY | 한 데이블에서 다른 테이블의 컬럼 연결 |
DEFAULT | 값을 넣지 않을 경우 기본 값 |
CHECK | 값이 특정 범위 안에 들어오도록 설정 (CHECK (AGE >= 10)) |
AUTO_INCREMENT | 행이 추가될 때마다 자동으로 고유한 값을 가지도록 설정 |
3. DML, DDL 문법 정리
-- 데이블 데이터 삽입하기
INSERT INTO {테이블명} ({컬럼1}, {컬럼2}) VALUES
(데이터, 데이터),
(데이터, 데이터)
...
(데이터, 데이터)
-- 데이터 수정하기
UPDATE {테이블명}
SET {업데이트할 컬럼} = {값}
WHERE {조건식} -- where 조건문 없다면 모든 데이터 수정
-- 컬럼 추가
ALTER TABLE {테이블명}
ADD COLUMN {컬럼명} {자료형};
-----------------------------------------------------------------------------------------------
-- 컬럼 삭제
ALTER TABLE {테이블명}
DROP COLUMN {컬럼명};
-----------------------------------------------------------------------------------------------
-- 외래 키 추가
ALTER TABLE {테이블명}
ADD CONSTRAINT {규칙별명}
FOREIGN KEY ({컬럼1}) REFERENCES {테이블}({컬럼2});
-- 데이터 삭제하기
DELETE FROM {테이블명} -- DELETE는 특정 행을 삭제, 구조와 인덱스는 유지
WHERE {조건식}; -- where 조건문 없으면 모든 데이터 삭제
-----------------------------------------------------------------------------------------------
-- 모든 행 삭제
TRUNCATE TABLE employees; -- TRUNCATE는 모든 데이터를 삭제하나 구조와 인덱스는 유지
-----------------------------------------------------------------------------------------------
-- 테이블 삭제
DROP TABLE employees; -- DROP는 테이블 자체를 삭제하여 구조와 인덱스 모두 날림
-- 인덱스 생성하기
CREATE INDEX {인덱스 별명} ON {테이블명} ({컬럼명});
-----------------------------------------------------------------------------------------------
-- 인덱스 삭제하기
DROP INDEX {인덱스 별명} ON {컬럼명};
4. 테이블 연결하기
외래키와 참조를 설정하는 이유는 데이터 무결성을 위해서이다. 관계형 데이터베이스는 서로 밀접하게 연관되어있으므로 외래키와 같이 테이블을 연결하는 중요한 정보는 일관성 있게 처리하는 것이 매우 중요하다.
-- JOBS 테이블의 JOB_ID: AD_VP 를 VP로 바꿔보자
UPDATE JOBS
SET JOB_ID = 'VP'
WHERE job_id = 'AD_VP';
5. CTE와 VIEW
임시테이블 생성을 해야하는데 테이블 생성 권한이 없거나 용량 상승으로 인해 진행하지 못할 때 사용한다.
- CTE Expression
서브쿼리를 만들 듯 일시적으로 사용할 수 있는 결과이다. WITH 구문으로 정의한다.
WITH {TEMP1} AS
( {쿼리내용})
SELET * FROM {TEMP1};
- VIEW
가상 테이블의 개념으로 데이터베이스에 실제 데이터를 저장하는 것이 아닌 실시간 참조하는 것을 말한다.
-- VIEW 생성하기
CREATE VIEW {뷰이름} AS
SELET * FROM {테이블명};
-----------------------------------------------------------------------------------------------
-- VIEW 삭제하기
DROP VIEW {뷰 이름};
'Today I Learned (TIL) > SQL' 카테고리의 다른 글
[TIL] SQL 챌린지 - 4회차 (0) | 2024.07.24 |
---|---|
[TIL] SQL 챌린지 - 3회차 (0) | 2024.07.22 |
[TIL] SQL 베이직 - 2회차 (0) | 2024.07.18 |
[TIL] DA를 위한 데이터베이스 완전 정복 (0) | 2024.07.16 |
[TIL] SQL 챌린지 - 1회차 (0) | 2024.07.15 |