조인
여러 테이블의 데이터를 한번에 조회하는 방법
주로 상하테이블 관계에서 많이 사용(기본키와 외래키)
 
 
 
1.inner join
서로 다른 두 테이블에서 같은 컬럼의 데이터가 일치하는 데이터들만 조회
(하위 테이블에서 상위데이터 요구시 사용)
만약, inner join 시 on절에서 컬럼이 일치하지 않는 데이터를 가지고 있는 경우 조회되지 않는다
문법)
select [조회컬럼들] 
from [첫번째 테이블명(하위테이블)] 
inner join [두번째 테이블명(상위테이블)] 
on [두 테이블의 교집합 조건] 
[where 조건절]; 
 
 
notice_board의 별칭을 n으로 주고 user 테이블과 조인
select nno,title,user.uno,uid,uname
from notice_board n
inner join user 
on n.uno = user.uno;
 
 
자유게시판 데이터를 조회. 이때 게시글을 작성한 작성자 이름도 함께 조회
1) 원하는 컬럼명을 전부 써서 조회
select fno,title,content, f.rdate, hit,f.state,filename, user.uno,uname 
from free_board f 
inner join user 
on f.uno = user.uno;
 
 
2) 자유게시판에서만 전체컬럼을 조회하고, user에서는 원하는 컬럼만 조회
select f.*, uname 
from free_board f 
inner join user 
on f.uno = user.uno;
 
 
uno 가 3인 자유게시판 글만 조회
free_board와 user 테이블의 전체 컬럼을 조건으로 사용할 수 있음
select f.*, uname 
from free_board f 
inner join user 
on f.uno = user.uno 
where f.uno = 3;
 
 
댓글 테이블의 전체 데이터와 작성자 아이디 조회하기
select c.*,uid from comment c inner join user on c.uno = user.uno;
 
 
작성자 홍길동이 쓴 댓글만 조회
select c.*,uid,uname from comment c 
inner join user 
on c.uno = user.uno 
where uname = "홍길동";
 
 
댓글테이블에서 댓글을 등록한 작성자 id와 게시글의 제목을 조회(inner join 중복 사용)
select c.*,uid,title 
from comment c 
inner join user
on c.uno = user.uno 
inner join free_board f 
on c.fno = f.fno;
 
 
글번호 5번에 대한 댓글들만 조회
select c.*,uid,title 
from comment c 
inner join user
on c.uno = user.uno 
inner join free_board f 
on c.fno = f.fno 
where c.fno = 5;
2.outer join
1) left outer join : 왼쪽(선언 첫번째) 테이블 전체를 조회할 때 일치하는 오른쪽 테이블 데이터가 있으면 출력,없으면 null
문법) 
select [조회컬럼들] 
from [테이블명(왼쪽)] 
left outer join [테이블명(오른쪽)] 
on [왼쪽 테이블.조건컬럼 = 오른쪽 테이블.조건컬럼] 
[where 조건절]; 
 
2) right outer join : 오른쪽(선언 두번째) 테이블 전체를 조회할 때 일치하는 왼쪽 테이블 데이터가 있으면 출력,없으면 null
문법)
select [조회컬럼들] 
from [테이블명(왼쪽)] 
right outer join [테이블명(오른쪽)] 
on [왼쪽 테이블.조건컬럼 = 오른쪽 테이블.조건컬럼] 
[where 조건절];3.cross join
두테이블의 각 행을 서로 교차하여 데이터 행을 조인하는 방법
첫번째 테이블 행 X 두번째 테이블 행의 갯수만큼 데이터가 조회된다
조건절을 잘 사용하면 inner join 처럼 사용가능
 
문법)
select [조회 컬럼] from [크로스 조인할 테이블명1],[크로스 조인할 테이블명2],... [where 조건절]; 
 
inner join on절 조건을 cross join where 절에 사용하면 inner join처럼 사용 가능
select * 
from user,comment 
where user.uno = comment.uno;
 
 
cross join을 사용하여 notice_board의 모든 행을 작성한 작성자 id와 uname을 조회
select n.*,uid,uname 
from notice_board n,user 
where n.uno = user.uno;
 
 
cross join을 사용하여 free_board의 모든 데이터를 조회하는데 이때 작성자 이름과 연락처를 함께 출력
select f.*,uname,uphone 
from free_board f,user 
where f.uno = user.uno;
 
 
cross join을 사용하여 댓글 테이블 전체 데이터 조회. 댓글 작성자명과 자유게시글 제목을 함께 조회
select c.*,uname,title 
from comment c, user, free_board f 
where c.uno = user.uno and c.fno = f.fno;
 
 
 
 
'MySQL' 카테고리의 다른 글
| [MySQL] 함수 (2) | 2024.09.07 | 
|---|---|
| [MySQL] 기존 테이블 복사, GROUP BY (4) | 2024.09.05 | 
| [MySQL] DML 데이터조작어 UPDATE, DELETE (0) | 2024.09.04 | 
| [MySQL] SELECT문 WHERE BETWEEN, IN(),LIKE, 서브쿼리 (0) | 2024.09.03 | 
| [MySQL] DML 데이터조작어 SELECT문 (2) | 2024.09.02 |