조인
여러 테이블의 데이터를 한번에 조회하는 방법
주로 상하테이블 관계에서 많이 사용(기본키와 외래키)
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 |