1. 순서를 생각하자.
    우선 순서를 생각해야 합니다.
    어떤 순서인고 하니.. 하나의 쿼리를 짜내기 위한 순서 말이죠.
    sql 은 집합적 언어라고 하지만 제가 느끼기엔 집합적(+ 절차적) 이라고 생각합니다.
    순차적으로 생각할수도 있어야 한다는거죠.
    볼까요?
    편의상 내가 조회해 오려는 결과 데이터를 "결과" 라고 표현 하도록 하죠.
    1) 내가 보여주려는 결과는 어느 테이블에 있는지 생각해봅니다.
    2) 결과를 뽑기위해 하나의 테이블을 사용하지 않으므로 내가 원하는 결과를 가지고 있는
    테이블들을 나열해 봅니다.
    3) 이제 나열된 테이블중 주테이블이 무엇인지 생각해 봅니다.
    4) 마지막으로 원하는 결과의 값들은 무었이 있는지 생각해 봅니다.
    만약 , 가공이 필요한 컬럼이라면 가공 방법은 제외하고 가공된 값만 생각합니다.



2. From 부터 풀어보자
이제 대략적인 순서를 생각 했으므로 쿼리를 만들어 가보도록 하죠

1) select 절은 SELECT * 딱 한줄이면 됩니다. 에러방지용 이죠.

2) FROM 부터 들어가 봅니다. 주테이블의 순서대로
MAIN_T(주테이블) , TABLE1, TABLE2 , TABLE3 , CODE 테이블이 있다고 쳤을때 
코드 테이블을 제외한 나머지만 적어 봅니다.
여기까지 완성된 SQL 은 
SELECT *
FROM MAIN_T A 
, TABLE1 B
, TABLE2 C
, TABLE3 D
이겠죠....

3) 이제 조건을 걸어봅니다.
JOIN 도 걸고 상수조건도 걸고 ... 상수라면 AND A.PK_COL = '23' 과 같이 텍스트가 빡! 
박혀 있는 조건 입니다. 
변수로 들어오는 조건도 걸어봅니다.

4) 근데 위 3) 의 작업을 하다보면 이제 테이블의 연결이 좀 애매하고..
생각하지 않으려 해도 SELECT 절을 생각하게 되고 그러죠 그러다 보면 
'음...이부분은 INLINE VIEW 로 해야 겠군'
'음...이건 이쪽에서 가져와서 SUBQUERY 로 IN 조건을 줘야 겠군...'
'음...이건 어쩌구...저건 어쩌구...' 이런 고민 하게 되죠....그럼 점심 시간입니다. ㅋㅋ

5) 밥먹고 왔으니 SELECT 를 고민할 시간이죠 
SELECT 에 표현될 결과는 어떤거였나요? 맨처음 엑셀등에 적어 두셨죠? 
내가 조인한 테이블들이 그 바로 그 결과를 표현 할 수 있나요? 
아니라면 그담은 기술적인 문제일 뿐입니다.
예를 들어 
가로를 세로로 ... 또는 세로를 가로로... 또는 구성비를 어쩌구 저쩌구 
계층구조가 어쩌구....소계는 이러쿵 총계는 저러쿵 
그룹핑은 이렇게.. 데이터가 없는 테이블도 있으니 이런건 아웃조인 ... 
다 기술적인 부분이죠...이런건 검색해서 물어물어 찾으면 찾아집니다

+ Recent posts