일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 패스트캠퍼스데이터분석부트캠프
- Programmers
- 패스트캠퍼스부트캠프
- Python
- shp
- 내일배움카드
- 국비지원
- 국비지원교육
- 코딩테스트문제풀이
- 패스트캠퍼스
- 패스트캠퍼스기자단
- qgis
- 프로그래머스
- 데이터분석
- 국비지원취업
- 데이터분석부트캠프
- 코테문제풀이
- 코딩연습
- 아나콘다
- sql강의
- 학습일지
- 코딩테스트
- SQL
- bigquery
- K디지털기초역량훈련
- 데이터분석가
- mysql
- 부트캠프
- 데이터분석취업
- WSL
- Today
- Total
데이터 리터러시를 위한 발자취
[부트캠프] 데이터분석 학습일지 7주차 본문

데이터분석 부트캠프 학습일지 7주차입니다-!
이번주부터 SQL 강의가 시작되었는데요.
부트캠프 사전 지원을 통해 SQL 강의를 미리 들어둔 게 많이 도움되고 있습니다.
그 때 열심히 들어둔 보람있네요..ㅋㅋ
SQL 관련 내용은 SQL 학습후기에서도 언급한 적이 있기 때문에 중복되지 않는 부분에 대해 기록할까 합니다 :)
# 데이터분석 부트캠프 7주차
1. COPY TABLE
2. 기본키 & 외래키
3. 체크 제약조건
4. 유니크 제약조건
5. NOT NULL 제약조건
1. COPY TABLE
# 테이블 구조 및 데이터 복제
CREATE TABLE TEMP_BAK -- TEMP 테이블을 TEMP_BAK로 복제함
AS TABLE TEMP;
※ 단, 기존 테이블이 가지고 있는 PRIMARY KEY, UNIQUE, NOT NULL 등 제약조건은 가지고 오지 못함
- 테이블, 컬럼명, 컬럼 데이터 타입, 컬럼값만 복제하여 반영해줌
- 제약조건은 테이블 복사 후, 별도 추가해야함

2. 기본키 & 외래키
# 기본키(PRIMARY KEY, PK)
- 테이블 내 고유하게 행 식별하는데 사용되는 컬럼 또는 컬럼 조합
- 테이블 생성 과정에서 PRIMARY KEY 설정 가능함
- 또한, CONSTRAINT '제약조건명' PRIMARY KEY ('컬럼명') 을 통해 제약조건 명명도 가능함
# 테이블 생성 & 기본키 지정(예제)
CREATE TABLE TB_USER (
USER_NO INT,
USER_NM VARCHAR(50) NOT NULL,
BIRTH_DE DATE NOT NULL,
ADRES VARCHAR (200) NULL,
PRIMARY KEY (USER_NO) -- USER_NO를 PK로 지정
-- CONSTRAINT PK_TB_USER PRIMARY KEY (USER_NO) -- 제약조건명 PK_TB_USER로 설정
);
# 테이블 생성 & SERIAL 형식 기본키 추가
CREATE TABLE TB_VENDOR (
VENDOR_NM VARCHAR(255)
);
ALTER TABLE TB_VENDOR ADD COLUMN VENDOR_ID SERIAL PRIMARY KEY;
-- VENDOR_ID 컬럼 추가 및 기본키 설정, 'SERIAL'을 통해 자동으로 번호 부여해줌(1...5)
# 기본키 제약조건 제거
ALTER TABLE TB_VENDOR DROP CONSTRAINT
TB_VENDOR_PKEY; -- 기본키 제약조건 제거(컬럼 및 데이터값 유지됨)
# 외래키(FOREIGN KEY, FK)
- (부모) 테이블의 기본키를 참조하는 (자식)테이블의 컬럼 또는 컬럼 조합

- 상기 예제코드의 구조를 해석하자면 아래와 같음
: 자식테이블(TB_CONTACT) 경우, 부모테이블인 TB_CUST(CUST_NO)를 참조하여 외래키(FK)로 지정,
제약조건명은 FK_CUST_NO_TB_CUST로 명명함
- NO ACTION 경우, 자식이 가지고 있는 부모행을 삭제 시도 시 삭제 불가하도록 옵션 설정함 (ON DELETE NO ACTION)
: TB_CUST에서 참조 중인 CUST_NO 값을 삭제하려는 쿼리 작성 시, 'NO ACTION' 옵션 때문에 삭제 불가 및 에러 발생함

- SET NULL 옵션은 자식이 가진 부모행 삭제 시, 자식행 값을 NULL로 반환해줌 (ON DELETE SET NULL)
: line 50 기준, 부모테이블의 CUST_NO '1' 또는 '3' 값 삭제 시, 자식테이블 CUST_NO 중 1,3인 행은 NULL로 표기됨

