개발/SQL

SQL 미니 과제와 함께하는 쿼리 공부하기 -1 테이블 정의 , Join

카레공 2022. 10. 6. 14:36
테이블이름 정보 내용
TB_INVC 인보이스 정보 인보이스 생성시 만들어지는 데이터
TB_INVC_DTL 인보이스의 상품 정보 포함 인보이스 생성시 만들어지는 데이터
TB_STOCK 상품 재고정보 (재고위치, 입고일, 재고수량 등 ) 상품입고시 등록되어 재고관리용으로 관리되는 데이터

 

SELECT invc_no, invc_qtot 
FROM TB_INVC as a (nolock)

1. TB_INVC 테이블 

 

 

 

 

 

 

 

 

 

 

 

SELECT prod_cd,stock_no,iw_dt
FROM TB_STOCK as c (nolock)
ORDER BY prod_cd

2. 입고시 CREATE 된 재고 정보 TB_STOCK

 

 

 

 

 

 

 

 

 

SELECT invc_no, prod_cd
FROM TB_INVC_DTL as b (nolock)

3. 인보이스와 상품코드

 

 

 

 

 

 

 

 

 

 

기본적인 3개의 테이블은 이렇게 구성되어있다

 

조인(join)을 사용해서 이 3개의 테이블을 합쳐주려고 한다.

🟢결과물 

SELECT Top 100 a.invc_no, a.invc_qtot ,b.prod_cd , c.stock_no,c.iw_dt 
FROM TB_INVC as a (nolock)
JOIN TB_INVC_DTL as b (nolock) ON a.invc_no=b.invc_no
JOIN TB_STOCK as c (nolock) ON b.prod_cd=c.prod_cd
ORDER BY a.invc_no desc ,b.prod_cd

 

여러개 조인하기 

조인을 하게되면 간단 a.prod_cd가 열줄 있고 TB_STOCK의 b.prod_cd가 3줄 있다면 총 30줄 생기는거다

아래와 같이 WHERE 문으로 PK인 WHERE a.invc_no = 'IN00041653' 조건을 걸었지만 해당 상품들(n개) 의 각각의 재고상황(같은 m개씩 재고상황을 갖고 있다고할때) 까지 해서 n*m개의 데이터 행이 생성될 것이다

SELECT * FROM TB_INVC as a (nolock)
JOIN TB_INVC_DTL as b (nolock) 
ON a.invc_no=b.invc_no
JOIN TB_STOCK as c (nolock)
ON b.prod_cd=c.prod_cd
WHERE a.invc_no = 'IN00041653'

⁂주의사항

이 방식 말고도 서브쿼리를 사용하는 방법도 있지만 데이터 테이블을 출력을 한 후 조건을 걸면 시간이 오래걸리기 때문에 위 방법과 같이 사용하는게 좋다

2022.05.24 - [개발/nodejs 코딩테스트] - MYSQL 다중 조인 테이블, 다중 조건 테이블 (테이블만 6개)

서브쿼리를 이용한 ....무식한 방법의 쿼리로 다중조인테블 작성하기