본문 바로가기
프로그래머스/데이터분석 데브코스

프로그래머스 데이터분석 데브코스 6-5

by 포잉띠 2024. 3. 22.

4일차 숙제 리뷰와 SQL의 고급 문법들을 배웠다.

Transaction

Atomic하게 실행되어야 하는 SQL들을 묶어서 하나의 작업처럼 처리하는 방법

  1. DDL이나 DML중 레코드를 수정/ 추가/ 삭제 한 것에만 의미가 있음
  2. Select에는 트랙잭션을 사용할 이유가 없음
  3. Begin과 End혹은 Begin, Commit 사이에 해당 SQL들을 사용
  4. Transaction 과정에서 오류가 났다면 Rollback 가능

정리는 가볍게 이정도이다.

이어 Python 에서 Transaction을 관리하는 방법도 배웠다.

Transaction 자체가 생소한 개념이지만 이전에 Transaction임을 인지하지 못하고 그냥 

이렇게 해야 실행이 되니까 썼던 경험이 있었다.

 

이전에 Discord 챗봇을 만들고 서비스 할 때 사용했던 코드 일부이다.

conn = pymysql.connect(happyhost, user='TT', password=dbpsw,db='Happy' ,charset = 'utf8')
curs = conn.cursor()
sql = "INSERT into "+db_table_name+"(cmd, emoji) value (%s, %s)"
curs.execute(sql, (str_guild_cmd, str_guild_content))
conn.commit()
conn.close()

 

aws s3 db의 명령어 table에 레코드를 추가하기 위해 썼었는데 처음에 코드와 쿼리문 자체는 잘 실행이 되었지만 불러올때 저장이 안되어 있어서 꽤 고생했던 기억이 있는 코드이다.

그냥 commit() 을 해주면 해결된다는것을 구글링을 통해 알고 왜 써야하는지 모르고 썼었는데

이제 와서 다시 코드를 확인해보니 autocommit 존재를 몰랐고 규격외의 데이터가 insert 되어도 그냥 commit 날려버리는 안전하지 않은 코드같다.

 

Delete From vs Truncate

Delete From - 테이블 내의 레코드를 조건 설정하여 삭제 가능 / 처리 속도가 느림 / Transaction사용 가능

Truncate - 테이블을 그냥 밀어버림./ 속도 빠름. /Transaction사용 불가

 

Union

여러개의 테이블들이나 Select 결과를 하나의 결과로 합쳐줌

Union - 중복 제거된 결과

Union all - 중복 허용한 결과

 

Except ( Minus )

하나의 Select 결과에서 다른 Select 결과를 빼주는 것이 가능

 

Intersect 

여러개의 Select 문에서 같은 레코드들만 찾아줌.

 

Except, Intersect는 주로 기존의 Select 문과 새로운 Select문을 비교하여

기존과 새로운 결과를 비교하는데 사용한다고 한다.

 

Listagg

필드의 값을 쭉 이어서 출력

SELECT 
  year_month,
  STRING_AGG(category ORDER BY count DESC LIMIT 5) AS top_categories
FROM RankedCategories
WHERE rank <= 5

 

이건 이번에 프로젝트를 진행하면서 빅쿼리 Public Dataset의 The look ecommerce DB의 월별 판매가 많은순으로 카테고리를 정렬하여 출력하는 쿼리의 일부이다. 

빅쿼리에서는 Listagg가 아닌 String_agg를 사용해야 했지만 사용법 자체는 크게 다르지 않은 것 같다.

 

한번 접한것들이 나와 반가운 마음이 컸다. 

 

4일차 숙제를 아직 소화하지 못했다... 

이어서 다시 여러번 시도해봐야겠다.