- CASCADE은 자식이 가진 부모행 삭제 시, 자식행도 같이 삭제함 (ON DELETE CASCADE)
: line 50 기준, 부모테이블의 CUST_NO '1' 또는 '3' 값 삭제 시, 자식테이블 CUST_NO 중 1,3인 행은 삭제됨
3. 체크 제약조건
- 체크 제약조건은 컬럼 값에 제약 설정하는 것으로 테이블 생성 과정에서 주로 사용
- 아래 예제코드 기준, BIRTH_DE가 1950-01-01 이후여야 데이터 입력 가능(INSERT INTO)
* 조건 불만족 시, 에러 발생
# 테이블 생성 & 체크 제약조건(예제)
CREATE TABLE TB_USER (
USER_NO INT,
USER_NM VARCHAR(50) NOT NULL,
BIRTH_DE DATE CHECK (BIRTH_DE > '1950-01-01') -- BIRTH_DE가 1950-01-01이후여야 함
ADRES VARCHAR (200) NULL,
);
4. 유니크 제약조건
- 컬럼 혹은 컬럼 조합에 대해 UNIQU 제약 지정함
- 제약조건을 어길 경우, 에러 발생
# 테이블 생성 & 유니크 제약조건(예제) - 단일조건
CREATE TABLE TB_USER (
USER_NO INT UNIQUE, -- USER_NO 값은 각 행이 모두 유일한 값으로 지정함
USER_NM VARCHAR(50) NOT NULL,
BIRTH_DE DATE NOT NULL
ADRES VARCHAR (200) NULL,
);
# 테이블 생성 & 유니크 제약조건(예제) - 다중조건
CREATE TABLE TB_USER (
USER_NO INT,
USER_NM VARCHAR(50) NOT NULL,
BIRTH_DE DATE NOT NULL
ADRES VARCHAR (200) NULL,
UNIQUE(USER_NO,ADRES) -- USER_NO, ADRES의 값은 모두 유일한 값으로 지정함
);
5. NOT NULL 제약조건
※ NULL은 알 수 없거나 정보가 누락되었음을 의미하며, 빈 문자열이나 숫자 0과는 다름(헷갈리기 쉬움)
- NOT NULL은 특정 컬럼에 NULL이 들어오는 것을 차단함
- NOT NULL 제약조건 위반 시, 에러 발생
# 테이블 생성 & NOT NULL 제약조건(예제)
CREATE TABLE TB_USER (
USER_NO INT,
USER_NM VARCHAR(50) NOT NULL,
BIRTH_DE DATE NOT NULL,
ADRES VARCHAR (200) NULL,
);
# 특정 컬럼에 NOT NULL 제약조건 추가하기(ALTER TABLE 이용)
ALTER TABLE TB_USER ALTER COLUMN FIRST_NM SET NOT NULL;
ALTER TABLE TB_USER ALTER COLUMN LAST_NM SET NOT NULL;
# 참고사항
- DESC '테이블명' : 테이블 내 데이터 타입, 구조, NULL 제약조건 유무, key 유무(PK,FK) 조회 명령어

- SHOW INDEX FROM '테이블명' : 제약조건명, 컬럼명 등 index 조회 명령어

# 테이블 구조, 타입, Null, key 등 조회
DESC 테이블명;
# 인덱스 확인
SHOW INDEX FROM 테이블명;
# 인덱스 추가 (CREATE, ALTER로 추가 가능)
CREATE INDEX 인덱스명 ON 테이블명 (컬럼명);
ALTER TABLE 테이블명 ADD INDEX 인덱스명 (컬럼명);
# 인덱스 삭제
ALTER TABLE 테이블명 DROP INDEX 인덱스명;
Python도 그랬지만, SQL도 공부할 수록 외워야 할 쿼리 문법이 참 많습니다..ㅎㅎㅎ
아직까진 기초 단계라 쉽게 느껴지기도 하지만.. 실시간 강의 외에도 온라인 강의로 이것 저것 들어보고 있습니다.
패스트캠퍼스에서 제공하는 온라인 강의가 생각보다 알찬게 많아서요.
들을 수 있는게 많은 편이라 과연 수료 때까지 얼마나 많이 들을 수 있을까 싶지만.. 그래도 시간 날때 틈틈이 들어보려합니다!
개인적으론 데이터 모델링 실습하는 것도 익혀볼까 싶네요.
엔지니어 쪽을 고려하는 건 아니지만, 알아두면 두고두고 쓸 일이 있지 않을까 싶어요 ㅎㅎ
요새 날이 너무 더워서 매일 폭염주의보 문자가 날라오는데 다들 더위 조심하시길 바랍니다 :)
그럼 남은 기간도 화이팅입니다-!

금주 실시간 강의 범위 부분 참고 차, SQL 강의 학습 당시 기록해둔 2,3주차 링크 남겨둡니다!
'부트캠프 > [패스트캠퍼스] 데이터분석 9기' 카테고리의 다른 글
[부트캠프] 데이터분석 학습일지 8주차 (0) | 2023.08.10 |
---|---|
패스트캠퍼스 데이터분석 피어세션 후기 (0) | 2023.08.06 |
[부트캠프] 데이터분석 학습일지 6주차 (0) | 2023.07.27 |
패스트캠퍼스 데이터분석 현직자 특강 후기 (0) | 2023.07.26 |
[부트캠프] 데이터분석 학습일지 4주차 (0) | 2023.07.14 |