나는 쪼인이라면 친구들이 같이 밥 쪼인하실? 하면 ㄱㄱ하는 사람이다.
사실 나는 개소리장인이고 지금도 멍소리를 하는 중이다.🐶
그럼 찐으로 시작해보겠숨당.🚀
가장 기초가 되는 Join이다.
그림으로 보면 교집합이 보이지 않는가? 교집합이 무엇인지 모른다면 내가 알 바는 아니다.
A테이블과 B테이블에 모두 데이터가 있어야만 한다.
사진에 쿼리문이 나와있지만, 적을 게 없는 관계로 슬쩍 적어본다.
SELECT STUDENTS_ID, STUDENTS_NAME
FROM STUDENTS st
JOIN PART_TIME pt
ON st.STUDENTS_ID==pt.STAFF_ID
WHERE st.age>20;
내부 조인은 두 테이블에 모두 데이터가 존재해야 나온지만 외부 조인은 그렇지 않다.
그러므로 맨 위 사진에서 보이는 것들 중 교집합에 해당되는 그림을 제외한 모든 것들은 외부 조인에 해당한다.
오른쪽 테이블에 왼쪽에 해당하는 값이 없더라도 모두 내놓는다.
나는 말을 아주아주 못 한다. 나도 내가 무슨 말을 하는지 모르겠다.
Id | Name |
---|---|
1 | 똥 |
2 | 멍 |
3 | 청 |
4 | 이 |
Id | Salary | age |
---|---|---|
1 | 1,000,000 | 25 |
2 | 2,000,000 | 28 |
4 | 4,500,000 | 34 |
Id | Name | Salary | age |
---|---|---|---|
1 | 똥 | 1,000,000 | 25 |
2 | 멍 | 2,000,000 | 28 |
3 | 청 | null | null |
4 | 이 | 4,500,000 | 34 |
이렇게 된다. 너무 길어져서 고민이 됐지만 html을 적고 싶지 않은 관계로 가독성을 포기했다.
사람은 쉽게 포기하면 안된다지만 유도리있게 살아야 한다고 생각한다.
역시나 난 한 가지 주제로 오래 이야기 하지 못 한다.
아무튼 html을 적지 않고도 한 라인에 나란히 쓰는 방법을 알고 싶지만 난 핑프다 피스...🤟
💻 다음은 코드
SELECT *
FROM STUDENTS st
LEFT OUTER JOIN PART_TIME pt
ON st.STUDENTS_ID==pt.STAFF_ID
WHERE age>25;
이러면 위에 합쳐진 테이블에서 1번 row를 제외한 테이블이 결과로 나올 것이다.
같은 내용을 또 말하려니 상당히 귀찮은 부분이 있다.
그냥 왼쪽의 테이블에서 없는 데이터여도 오른쪽에 ID가 존재하면 나온다. 데이터가 없어도 되는 테이블이 반대인 것!
얘는 그냥 왼쪽이든 오른쪽이든 데이터가 없어도 한쪽만 있으면 결과로 출력된다.
WHERE절 추가로 교집합을 빼준다.
SELECT *
FROM STUDENTS st
FULL OUTER JOIN PART_TIME pt
ON st.STUDENTS_ID==pt.STAFF_ID
WHERE st.STUDENTS_ID IS NULL
OR pt.STAFF_ID.ID IS NULL;
🧨🏢🧨
나도 그냥 간단하네 하면서 넘겨왔던 JOIN이지만 실제로 쿼리문을 보면 여러 가지의 JOIN문을 많이 접하게 되더라.
그때 굳이 다이어그램을 그리지 않아도 바로 이해할 수 있을 만큼의 이해도는 필요한 것 같다.