데이터 취업스쿨 스터디노트(9주차)

김다희·2024년 5월 29일

5.28

  • 오늘 수강한 분량: SQL심화 2

SQL File

SQL File 실행1

  1. 파일을 실행할 데이터베이스에 접속
    • sql_ws mysql -u root -p zerobase(db이름)
  2. sql flie 실행
    • source test01.sql

SQL File 실행2(외부에서 바로 실행)

  • sql_ws mysql -u root -p zerobase(db이름 < test02.sql

database Backup

  • zerobase batabase backup

    mysqldump -u root -p zerobase > zerobase.sql
    git

database restore

  • 데이터베이스를 백업한 SQL File 을 실행하여 그 시점으로 복구하거나 이전 할 수 있다.
    (SQL File 을 실행하는 방법과 동일함)
  1. AWS RDS (database-1) 서비스가 사용 가능한 상태에서 접속
  • sql_ws mysql -h "엔드포인트" -P 3306 -u admin -p비밀번호
  1. 백업 할 데이터베이스로 이동: use zerobase

  2. AWS RDS의 zerobase Database 복원

  • source zerobase.sql

Table Backup

  • Local Database에서 테이블 백업
    - mysqldump -u root -p zerobase 테이블이름 > 테이블이름.sql

Table Restore

  • Table 을 백업한 SQL File 을 실행하여, 해당 테이블을 복구하거나 이전할 수 있다.
    (SQL File 을 실행하는 방법과 동일함)
    - source 테이블이름.sql

    Tablke Schema Backup

5.29

  • 오늘 수강한 분량: SQL 심화 3~5

Python with MySQL

0. 실행 전 준비(mysql 사용할 때 꼭 실행해야함!)

import mysql.connector

1. Create Connection

Local Database 연결

Local MySQL의 zerobase에 연결

AWS RDS(database-1) 연결

AWS RDS(database-1) zerobase에 연결

close Database

  • local.close()
  • remote.close()

2. Execute SQL

  • Query를 실행하기 위한 코드

실행 전 준비

import mysql.connector

Execute SQL 예제

  • 테이블 생성

  • 테이블 삭제

Execute SQL File 예제

  • test03.sql 생성 및 실행

Execute SQL File 예제2

  • SQL File 내에 Query가 여러개 존재하는 경우 multi = True 옵션 주기
  • test04.sql 생성

Fetch All 예제

  • celeb 테이블 조회(읽어올 양이 많은 경우 buffered=True)

Python with CSV

  • csv에 있는 데이터를 python으로 insert

police station.csv를 Pandas로 읽어오기

실행 전 준비

import pandas as ad

파일 실행

zerobase(데이터베이스)에 연결

insert문 만들기

데이터 입력

  • commit()은 database에 적용하기 위한 명령

결과 확인

검색결과를 pandas로 읽기

Python with CSV 예제

  • crime_station 테이블에 2020_crime.csv 를 입력하는 코드를 작성

AWS RDS에서 접속

2020_crime.csv 데이터(encoding="euc-kr") 읽어오기

insert 쿼리 작성

데이터를 crime_status 테이블에 insert

crime_status 테이블의 데이터 조회

조회한 결과를 pandas로 변환해서 확인

Primary key

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

Primary key 생성

  • primary key (column 값)

  • ex1 하나의 칼럼을 기본키로 설정

  • ex2 여러개의 칼럼을 기본키로 설정

Primary key 삭제

  • alter table 테이블명 drop primary key;

  • ex

Primary key 추가

  • alter table 테이블명 add primary key (column값);

  • ex1

  • ex2

Foreign key

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

Foreign key 생성

constraint 이름 foreign key column명 references 테이블 명

  • ex1. constraint 이름 설정

  • ex2. constraint

이름 설정 안하는 경우(자동생성 됨)

자동 생성된 constraint 확인

show create table 테이블명

  • ex2. job 테이블 확인

Foreign key 삭제

alter table 테이블명 drop foreign key constraint명

  • ex1.

Foreign key 추가

alter table 테이블명 add foreign key (column명) references 테이블명(column명);

  • ex1.

5.31

  • 오늘 수강한 분량: SQL 심화 6~8

Aggregate Functions(집계함수)

count

기본 형태

  • select count(*) from 테이블명;
  • select count(distinct column명) from 테이블명;

cf. distinct: 중복 제거해주는 역할

sum

기본 형태

  • select sum(더할 column명) from 테이블명 where conditions;

  • 예제. 범죄 총 발생건수는?

avg

기본 형태

  • select avg(수가 들어있는 column명) from 테이블명 where conditions;

min, max

기본 형태

  • select min/max(column명) from 테이블명 where conditions;

group by

그룹화 하여 조회할 수 있는 명령어

예제

  • crime_status에서 경찰서별로 그룹화 하여 경찰서 이름 조회
    - select police_station from crime_status group by police_station

  • 경찰서별로 총 발생 범죄 건수 검색

  • 경찰서별로 평균 범죄 발생건수와 평균 범죄 검거건수 검색

having

  • 조건을 줄 수 있는 명령어
  • order by를 사용할 경우 having을 먼저 쓴 후에 order by를 써야 함!

예제

  • 경찰서 별로 발생한 범죄 건수의 합이 4000건보다 큰 경우를 검색

Scalar Functions

UCASE / LCASE

영문을 대문자 / 소문자로 변경

  • select ucase(string);

MID

문자열 부분을 반환하는 함수

  • select MID(string, start_position, length);
    • string : 원본 문자열
    • start : 문자열 반환 시작 위치. (첫글자는 1, 마지막글자는 -1)
    • length : 반환할 문자열 길이
    -예제

LENGTH

문자열의 길이 반환

  • SELECT LENGTH(string);
  • 문자가 없는 경우('') 길이는 0, 공백도 문자이므로 공백당 길이 1
  • NULL의 경우 길이가 없으므로 NULL

ROUND

지정한 자리에서 숫자 반올림

  • SELECT ROUND(number, decimals_place);
    • number : 반올림할 대상
    • decimals : 반올림할 소수점 위치 (Option)
  • 반올림할 위치를 지정하지 않을 경우, 소수점 자리(0) 에서 반올림
  • 소수점 첫번째 위치는 0
  • 일 단위 위치는 -1

NOW

현재 날짜 및 시간 반환하는 함수

  • select now():

FORMAT

숫자를 천단위 콤마가 있는 형식으로 반환하는 함수

  • select format(number, decimal_place);
    • number : 포맷을 적용할 문자 혹은 숫자
    • decimals : 표시할 소수점 위치
  • 소수점 표시 않을 경우 0

6.1

  • 오늘 수강한 분량: SQL 과제1, SQL 심화 9~10

SQL Subquery

  • 하나의 SQL 문 안에 포함되어 있는 또 다른 SQL 문을 말한다.
  • 메인쿼리가 서브쿼리를 포함하는 종속적인 관계이다.
    • 서브쿼리는 메인쿼리의 칼럼 사용 가능
    • 메인쿼리는 서브쿼리의 칼럼 사용 불가

주의

• Subquery 는 괄호로 묶어서 사용
• 단일 행 혹은 복수 행 비교 연산자와 함께 사용 가능
• subquery 에서는 order by 를 사용X

종류

• 스카라 서브쿼리 (Scalar Subquery) - SELECT 절에 사용
• 인라인 뷰 (Inline View) - FROM 절에 사용
• 중첩 서브쿼리 (Nested Subquery) - WHERE 절에 사용

scalar subquery

  • 결과는 하나의 column이어야 함

  • 예제: 서울은평경찰서의 강도 검거 건수 & 서울시 경찰서 전체의 강도 검거 건수 평균 조회(한 표에 같이 나오게!)

Inline View

  • 메인쿼리에서는 인라인 뷰에서 조회한 column만 사용 가능

  • 예제: 경찰서 별로 가장 많이 발생한 범죄 건수와 범죄 유형 조회

Nested Subquery

• Single Row - 하나의 열을 검색하는 서브쿼리
• Multiple Row - 하나 이상의 행을 검색하는 서브쿼리
• Multiple Column - 하나 이상의 열을 검색하는 서브쿼리

single row subquery

  • 서브쿼리가 비교연산자( =, >, >=, <, <=, <>, !=)와 사용되는 경우,
    서브쿼리의 검색 결과는 한 개의 결과값을 가져야 한다. (두개 이상인 경우 에러)

multiple row - IN

  • 예제: SNL에 출연한 영화배우를 조회

multiple row = EXISTS

  • 예제: 범죄 검거 혹은 발생 건수가 2000건 보다 큰 경찰서 조회

multiple row = ANY

  • 예제: SNL에 출연한 적이 있는 연예인 이름 조회

multiple row = ALL

  • 서브쿼리 결과를 모두 만족하면(비교 연산자 사용)

multi column subquery

  • 서브쿼리 내에 메인쿼리 컬럼이 같이 사용되는 경우
  • 예제: 강동원과 성별, 소속사가 같은 연예인의 이름, 성별, 소속사를 조회

문제

  • oil_price 테이블에서 셀프주유의 평균가격과 SK에너지의 가장 비싼 가격을 Scalar Subquery 를 사용하여 조회

  • oil_price 테이블에서 상표별로 가장 비싼 가격과 상호를 Inline View 를 사용하여 조회

  • 평균가격 보다 높은 주유소 상호와 가격을 Nested Subquery 를 사용하여 조회

  • 3번에서 조회한 주유소에서 주유한 연예인의 이름과 주유소, 주유일을 Nested Subquery 를 사용하여 조회(refueling 테이블)

  • refueling 테이블과 oil_price 테이블에서 10만원 이상 주유한 연예인 이름, 상호, 상표, 주유 금액, 가격을 Inline View 를 사용하여 조회

6.2

  • 오늘 수강한 분량: git

Git

https://github.com/

git 실행

  • 찾기 -> git bash 오른쪽 마우스 -> 관리자 권한 실행
  • 관리자 권한으로 안하면 프로그램 다운로드 안되는 것들도 있어서 꼭 이렇게 실행하기!
  • 앞으로 터미널을 실행할 때는 git bash 로 실행하기

git bash

  • 복사: ctrl + insert
  • 붙여넣기: shift + insert

Local Repository

• Working Directory (작업공간) - 실제 소스 파일, 생성한 파일들이 존재
• Index (Stage) - Staging area (준비영역) 의 역할, git add 한 파일들이 존재
• HEAD - 최종 확정본, git commit 한 파일들이 존재

용어정리

  • local repository: 내 컴퓨터 안에 있는 폴더
  • remote repository: 내 git hub 홈페이지

work space 생성

mkdir 워크스페이스이름

  • mkdir git_ws

git init

  • 폴더에서 Git 을 초기화하는 명령어를 사용하면 해당 폴더를 Git 이 관리하기 시작
  • git init
  • git init으로 git 관리를 시작하면 default branch가 master로 설정 됨
    - remote로 하면 main으로 설정 됨

파일 생성

  • 윈도우는 touch 명령어 대신 copy con 명령어 사용

    copy con test.txt

  • 내 컴퓨터만 그런지 모르겠는데 copy con test.txt ; 치고 엔터 누르고 컨트롤 + C 눌러야 파일이 생긴다... 모지? ㅠㅠ

git에 존재하는 파일 확인

git status

git add(1 -> 2)

Working Directory 에서 변경된 파일을 Index (stage)에 추가

git add 파일이름

git commit(2 -> 3)

Index (stage) 에 추가된 변경사항을 HEAD 에 반영 (확정)

  • 윈도우는 꼭 쌍따옴표로 감싸줘야 함!

    git commit -m "commit 에 대한 설명" 파일 이름

remote repository 생성

  • 깃허브 홈피 -> 왼쪽 NEW -> repository name 설정 -> public/private 선택 후 완료

remote repository 등록

remote repository 확인

git remote -v

remote repository push

  • Local Repository (HEAD) 에 반영된 변경내용을
    Remote Repository 에도 반영하기 위해서는 Git Push 를 사용
  • 내폴더 -> 깃허브

git push

git push origin branchname

  • git push origin master

  • 홈페이지에 test 파일 추가된거 확인!

remote repository pull

  • Remote Repository 의 내용에 맞춰 Local Repository 를 갱신하려면 Git Pull 사용

    git pull origin master

  • 깃허브 -> 내폴더

정리

내폴더에서: add -> commit -> push
깃허브에서: pull

git clone

  • 폴더를 만들고
  • Git Init 으로 해당 폴더를 초기화 하고
    +Remote Repository 를 등록하고
    +Remote Repository 의 내용을 Pull 하는 모든 과정을 Git Clone 으로 할수 있음

branch

1. branch 조회

  • local : git branch
  • remote : git branch -r
  • local & remote 전체 조회: git branch -a

2. branch 생성

  • local : git branch branch이름
  • remote : git push origin branch이름

3. branch 이동

  • local : git checkout branch이름

branch 생성 & 이동 한번에

  • local : git checkout -b branch이름

4. branch 삭제

  • local: git branch -d branch이름
  • remote: git push origin --delete branch이름

Log and Diff

  • 로컬에서 브랜치에 따라 파일이 변경되고, commit 하기 전/후에 따라 remote의 파일이랑 다르고 그러니까 좀 헷갈린다...ㅠ_ㅠ

파일 만들기

cat > 파일명
print('내용') + ctrl D

  • 가 1개면 생성 및 덮어쓰기, 2개면 이어서 작성

git log

branch별 변경이력을 볼 수 있음

git editor 설정

git config --global core.editor 에디터이름

  • wait 옵션: command line 으로 VSCode 를 실행시켰을 경우,
    VSCode 인스턴스를 닫을 때까지 command 를 대기
    (ex. git config --global core.editor 에디터이름 --wait

git configuration 파일 열기

git config --global -e

git configuration 파일 빠져나가기

  • esc 누른 후 ':q' 입력 후 엔터
  • cf. 입력 모드는 'i' 누르기

git diff

local branch간 비교

  • git diff branch1 branch2: 터미널 안에서 비교
  • git difftool branch1 branch2: 터미널 밖에서 비교(vs code)

commit 간 비교

  • git diff commithash commithash
  • commithash란 터미널에 있는 commit 주소를 말함!

마지막 commit과 이전 commit 비교

  • git diff head head^: vs code에서 비교

마지막 commit과 현재 수정사항 확인

  • git diff head

Local and Remote 간 비교

  • git diff branch origin/branch2

merge

Git Configuration 파일 열기

git config --global -e

Git Merge 설정 추가

[user]
name = floras2
email = seolah331@naver.com
[core]
autocrlf = true
editor = code --wait

[diff]
tool = vscode
[difftool "vscode"]
cmd = "code --wait --diff $LOCAL $REMOTE"

[merge]
tool = vscode
[mergetool "vscode"]
cmd = "code --wait $MERGED

Git Merge

  • 현재 위치한 Branch 에 다른 Branch 를 병합
  • git merge branchname

Merge Conflict

  • Branch 를 Merge 하는 과정에서 충돌이 날 수 있음
  • 혹은 Push, Pull 하는 과정에서도 충돌이 일어날 수 있음

MergeTool 실행

  • Conflict 발생 이후 아래와 같이 MergeTool 을 실행하면 Conflict 난 파일들이 차례로 열림

VSCode 에서 Conflict 파일 수정

  • Main Branch 와 Dev2 Branch 의 Diff 를 <<<<, ====, >>>> 로 표시

  • 둘 중 맞는 코드를 선택하여 수정하고 저장.(Diff 표시 부분도 삭제)

Conflict 해제

  • git add + git commit

  • Commit Message 저장 후 완료

tag

특정 버전 (Commit) 에 Tag 를 달아놓을 필요가 있을 때 사용 (예 - 버전 릴리즈)

tag 생성-1

  • 현재 버전에 tag 달기

    git tag tagname

tag 생성-2

  • 특정 버전에 tag 달기

    git tag tagname commithash

tag push(remote로)

  • tag를 remote repository에 push

    git push origin tagname

tag 확인

  • git log
  • git tag
  • git show tagname

git tag 삭제

  • local 삭제: git tag --delete tagname
  • remote 삭제: git push --delete origin tagname

readme

• 프로젝트에 대한 설명, 사용방법, 라이센스, 설치법과 같은 부분에 대해 기술하는 파일
• 나, 직장동료, 프로그램 사용자를 위해 존재

markdown

Headers(큰 제목)

Headers(작은 제목)

Headers(글머리)

# This is H1
## This is H2
### This is H3
#### This is H4
##### This is H5
###### This is H6

BlockQuote

블럭인용문자 사용(>)

BlockQuote (혼합)

블럭 내에서 다른 Markdown 요소를 포함할 수 있음

순서가 있는 목록

1,2,3 자동 정렬

순서가 없는 목록


코드블럭

코드블럭


수평선


외부링크 & 자동연결


강조


이미지

저장한 파일을 그대로 끌어오면 이미지 업로드 됨

터미널에서 readme 편집

  • vi readme.md
  • i 누르고 편집 진행 -> 끝나면 esc + :wq + enter
  • local -> remote 반영 꼭 해주기!(push)
    - add, commit
  • remote에서 작성했으면 git pull origin main/master
profile
안녕하세요

0개의 댓글