행복한 째아의 개발 블로그

[MySQL] #16 조인 본문

SQL

[MySQL] #16 조인

째아 2023. 1. 17. 17:35

/*
KEY
    외래키를 가진 테이블이 자식테이블 <- 가져다가 쓰는 엔터티가 부모 엔터티에 의존
    
    JOIN
    하나 이상의 테이블에서 질의를 던지는 경우.
    일반적인 경우 Primary Key나 Foreingn Key 값의 연관에 의해서 JOIN이 성립된다.
    PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN 작업이 가능하다.
    EquiJoin, Self Join, Outer Join 
*/

/*
카디션 프로덕트 : emp와 dept 테이블의 수평적인 결합 (곱집합) 14 * 4 = 56
1) 조인조건을 생략 했을 때
2) 조인조건을 잘못 줬을 때
*/

/*
1. 조인 (EquiJoin = 연산자를 사용)
    WHERE절에 조인 조건을 걸어준다.
    2개 이상의 테이블에서 공통적으로 존재하는 컬럼값을 연결함
*/
-- 각각의 사원이 어떤 부서에서 일하는지 검색

SELECT e.ename, e.sal, d.deptno, d.dname, d.loc
FROM emp e, dept d
WHERE e.deptno = d.deptno;



SELECT e.ename, e.sal, d.deptno, d.dname, d.loc
FROM emp e JOIN dept d ON e.deptno = d.deptno;



-- 사원이름, 급여, 부서번호, 부서이름, 부서위치를 출력
-- 단, 급여가 2000이상이고 30번 부서에 한해서만

SELECT e.ename, e.sal, d.deptno, d.dname, d.loc
FROM emp e, dept d
WHERE e.deptno = d.deptno
AND e.sal >= 2000
    AND e.deptno = 30;




-- 뉴욕에서 근무하는 사원의 이름과 급여를 검색

SELECT e.ename, e.sal
FROM emp e, dept d
WHERE e.deptno = d.deptno
AND d.loc = 'NEW YORK';



-- 2. SELF 조인 (하나의 테이블을 자체적으로 조인함)
-- 'BLAKE'의 상사 이름을 검색

SELECT e.ename 사원, m.ename 상사
FROM emp e, emp m
WHERE e.mgr = m.empno
AND e.ename = 'BLAKE';



/*
3. outer 조인
    A, B 테이블을 JOIN 할 경우, 조건에 맞지 않는 데이터도 표시하고 싶을 때 OUTER JOIN을 사용한다.
    LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN
    (데이터 있는 쪽을 기준으로 한다)
*/

SELECT * FROM dept;


/*
행이 조인조건을 만족하지 않으면, 행은 질의에 나타나지 않는다.
    예를 들어, emp, dept 테이블에서 equijoin 조건에서 부서 OPERATIONS은 해당부서에
    아무도 없기 때문에 나타나지 않는다.
*/

SELECT e.ename, d.deptno, d.dname
FROM emp e, dept d 
WHERE e.deptno = d.deptno;



-- 1) RIGHT OUTER JOIN 사용

SELECT e.ename, d.deptno, d.dname
FROM emp e RIGHT OUTER JOIN dept d 
on e.deptno = d.deptno;



-- 2) LEFT OUTER JOIN 사용
-- 특정 사원의 MGR 이름을 검색

SELECT concat(e.ename, '의 매니저는 ', m.ename, ' 입니다.')Info
FROM emp e LEFT OUTER JOIN emp m
ON e.mgr = m.empno;



-- 3) FULL OUTER JOIN 사용 == UNION 사용 <- MySQL에는 FULL OUTER JOIN 사용 불가

CREATE TABLE OUTERA(sawonid int );
CREATE TABLE OUTERB(sawonid int );

INSERT INTO OUTERA VALUES (10);
INSERT INTO OUTERA VALUES (20);
INSERT INTO OUTERA VALUES (40);

INSERT INTO OUTERB VALUES (10);
INSERT INTO OUTERB VALUES (20);
INSERT INTO OUTERB VALUES (30);

SELECT sawonid FROM OUTERA
UNION
SELECT sawonid FROM OUTERB;
Comments