SQL 공부

송은우·2022년 4월 19일
0

sql

목록 보기
1/1

join의 종류

inner join

table A innerjoin table B
속성의 이름이 같은 속성을 table a, table b에서 뽑는다. 모든 속성에 있는 값이 같은 경우 합치고, 나머지는 전부 버린다

left join

기본 베이스는 inner join을 기본으로 하되, 왼쪽 테이블에 있는 모든 요소는 전부 다 적어준다. 오른쪽 테이블에 원하는 값이 없는 경우에는 그냥 null 로 값을 처리해서 적는다

right join

기본 베이스는 inner join을 기본으로 하되, 오른쪽 테이브렝 있는 모든 요소는 전부 다 적어준다. 왼쪽 테이블에 원하는 값이 없는 경우에는 null로 값을 처리해서 적는다

full join

full join은 left join과 right join의 합집합. innerjoin을 기본으로 하되, 왼쪽에 있는 요소들도 한 번씩, 오른쪽에 있는 요소들도 한 번씩 적는다

cross join

n*m개의 모든 데이터들을 전부 다 나열함. ,로 적는 sql문의 과정과 같음

위의 이런 join과정은 값이 일단 다 있어야 제대로 출력이 되는 경우가 많은데,

natural join

select A1, A2, … An
from r1 natural join r2 natural join .. natural join rn
where P ;
같은 방식으로 여러 natural join도 가능하괴, 공통인 요소가 있는 경우에만 남김.

natural join은 속성 명, datatype이 같으면 자동으로 join하고,
결과에는 중복되는 속성은 제거됨

Correct version
select name, title
from student natural join takes, course
where takes.course_id = course.course_id;
• Incorrect version
select name, title
from student natural join takes natural join course;

같은 부분을 보면 takes와, course를 미리 cross join을 해버리고, 그 다음에 natural join을 하는 경우와, 순차적으로 natural join을 하는 경우의 차이가 있음
첫 번째는 학생 id만 같으면 다 용납이 되지만, 두 번째는 학생 id 뿐만 아니라 takes와 course의 공통 요소마저도 다 같아야 하는 문제가 생김

이럴 때 using을 써서 특정한 컬럼만 같으면 join을 시킬 수 있음

select name, title
from (student natural join takes) join course using (course_id)

natural join과 inner join차이

natural join과 inner join의 차이는
natural join은 on, using같은 부분이 필요 없음
inner join은 멘션 해줘야 됨

on 과 where의 차이

on 과 where 의 차이는 join전/ 후의 차이가 있다

profile
학생의 마음가짐으로 최선을 다하자

0개의 댓글