우주코딩
SQL - 조인 본문
조인
조인
서로 관련된 테이블의 데이터를 연결하여 추출하는 방법
cross join : 두 테이블의 데이터를 1:1로 모두 연결한다.
NATURAL 조인 : 같은 이름을 가진 컬럼 값을 기준으로 레코드를 연결한다.
natural join 의 문제점
1) 두 테이블의 조인 기준이 되는 컬럼 이름이 다를 때 연결되지 못한다.
2) 상관 없는 컬럼과 이름이 같을 때 잘못 연결된다.
3) 같은 이름의 컬럼이 여러 개 있을 경우 잘못 연결된다. 모든 컬럼의 값이 일치할 경우에만 연결되기 때문이다.
만약에 두 테이블에 같은 이름을 가진 컬럼이 여러 개 있다면, join ~ using (기준컬럼) 을 사용하여 두 테이블의 데이터를 연결할 때 기준이 될 컬럼을 지정한다.
두 테이블에 같은 이름의 컬럼이 없을 경우 연결하지 못한다. 만약 두 테이블에 같은 이름을 가진 컬럼이 없으면, natural join을 수행하지 못한다.
또한 join using 으로도 해결할 수 없다. 이럴 경우 join ~ on 컬럼a=컬럼b 문법을 사용하여 각 테이블의 어떤 컬럼과 값을 비교할 것인지 지정하라!
Natural 조인을 수행할 기준 컬럼의 이름이 일치하지 않거나 엉뚱한 칼럼과 일치할 경우
JOIN ~ ON 문법 사용
[inner] join ~ on 의 문제점
반드시 on 에서 지정한 컬럼의 값이 같을 경우에만 두 테이블의 데이터가 연결된다. 같은 값을 갖는 데이터가 없다면 연결되지 않고, 결과로 출력되지 않는다.
Board join AttachedFile on Board.no = AttachedFile.bno
Natural 조인을 수행할 때 기준 컬럼 외에 이름이 같은 컬럼이 여러 개 있을 경우
join using : 조인할 때 사용할 기준 컬럼을 명시적으로 지정한다.
조인 기준에 맞지 않으면 결과에서 제외한다. 조인할 상대 테이블의 데이터가 없으면 결과에서 누락되는 문제가 발생한다.
왜 데이터를 가져올 때 여러 테이블의 데이터를 결합해서 꺼내는가?
데이터 중복을 피하기 위해 데이터가 여러 테이블에 분산되어있기 때문이다.
데이터가 중복되면 변경이 번거롭다. 변경 항목을 누락할 수 있다. 이는 결함이 발생하여 데이터의 일관성이 깨진다.
데이터 중복 문제 해결하면서 데이터를 분산해 저장할 수 있다.
OUTER JOIN : 만약 기준 컬럼의 값과 일치하는 데이터가 없어서 다른 테이블의 데이터와 연결되지 않았다 하더라도 결과로 뽑아내고 싶다면 outer join을 사용하라!
즉 아직 강의실이 배정되지 않은 강의 데이터도 출력하고 싶을 때 출력하고 싶은 테이블을 바깥쪽 테이블로 지정하라!
lecture left outer join Teacher on Lecture.tno = Teacher.tno
'Project' 카테고리의 다른 글
sql , sql 삽입공격, 값이 놓일 자리 ? (0) | 2021.10.20 |
---|---|
DBMS 개요, JDBC API 규격, JDBC 프로그래밍 기본 골격 (0) | 2021.10.20 |
SQL - Select , like, and , or, Foreign Key (0) | 2021.10.11 |
SQL 사용법 (0) | 2021.10.11 |
어플리케이션 아키텍쳐의 변환과 DBMS, SQL (0) | 2021.10.11 |