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