Categories
Algorithm🧩
백준 📝
BookReview📕
CleanCode✨
Network 📨
Database 🗄
DevOps☁️
에러 일기📕
Etc💬
Fishy Fish 🎣
Spring🌱
[MySQL] SQL문 4. JOIN
JOIN문
데이터 베이스의 테이블은 중복과 공간 낭비를 피하고 데이터의 무결성을 위해 여러 개의 테이블로 분리하여 저장
- 분리된 테이블은 서로 관계를 맺고 있다.
- 대부분 1대 n의 관계
- 회원 테이블과 구매 내역 테이블이 있다 가정
- 구매 테이블의 아이디 열을 회원 테이블과 동일하게 기본키로 지정하면 한번 데이터 저장 이후 다시 저장할 수 없다.
- 이 두 테이블을은 관계를 기준으로 조합하여 결과를 출력할 수 있다.
INNER JOIN
형식
SELECT <COL>
FROM <TABLE>
INNTER JOIN <SECOND TABLE NAME>
ON <조건>
[WHERE 검색 조건]
예시
SELECT *
FROM buytbl
INNER JOIN usertbl
ON buytbl.userID = usertbl.userID
WHERE buytbl.userID = 'KBS';
- 구매 내역 테이블에서 userID가 KBS인 사람을 찾아 usertbl과 조합하여 출력한다.
- 구매 테이블에서 userID 추출 후 회원 테이블의 userID 검색
- 두 테이블에 데이터가 존재할 경우 테이블을 결합해 출력한다.
OUTER JOIN
한 테이블에만 내용이 있어도 결과를 조인하여 표시하는 방식
형식
SELECT <COL>
FROM <TABLE>
<LEFT | RIGHT | FULL> OUTER JOIN <SECOND TABLE NAME>
ON <조건>
[WHERE 검색 조건]
종류
- LEFT OUTER JOIN: 왼쪽 테이블(첫번째 테이블)의 모든 것이 출력되어야 한다.
- RIGHT OUTER JOIN: 오른쪽 테이블(두번째 테이블)의 모든 것이 출력되어야 한다.
- FULL OUTER JOIN: 모든 테이블의 모든 데이터가 출력되어야 한다.
예시
SELECT U.userID, U.name, concat(U.mobile1, U.mobile2)
FROM usertbl U
LEFT OUTER JOIN buytbl b
ON U.userID = B.userID
WHERE B.prodName is NULL;
- 구매를 한 적 없는 회원 목록을 출력한다.
CROSS JOIN
한쪽 테이블의 모든 행들과 다른쪽 테이블의 모든 행을 조인시키는 기능
예시
SELECT *
FROM buytbl
CROSS JOIN usertbl U
- 회원 테이블과 구매 내역 테이블의 모든 행을 조인시켜 출력한다.
SELF JOIN
자기 자신과 자기 자신이 조인하는 경우
ex) 사원의 직속 상관의 전화번호를 가져오는 경우 사용
UNION / UNION ALL / NOTIN / IN
쿼리의 결과를 행으로 합치는 것
형식
SELECT 문장1
UNION [ALL]
SELECT 문장2
- 문장 1의 결과와 문장 2의 결과를 합친다.
- UNION을 사용하는 경우 중복된 결과는 제외하고 출력
- UNION ALL을 사용하는 경우 중복된 결과까지 모두 출력