본문 바로가기

Today I Learned

231228 / 데이터 분석 부트캠프 8일차 (내일배움캠프 Data_1기)

♣ 2주차 목표 : 프로그래밍 기초 SQL 학습

  • SQL 코드 카타 31-40번 풀이 복습
  • 'SQLD 자격증 대비반' 5-8주차 강의 수강

'엑셀보다 쉽고 빠른 SQL' 강의에선 이미 생성되어 있는 테이블에서 Column들을 조회하고 다루는 법을 배웠다면 이번 강의에서는 백지 상태에서 테이블을 다루는 언어를 배워서 DDL 부분이 조금 어려웠다.

  • DDL
    - 주로 데이터를 저장하는 테이블을 다루는 언어로 구성
  • 대표적 데이터 유형
    - CHARACTER (CHAR) : 고정 길이의 문자열 정보, 남는 부분은 공백으로 채워짐
    - VARCHAR (VARCHAR2) : 가변 길이의 문자열 정보, 남는 부분 없이 가변적으로 길이 조정
    - NUMERIC (NUMBER) : 정수, 실수 등 숫자 정보
    - DATETIME (DATE) : 날짜, 시각 등과 관련된 정보
  • 제약 조건
    - 컬럼의 속성처럼 사용, 고유의 이름을 지정해야함(지정하지 않으면 DBMS가 자동으로 부여)
    - NOT NULL : 해당 컬럼에 필수로 데이터 입력
    - UNIQUE : 중복값 허용 X
    - PRIMARY KEY : 테이블의 기본키 설정, 여러 컬럼을 묶어 하나의 기본키로 사용 가능
    - FOREIGN KEY : 외래키 지정
    - DEFAULT : 값을 입력하지 않을 경우 부여될 기본 값 지정
    - CHECK : 미리 지정한 조건에 맞는 데이터 입력, 주로 특정한 값이나 범위 지정
-- 테이블 생성
CREATE TABLE table_name (
column_1 data_type constraints,
column_2 data_type constraints,
column_3 data_type constraints
);

-- COLUMN 추가
ALTER TABLE 테이블명 ADD 칼럼명 데이터_유형;

-- CONSTRAINT(제약조건) 추가
ALTER TABLE 테이블_이름 ADD CONSTRAINT 제약_조건_이름 제약조건 (컬럼_이름);

-- COLUMN 삭제
ALTER TABLE 테이블_이름 DROP COLUMN 삭제_할_컬럼_이름;

-- CONSTRAINT 삭제
ALTER TABLE 테이블_이름 DROP CONSTRAINT 제약_조건_이름;

-- COLUMN 수정
ALTER TABLE 테이블_이름 MODIFY (
	컬럼_이름_1 데이터_유형 [DEFAULT 식] [NOT NULL], 
	컬럼_이름_2 데이터_유형 [DEFAULT 식] [NOT NULL] 
	...);
    
-- COLUMN 이름 변경
ALTER TABLE 테이블_이름 RENAME COLUMN 변경_할_컬럼_이름 TO 새로운_컬럼_이름;

-- TABLE 이름 변경
RENAME 기존_테이블_이름 TO 새로운_테이블_이름;
  • 참조 무결성
    - DB 상의 참조가 모두 유효함을 말함
    - CASCADE : 참조가 걸려있는 값을 수정/삭제할 때, 해당 값을 참조하고 있는 모든 레코드 역시 종속적으로 수정/삭제
-- 참조하고 있는 모든 레코드도 함께 수정
ALTER TABLE ORDERS ADD FOREIGN KEY (product_id) REFERENCES Product(id) ON UPDATE CASCADE;

-- 참조하고 있는 모든 레코드도 함께 삭제
ALTER TABLE ORDERS ADD FOREIGN KEY (product_id) REFERENCES Product (id) ON DELETE CASCADE;

-- 참조하던 레코드가 사라지면 NULL 값으로 변경
ALTER TABLE ORDERS ADD FOREIGN KEY (product_id) REFERENCES Product (id) ON DELETE SET NULL;
  • DROP / TRUNCATE TABLE
-- TABLE 삭제
DROP TABLE 테이블_이름 [CASCADE CONSTRAINT];

-- TABLE은 남기고 데이터만 삭제
TRUNCATE TABLE 테이블_이름;