[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 검색 조건]

종류

  1. LEFT OUTER JOIN: 왼쪽 테이블(첫번째 테이블)의 모든 것이 출력되어야 한다.
  2. RIGHT OUTER JOIN: 오른쪽 테이블(두번째 테이블)의 모든 것이 출력되어야 한다.
  3. 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을 사용하는 경우 중복된 결과까지 모두 출력

homebdy
homebdy 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람.
comments powered by Disqus