240730

Gi Woon Lee·2024년 7월 30일
0

TIL

목록 보기
28/78

SQL

from table1, table2

COALESCE()

cross join

CROSS JOIN 은 두 테이블에 존재하는 모든 records를 반환한다.
table1 and table2)

가능한 모든 조합을 반환하기 때문에
A CROSS JOIN B와 B CROSS JOIN A는 동일한 결과를 산출한다.

CROSS JOIN은 특별히 결합할 공통 키가 없거나, 모든 조합이 필요할 때 사용된다. 대부분의 경우 특정 조건에 따른 조인이 더 유용하며, 불필요한 데이터 조합을 피하기 위해 CROSS JOIN은 신중히 사용해야 한다. 데이터의 기하급수적인 증가를 예상해야 함.

multiple from, cross join 참고 문제. 88번. Students and Examinations

  • 오답:
with list as (
select *,count(subject_name) attended_exams
from Students join Examinations using(student_id)
group by 1,2,3)

select *
from list, subjects s
group by student_id, student_name ,list.subject_name, s.subject_name
-- having list.subject_name = s.subject_name
  1. students, examinations 테이블을 조인하여 시험에 응시한 횟수를 나타내는 CTE생성.
  2. from 절에 "CTE, subjects" 를 위치하여 subject 콤비네이션 만들기 시도.
  3. 장렬하게 실패
  • 정답
# 학생id, 이름, 과목 + count(e.student_id)를 통해 학생이 해당 수업을 몇 번 수강했는지 구한다. 
SELECT s.student_id, s.student_name, sub.subject_name, COUNT(e.student_id) AS attended_exams
FROM Students s
# 가능한 모든 조합을 구하기 위한 CROSS JOIN
CROSS JOIN Subjects sub
# student_id, subject_name 이 동일한 아이들끼리 join하여 듣지 않는 과목에 null값을 만들어준다.(차후 0으로 변환)
LEFT JOIN Examinations e ON s.student_id = e.student_id AND sub.subject_name = e.subject_name
# group by 를 통해, 학생id,이름,과목 조합으로 묶어준다. 
GROUP BY s.student_id, s.student_name, sub.subject_name
ORDER BY s.student_id, sub.subject_name;

cross join을 통해 가능한 모든 조합을 반환할 수 있다는 것을 배웠다.
나는 해당 조합을 만들기 위해 from 테이블1, 테이블2 를 사용했다.

0개의 댓글