
제가 테이블을 정의하는 방식을 이해하지 못하고 있는 것 같습니다.
이해하디 어려워서 도식화를 조금 해봤습니다....
아래에서 Table2를 만들 때 Table1을 참조한다는 가정을 했기 때문에
System1을 계산 한 후 System2의 계산으로 넘어갈 수 있습니다.
마찬가지로 Table3를 만들 때 Table2를 참조한다는 가정을 했디 때문에
System2를 계산 한 후 System3의 계산으로 넘어갈 수 있습니다.
사이드 이펙트를 주지 않는다는 것은
수학의 함수처럼
같은 입력에 대해서 항상 같은 출력을 되돌려주는 참조 투명이라는 것입니다.
함수가 작동 할 때 마다 앞 단에 있는 (데이터 및)System이 바뀌지 않게 하기 위함입니다.

System1 안의 Table1 을 checkins 테이블이라고 가정 할 때
1번. 아래 코드를 실행 했을 때
Select * from checkins
1.1. 아래 3개의 테이블 안에 있는 데이터는 모두 같음
1.2. Table2 은 checkins으로 부르기로 함
2번. 아래 코드를 실행 했을 때
Select * from checkins c1
2.1. 아래 3개의 테이블 안에 있는 데이터는 모두 같음
2.2. Table2 는 c1으로 부르기로 함
3번 아래 코드를 실행 했을 때
SELECT c1.checkin_id FROM checkins c1
3.1. 아래 2개의 테이블 안에 있는 데이터는 모두 같지만 System1 안에 있는 checkins 테이블에 있는 데이터는 다름
3.2. Table2 는 c1으로 부르기로 함
4번 아래 코드를 실행 했을 때
select checkin_id, course_id, user_id, likes,
(select avg(c1.likes) from checkins c1
where c2.course_id = c1.course_id)
from checkins c2
4.1.
4.1.1. 아래 3가지 안에 있는 데이터는 모두 다름
4.1.2. 아래 2개의 테이블 안에 있는 데이터는 모두 같음
4.2.
4.2.1. Table2 는 c1으로 부르기로 함
4.2.2. Table3 는 c2으로 부르기로 함
