SQL 정리 - (4)
데이터 타입
- Boolean
- numeric
- integer
- smalint 2바이트 2^16 -32,768~ +32,768
- integer 4바이트 2^32 -2,147,483,648 ~ +2,147,483,648
- bigint 8바이트 2^64
- serial
- pk
- fk
- date 일자
- time 시간
- timestamp 일자 및 시간
제약조건
- PK 기본키
- FK 외래키
- 체크 제약 조건
- Unique
-
Not Null
-
numeric : 데이터 타입은 정수부터 실수형까지의 숫자를 표현하며 각각의 자릿수를 지정할 수 있는 타입.
CREATE TABLE PRODUCTS (
ID SERIAL PRIMARY KEY
, NAME VARCHAR NOT NULL
, PRICE NUMERIC (5, 2) #5자리를 쓰는데 소수점은 2째자리까지 );
-
integer
PAGES SMALLINT NOT NULL CHECK (PAGES > 0)
POPULATION INT NOT NULL CHECK (POPULATION >= 0)
-
serial 유읠성을 보장하는 PK에 주로 사용한다.
CREATE TABLE TABLE_NAME ( ID SERIAL );
INSERT INTO TABLE_NAME VALUES(DEFAULT);
SELECT * FROM TABLE_NAME;
**위에 방법과 밑에 방법은 같다. **
CREATE SEQUENCE TABLE_NAME_ID_SEQ;
CREATE TABLE TABLE_NAME ( ID INTEGER NOT NULL DEFAULT NEXTVAL(‘TABLE_NAME_ID_SEQ’) );
ALTER SEQUENCE TABLE_NAME_ID_SEQ OWNED BY TABLE_NAME.ID;
INSERT INTO TABLE_NAME VALUES(DEFAULT);
SELECT * FROM TABLE_NAME;
-
time관련
SELECT NOW()::date;
SELECT CURRENT_DATE;
SELECT TO_CHAR(NOW() :: DATE, ‘dd/mm/yyyy’);
SELECT TO_CHAR(NOW() :: DATE, ‘Mon dd, yyyy’);
SELECT
NOW() - CREATE_DATE AS DIFF #현재에서 과거 데이터를 입력한 시점을 뺄 수 있음.
FROM
CUSTOMER;
#연, 월, 일별로 따로 뽑을 수 있다. SELECT
, EXTRACT (YEAR FROM CREATE_DATE) AS YEAR
, EXTRACT (MONTH FROM CREATE_DATE) AS MONTH
, EXTRACT (DAY FROM CREATE_DATE) AS DAY
FROM CUSTOMER;
-
기본키 생성 (유일 + not null)
ALTER TABLE TB_PRODUCT_PK_TEST
ADD PRIMARY KEY (PRODUCT_NO);
#serial로 기본키 생성
ALTER TABLE TB_PRODUCT_PK_TEST_2 ADD COLUMN ID SERIAL PRIMARY KEY;
#기본키 삭제
ALTER TABLE TB_PRODUCT_PK_TEST_2
DROP CONSTRAINT TB_PRODUCT_PK_TEST_2_PKEY;
-
외래키 외래키는 자식 테이블의 특정 컬럼이 부모 테이블의 특정 컬럼의 값을 참조하는 것이고 이를 참조 무결성이라 한다. 부모키에 없는것을 자식 테이블에 넣을 수 없다.
ALTER TABLE SO_ITEMS ADD CONSTRAINT FK_SO_HEADERS_ID FOREIGN KEY (SO_ID) REFERENCES SO_HEADERS(ID);
ALTER TABLE SO_ITEMS DROP CONSTRAINT FK_SO_HEADERS_ID;
SO_ID INTEGER REFERENCES SO_HEADERS(ID)
-
체크 제약 조건 : 특정 컬럼에 들어가는 값에 대한 제약을 가함
BIRTH_DATE DATE CHECK (BIRTH_DATE > ‘1900-01-01’)
제약 추가
ALTER TABLE TB_EMP_CHECK_TEST
ADD CONSTRAINT NAME_CHECK
CHECK (LENGTH(FIRST_NAME) > 0 AND LENGTH(LAST_NAME) > 0) ;
-
Unique : 특정 컬럼의 값이 한 테이블 내에서 유일한 값임을 보장. null가능
UNIQUE(EMAIL)
CREATE UNIQUE INDEX IX_PERSON_UNIQUE_INDEX_TEST_01 ON PERSON_UNIQUE_INDEX_TEST(EMAIL);
-
Not Null 제약 조건은 특정 컬럼에 널 값이 들어가는 것을 방지하는 제약
PRODUCT_ID INT NOT NULL
-
References
- 패스트 캠퍼스 모두를 위한 SQL
Comments