데이터베이스 테이블 3개 조인하는법..
안녕하세요 혼자 해결해보려 했는데 아무리 구글링을 해봐도 이해가 잘 안가고 도무지 해결이 안 되어서 질문 올립니다ㅜㅜ..
제가 첨부한 사진과 같이 VideoShop이라는 테이블에는 mvcode(비디오코드)가 PK로 설정이 되어있고,
LendVideo테이블이 FK로 받고있습니다. 마찬가지로 UserList테이블의 userid(회원아이디)가 PK로 설정되어 있고,
LendVideo테이블이 FK로 받고 있는 상황입니다.
현재 테이블마다 컬럼은 다음과 같이 구성되어 있습니다.
=====================================================================================
[VideoShop 테이블]
mvcode(비디오코드) | mvgenre(장르) | mvtitle(비디오제목) | mvactor(주연) |
mvdirector(감독) | mvcorp(배급사) | mvprice(가격) | mvstock(재고) | mvdate(등록일)
=====================================================================================
[LendVideo 테이블]
lendcode(대여코드) | lenddate(대여일) | lendreturn(반납예정일) | lendstate(상태) |
lendextend(기간연장)
=====================================================================================
[UserList 테이블]
usernum(회원코드) | userid(회원아이디) | username(회원이름) | usertel(연락처) |
useraddr(주소) | join_date(가입일)
=====================================================================================
여기서 제가 출력하고자 하는 것은,
대여코드(lendcode) | 회원아이디(userid) | 회원이름(username) | 비디오제목(mvtitle) | 대여일(lenddate) | 반납예정일(lendreturn) |
상태(lendstate) | 기간연장(lendextend) 컬럼 순서대로 출력하되, 대여코드는 오름차순으로 출력하여 한번에 보여지게 하고싶은데요..ㅜㅜ
LendVideo테이블의 컬럼은 전부 보여주면서 VideoShop테이블의 mvtitle과 UserList테이블의 userid, username을 조인해서 가져오려면 어떻게 해야할까요??
첨부 | 파일 크기 |
---|---|
fdfd.JPG | 94.36 KB |
query 가 필요한건가요?
query 가 필요한건가요?
VideoShop, UserList 테이블에 해당 키가 pk 이기 때문에 테이블 3개를 조인할수도 있지만
각 키값을 통한 subquery 로도 가능합니다.
------------------------------------------------------------
ProgrammingHolic
Natural join으로 깔끔하게 해결될 상황인
Natural join으로 깔끔하게 해결될 상황인 것으로 보입니다.
https://keep-cool.tistory.com/41
https://www.w3resource.com/sql/joins/natural-join.php
내용을 매우 일목요연하게 정리해서 올려주셨는데
내용을 매우 일목요연하게 정리해서 올려주셨는데
질문내용에서 바로 답이 나올만한 기본적인 join입니다.
테이블 세 개를 join하려시면 아래와 같이 하시거나,
아래와 같이 하시면 되겠습니다.
테스트는 해보지 않았고,
이름이 겹치지 않는 컬럼에 대해서는 table alias를 생략했습니다.
서브 쿼리를 이용해도 되겠네요
사용자 숫자와 비디오 갯수가 상대적으로 많고
비디오 대여 횟수가 상대적으로 작다면 다음처럼 해도 됩니다.
위와 같이 쿼리를 구성한 이유는 다음과 같습니다.
1. 사용자는 많지만(사용자 테이블이 크지만) 빌려가는 사람은 별로 없다(상대적으로 참조할 사용자가 별로 없다)
2. 비디오의 종류는 많지만(비디오 테이블이 크지만) 빌려간 비디오는 별로 없다(상대적으로 참조한 비디오가 별로 없다)
위와 같은 조건일때 큰테이블 2개를 join 하면 불필요하게 큰 테이블이 생성(테이블의 곱) 되므로
일단 빌려간 비디오의 정보만 취한뒤에 각각의 정보는 서브 쿼리로 바로 검색(pk 이므로 해쉬 검색 가능) 하는게 결과적으로 성능향상에 도움이 됩니다.
음.. 근데 쓰고 보니 이거 혹시 리포트 용인가요?
답 알려준거 보다는 제가 굳이 chanik 님의 정답에 대해 다시 댓글을 단 이유를 알아주셨으면 좋겠네요
------------------------------------------------------------
ProgrammingHolic
댓글 달기