[제로베이스] 데이터 사이언스 15기 - (06-22 SQL 스터디노트)

윤태호·2023년 6월 22일
0
post-thumbnail

오늘 수강한 강의 - Python with MySQL (01 ~ 12), PRIMARY KEY, FOREIGN KEY (01 ~ 08)

01 ~ 12 Python with MySQL

실습환경 만들기

  • Jupyter Notebook 실행
- VSCode 혹은 Web Browser 를 통해 실행하고, ds_study 환경에서 작업
- Jupyter notebook 과 mysql 은 모두 sql_ws 폴더에서 시작
- AWS RDS 로 생성한 database-1 을 모두 사용
  • AWS RDS(database-1) zerobase 의 police_station 테이블의 데이터를 모두 삭제
  • VSCode 의 경우 새파일을 열고 해당 파일명을 입력
  • 오른쪽 상단에서 ds_study 를 선택한 뒤 실습

Python with MySQL

  • Python 에서 MySQL 을 사용하기 위해서는 먼저 MySQL Driver 를 설치
  • 설치 확인

[Create Connection]

  • MySQL 에 접속하기 위한 코드
  • 예제 1 - Local Database 연결
  • 예제 2 - AWS RDS (database-1) 연결

[Close Database]

  • 예제 1
  • 예제 2

    [Connect to Database]
  • 특정 Database 에 접속하기 위한 코드
  • 예제 1 - Local MySQL 의 zerobase 연결
  • 예제 2 - AWS RDS (database-1) 의 zerobase 에 연결

[Execute SQL]

  • Query 를 실행하기 위한 코드
  • 예제 1 - 테이블 생성
  • 결과 확인
  • 예제 2 - 테이블 삭제
  • 결과 확인

[Execute SQL File 1]

  • SQL File 을 실행하기 위한 코드
  • 예제 1 - test03.sql 생성
  • test03.sql 실행
  • 결과 확인

[Execute SQL File 2]

  • SQL File 내에 Query 가 여러개 존재하는 경우
  • 예제 2 - test04.sql 생성
  • 실행 (에러)
  • Multi = True
  • 결과 확인

[Fetch All]

  • 예제 1 - sql_file 테이블 조회 (읽어올 데이터 양이 많은 경우 buffered=True)
  • 참고, 검색결과를 Pandas 로 읽기

Python with CSV

CSV 에 있는 데이터를 Python 으로 INSERT

[Read CSV]
제공받은 police_station.csv 를 Pandas 로 읽어와서 데이터를 확인

[Zerobase 에 연결]

[Cursor 만들기]
읽어올 양이 많은 경우 cursor 생성 시 buffer 설정을 해준다

[INSERT 문 만들기]

[데이터 입력]
commit() 은 database 에 적용하기 위한 명령

결과 확인

검색결과를 Pandas 로 읽기

csv 한글이 깨지는 경우, encoding 값을 'euc-kr' 로 설정 (특히 우리나라 사이트에서 제공받은 csv 파일들)

Python with CSV 예제

crime_status 테이블에 2020_crime.csv 데이터를 입력하는 코드를 작성
  • AWS RDS(database-1) zerobase 에 접속
  • 2020_crime.csv 데이터(encoding='euc-kr') 읽어오기
  • INSERT 쿼리 작성
  • 데이터를 crime_status 테이블에 INSERT
  • crime_status 테이블의 데이터 조회
  • 조회한 결과를 Pandas 로 변환해서 확인

01 ~ 02 PRIMARY KEY

실습환경 만들기

  • zerobase 사용 (이동)

PRIMARY KEY (기본 키)

- 테이블의 각 레코드를 식별
- 중복되지 않은 고유값을 포함
- NULL 값을 포함할 수 없음
- 테이블 당 하나의 기본키를 가짐

[PRIMARY KEY 생성 문법 1]

  • 하나의 칼럼을 기본키로 설정하는 경우

  • 여러개의 칼럼을 기본키로 설정하는 경우

[PRIMARY KEY 삭제 문법]

  • 하나의 칼럼이 기본키로 설정된 경우
  • 여러개의 칼럼이 기본키로 설정된 경우 (삭제하는 방법은 동일)

[PRIMARY KEY 생성 문법 2]

  • 하나의 칼럼을 기본키로 지정하는 경우
  • 여러개의 칼럼을 기본키로 지정하는 경우

03 ~ 06 FOREIGN KEY

FOREIGN KEY (외래 키)

한 테이블을 다른 테이블과 연결해주는 역할이며,
참조되는 테이블의 항목은 그 테이블의 기본키 (혹은 단일값)

[FOREIGN KEY 생성 문법 1]

  • CREATE TABLE 에서 FOREIGN KEY를 지정하는 경우

  • CREATE TABLE 에서 FOREIGN KEY를 지정하는 경우, CONSTRAINT 를 생략할 수 있다

[COSNTRAINT 확인 문법]

  • 자동 생성된 CONSTRAINT 를 확인하는 방법
  • COSNTRAINT 확인 예제

[FOREIGN KEY 삭제 문법]

  • FOREIGN KEY 삭제 예제

[FOREIGN KEY 생성 문법 2]

  • Table 이 생성된 이후에도 ALTER TABLE 을 통해 FOREIGN KEY 를 지정할 수 있다
    • FOREIGN KEY 생성 예제 2


07 ~ 08 FOREIGN KEY 예제

police_station 과 crime_status 테이블 사이에 관계 (Foreign Key)를 설정해 봅시다.
AWS RDS(database-1) 의 zerobase 에서 작업합니다.

[분석]

  • police_station.name 과 crime_status.police_station 을 매칭하여 관계를 맺게 하기
  • 경찰서 이름이 각 테이블에서 표시되는 형식이 다름
  • crime_status.police_station 을 police_station.name 과 같이 만들어서 비교

[Primary Key 설정]

  • police_station.name 을 Primary Key 로 설정
  • crime_status 테이블에 Foreign Key 로 사용할 Column 추가
  • Foreign Key 생성
  • Foreign Key 값 Update

[JOIN]

  • Foreign Key 를 기준으로 두 테이블을 연관시켜 검색할 수 있다

재미있었던 부분

Primary key 와 Foreign key를 설정해주고 서로 reference 하는 부분이 새롭고 재미있었다
서로 다른 데이터가 연결되어 참조하는 것은 처음해보아서 새로웠다

어려웠던 부분

저번과 마찬가지로 중간에 중복되는 데이터가 있어서 계속 오류가 났었다
이것 때문에 해결하느라 오래걸렸다

느낀점 및 내일 학습 계획

새로운 주제를 배울때마다 SQL에서는 오류가 정말 많이 난다
EDA 때보다 오히려 더 어려운 것 같기도 하다
강의랑 분명 똑같이 따라가고 있었는데 왜 내것만 오류가 나는걸까..ㅋㅋ
내일은 Aggregate Functions를 공부할 예정이다

profile
데이터 부트캠프 참여중

0개의 댓글