[57일차] JOIN

저요·2022년 11월 19일

2022 100th day challenge

목록 보기
57/97

서론

지금까지 계속 자바스크립트 이야기만 하다가 갑자기 쿼리로 넘어가니 다들 좀 의아할 수도 있을것이다. 오늘은 자바스크립트를 잠시 접어두고 내가 회사에서 선배에게 배운 쿼리관련 내용을 정리하는 글을 써 보려고 한다. 선배는 백엔드 개발자이고, 그러다 보니 쿼리에 대해서 나에게 몇가지 문제와 솔루션 , 그리고 조금의 조언을 주엇다.

본론

조인이란?

조인은 테이블에 어떤 관계가 있을지를 쿼리를 작성하는 것이다.

서로 다른 테이블 여러개를 이용해서 새로운 데이터나, 통계자료를 만들고자 할 때 사용할 수 있는 방법으로는 JOIN이 있다. 예전 중고등학교 수학시간에 배웠던 집합을 떠올리면 더 이해가 쉬울것이다. 차집합, 합집합, 교집합. 이것들은 쿼리에서 LEFT JOIN, RIGHT JOIN, INNER JOIN, FULL OUTER JOIN등으로 나타낼 수 있다.

이미지출처 : https://www.jpromero.com/2015/01/joins-con-oracle-sql.html

JOIN을 사용할 때 주의할 점

  • 모수의 데이터가 손실되면 안된다.

특히 주의해야할 점은 모수로 잡은 테이블의 데이터가 손실되지 않게 주의해야한다는 점이다. 많이들 하는 실수가 있는데(나도 그렇고) 조인을 하고 난 뒤에 바깥 쿼리에서 where 조건으로 내부 쿼리를 잡는 것이다.

SELECT A.ONE, B.TWO 
FROM TABLE A
LEFT OUTER JOIN TABLE2 B
ON A.THREE = B.FOUR
WHERE 1=1
B.FOUR = 4
;

이런식으로 쿼리를 작성하게 된다면 어떻게 될까? B를 기준으로 A의 데이터가 선별되어 출력될 것이다. 모수로 잡은(LEFT JOIN이라면 왼쪽의 테이블이 모수가 되고, RIGHT JOIN이라면 오른쪽 테이블이 모수가 된다. 모수라는건 기준점이 되는 테이블을 말한다.)A테이블의 데이터가 손실이 되는것이다. 이렇게 되어서는 안된다고 크게 주의를 들었다.

쿼리를 작성할 때 주의할 점

  • 서브쿼리는 성능에 좋지 않다.

우리는 서브쿼리를 이용해 원하는 데이터를 선별해서 사용할 수가 있다. 편리하게 작성할 수 있다는 장점으로 주로 WHERE절에 많이 사용하고 가끔 SELECT에서도 사용하곤 한다. 하지만 알아두어야 할 것은 서브쿼리는 성능에 그렇게 좋지 않다는 점이다. 그 이유는 다음과 같다.

  1. 연산비용이 추가로 든다. (쿼리를 실행할 때마다 SELECT구문을 통해 접근해 계속 임시 테이블 생성)
  2. '임시' 테이블이라 독자적인 인덱스를 사용할 수 없어 최적화하기 어렵다.
  3. 쿼리가 복잡해진다.

소수의 데이터라면 성능의 차이는 크게 나지 않겠지만, 데이터의 크기가 커지면 무시할 수 없는 차이가 되니 주의하며 사용하도록 하자!

참고

https://www.jpromero.com/2015/01/joins-con-oracle-sql.html
https://schatz37.tistory.com/3

profile
웹개발

0개의 댓글