[SQL] 라이브세션 6회차

양승우·2024년 10월 14일

SQL

목록 보기
7/12

목차

서브쿼리 vs. 전체 테이블, 연산 부하
distinct의 효과
*를 사용하는 것 vs. 컬럼명을 쓰는 것

3회차, 5회차 문제에 대한 풀이 진행
풀이 및 오답노트는 해당 게시글에 수정을 통해 추가하였음
(3일차 / 5일차)

대전제

SQL 문제를 풀 때는 가장 먼저 테이블과 그 데이터를 확인하고 시작해야 한다
SELECT *에 LIMIT라도 쓰든가
날짜 데이터 포맷도 보고 etc
그래서 어떤 테이블에 어떤 데이터가 담겨 있는지 확인을 하고 나야 문제를 풀 수 있다

서브쿼리 vs. 전체 테이블, 연산 부하

기본적으로 서브쿼리는 만들면 만들수록 연산이 늘어나서 효율이 감소하게 된다
그런데 주니어 단계에서는 굳이 그걸 고려할 필요는 없다

대신 쿼리 작성이 숙달 될수록 서브쿼리가 불필요하다면 이를 줄여나간다면 좋을 것

distinct의 효과

내가 distinct에 대해 착각하고 있던 것이 있는데,
나는 distinct가 뒤의 컬럼 1개에 대해서만 적용되는 줄 알았었다
하지만 distinct는
1) 사용하는 순간 모든 컬럼에 영향을 주며
2) 가장 먼저 작성해야 하기에 컬럼명을 적은 후에 distinct를 적을 수 없다

즉 아래처럼 적더라도 distinct는 game_account_id, pay_amount, approved_at 컬럼 모두에 영향을 미치는 것이다.

SELECT
	distinct game_account_id
	, pay_amount
  , approved_at
FROM basic.PAYMENT
WHERE pay_type = 'card'
;

그렇게 되면 distinct는 중복값을 제거하는 데,
이 제거하는 기준은 컬럼 전체이므로
game_account_id, pay_amount, approved_at의 값이 모두 일치해야 1개로 간주하는 것이다
만약 game_account_id는 같지만 pay_amount, approved_at가 다르다면 이는 distinct로 중복값 제거가 되지 않는 것!

*를 사용하는 것 vs. 컬럼명을 쓰는 것

쿼리문 안에 *를 쓸 떄와 정확한 컬럼명을 쓸 때
기본적으로 테이블 구성을 보기 위해서는 *을 쓰면 좋고, 테이블이 너무 크면 LIMIT을 걸어주면 좋다
다만 SELECT *은 연산을 많이 먹으므로, 찾고자 하는 값이 명확하다면 SELECT 컬럼명을 하는 게 좋다

profile
어제보다 오늘 더

0개의 댓글