본문 바로가기

CS/데이터베이스

SQL 중첩 쿼리와 조인 쿼리

반응형

중첩 쿼리

 

SQL 문의 WHERE 절에 다른 SQL 문이 들어 간 질의문을 중첩 쿼리라고 한다.

  • 외부 쿼리와 중첩 쿼리에 같은 이름의 애트리뷰트가 있다면 기본적으로 가장 가까운 애트리뷰트로 간주한다.
  • 중첩 쿼리는 마치 루프를 도는 것 처럼 작동한다. 중첩 쿼리 안에서는 외부 쿼리의 필드는 마치 하나의 고정된 것 처럼 작동합니다.

 

DELETE 문이나 UPDATE 문에 한 테이블이 아닌 여러 테이블에 대한 조건이 들어가야 하는 경우 중첩쿼리를 이용하면 된다.

DELETE FROM EMPLOYEE
WHERE Dno IN (SELECT Dnumber FROM DEPARTMENT WHERE Dname='Research');

 

조인 쿼리

WHERE 절에 Join Condition을 넣는 대신에 FROM 절에 JOIN 연산을 넣어 표현할 수 있다. 

SELECT Fname, Lname, Address
FROM (EMPLOYEE JOIN DEPARTMENT ON Dno=Dnumber)
WHERE Dname='Research';

 

NATURAL JOIN

EQUIJOIN의 특수한 형태로 같은 이름을 갖는 필드끼리 전부 조인한다.

그리고 결과에서는 조인한 애트리뷰트가 한 번만 나오게 된다.

(무조건 같은 이름을 갖는 애트리뷰트가 있어야한다. 만약 없다면 이름을 다시 지어 주어야 한다.)

 

EQUIJOIN이란 Join Condition이 equal인 경우를 말한다.

 

SELECT Fname, Lname, Address
FROM (EMPLOYEE NATURAL JOIN (DEPARTMENT AS DEPT(Dname, Dno, Mssn, Msdate)));

 

INNER JOIN

NATURAL JOIN 에서는 특정 조건없이 같은 이름을 갖는 필드끼리 전부 조인했다면 INNER JOIN은 'ON' 키워드를 통해 결합 조건을 준다.

SELECT Fname, Minit, Lname, Dname
FROM EMPLOYEE JOIN DEPARTMENT ON Ssn=Mgr_ssn;

 

OUTER JOIN

조인에 매칭되지 않는 튜플도 결과에 포함된다.

SELECT Fname, Minit, Lname, Dname
FROM EMPLOYEE LEFT OUTER JOIN DEPARTMENT ON Ssn=Mgr_ssn;

 

LEFT OUTER JOIN 을 했기 때문에 EMPOLYEE 테이블에서 조인에 매칭되지 않은 튜플도 모두 결과에 포함된다.

 

 

JOIN Options

  • INNER JOIN == JOIN
  • LEFT [OUTER] JOIN
  • RIGHT [OUTER] JOIN
  • FULL [OUTER] JOIN

 

반응형