SQL 데이터 유형
Boolean
- True or False
Character
- char, varchar, and text
Numeric
-integer and floating-point number
Temporal
-date, time, timestamp ...
UUID
-Universally Unique Identifiers (특정 열의 고유 식별자를 만들기 위한 본질적인 알고리즘 고유 코드)
JSON, Array ....etc..
--> 상황에 따라 어떤 데이터 유형을 저장할지 고민해야 한다..!
참고 : postgresql.org/docs/current/datatype.html
제약조건 (Constraints)
- 표에 있는 데이터 열에 적용되는 규칙을 제약 조건이라고 한다.
- 제약조건으로 유효하지 않은 데이터가 쓰이는 것을 방지할 수 있다.
Column 제약조건
NOT NULL: null 입력 x
UNIQE : 열에 있는 모든 값이 달라야 한다.
PRIMARY KEY
FOREIGN KEY
CHECK : 모든 값이 특정한 조건을 만족하도록 한다. ( ~보다 작은 것)
EXCLUSION: 특정 오퍼레이터를 사용한 특정 열이나 식에서 어떤 두 열이 비교될 때 모든 비교값이 참으로 판명되지 않아야 한다는..
Table 제약조건
CHECK (conditon) : 괄호 안에 조건을 입력
REFERENCES : column 값에 제한 건다..
UNIQE(column_list)
PRIMARY KEY(column_list)
CREATE TABLE
CREATE TABLE table_name (
column_name TYPE column_constraint,
column_name TYPE column_constraint,
table_constraint table_constraint
) INHERITS existing_table_name;
SERIAL
시퀀스 정수의 시퀀스를 발생시킨다. 시퀀스 객체를 만들고 세로단의 디폴트 값을써 시퀀스에 의해 발생한 다음 값을 세팅한다. 자동으로 삽입되는 고유한 정수값을 로그해준다. SERIAL의 장점은 줄이 제거되어도 SERIAL 데이터 유형의 Column에는 영향이 없다. 모든것을 재포맷하지 않고,시퀀스에 해당 줄이 삭제되어있는것을 알려줌
ex) 1,2,3,4,5,6 -> 1,2,3,5,6, : 아! 4가 삭제 되었구나!
INHERITS
postgresSQL에만 있는 기능으로 상속기능을 제공한다. 부모 테이블의 CHECK, NOT NULL은 자식 테이블에 자동 상속된다.
실습
INSERT
- 테이블 또는 뷰에 한 개 이상의 행을 추가한다. (위키백과)
INSERT INTO table (colulmn1, column2, ...)
VALUES
(value1, value2, ...),
(value1, value2, ...),...;
실습
** user_id == 1, job_id == 1인 값은 존재하지만, user_id, job_id가 2인 값은 존재하지 않음으로 에러가 뜬다.
UPDATE
-테이블 또는 뷰의 데이터를 갱신하기 위해 사용
UPDATE table
SET column1 = value1,
column2 = value2,...
WHERE
condition;
결과에 영향이 있는 값을 불러올 수 잇음
UPDATE account
SET last_login = create_on
RETURNING account_id, last_login
RETURNING
postgresSQL에만 있는 기능으로 SELECT * FROM table; 과 같다. 실행 결과를 리턴시켜준다.
다른 표의 값도 사용할 수 있다. JOIN 키는 안쓰지만 Update JOIN 이라고 불림
UPDATE tableA
SET orgin_col = TableB.new_col
FROM tableB
WHERE tableA.id = TableB.id
실습
DELETE
-테이블에서 행을 제거하기 위해 쓰임
DELETE FROM table
WHERE row_id = 1
WHERE문을 만족하면, 그 테이블의 가로줄 삭제. DELETE JOIN
DELETE FROM tableA
USING tableB
WHERE tableA.id = TableB.id
+) update와 같이 마지막에 returning 명령을 내려서 제거된 줄을 불러올 수 있음
ALTER
-이미 존재하는 표 구조를 바꿈.
- 더하기,드롭,세로단이름바꾸기,column 데이터 유형 바꾸기,디폴트 값 세팅, ADD CHECK 제약조건 등 .....
#더하기
ALTER TABLE table_name
ADD COLUMN now_col TYPE
#세로단 제거
ALTER TABLE table_name
DROP COLUMN col_name
#이미 존재하는 세로단 제약 조건 변경
ALTER TABLE table_namae
ALTER COLUMN col_name
SET DEFAULT value
#NOT NULL 제한조건도 제거하거나 더할 수 있다.
ALTER TABLE table_namae
ALTER COLUMN col_name
SET NOT NULL
#제약 조건 더할 수있음
ALTER TABLE table_namae
ALTER COLUMN col_name
ADD CONSTRAINT constraint_name
실습
** 테이블 명을 new_info로 바꿨기 때문에 에러가 뜸
** peole의 제약 조건으로 NOT NULL을 설정해주었기 때문에 NOT NULL을 DROP하지 않으면 INSERT를 할 때 꼭 people값을 넣어주어야 한다.
DROP
-표와 COLUMN을 완전히 삭제할 수 있다. (인덱스와 제약조건도 당연히 같이 삭제 된다.)
Table 삭제
DROP TABLE 테이블명
COLUMN 삭제
ALTER TABLE table_nmae
DROP COLUMN col1,
DROP COLUMN col2
에러를 방지하기 위해서 if를 써줌
ALTER TABLE table_name
DROP COLUMN IF EXISTS col_name
CHECK 제약조건
-if 처럼 생각하면 된다. check 제약조건에 해당되는 값만 입력되게 한다.
CREATE TABLE example(
ex_id SERIAL PRIMARY KEY,
age SMALLINT CHECK (age>21),
parent_age SMALLINT CHECK (
parent_age > age)
);
실습
https://www.udemy.com/course/best-sql-2022/learn/lecture/2909707
'AI > 데이터베이스\SQL' 카테고리의 다른 글
[SQL / PostgresSQL] CASE, COALESCE , CAST, NULLIF , views (0) | 2022.07.11 |
---|---|
데이터베이스(2) (3) | 2022.03.21 |
데이터베이스(1) (0) | 2022.03.21 |
[SQL / postgreSQL] 고급 SQL명령 ( TimeStamp, TO_CHAR, 서브쿼리(Sub-query), Self-Join) (2) | 2022.03.08 |
[SQL / postgreSQL] SQL 기초 (AS, UNION, JOIN - INNER JOIN, OUTER JOIN, LEFT JOIN, RIGHT JOIN) (0) | 2022.02.24 |