개발/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개)
서브쿼리를 이용한 ....무식한 방법의 쿼리로 다중조인테블 작성하기