'Server'에 해당되는 글 14건

  1. [DBMS] NULL도 데이터이다
  2. [DBMS] 서브쿼리
  3. [DBMS] 집합연산자
  4. [DBMS] 조인

[DBMS] NULL도 데이터이다

NULL도 데이터이다


DBMS에서의 NULL은 매우 중요한 데이터입니다. 왜냐하면 DBMS에서는 컬럼에 널값이 저장되는 것을 허용하는데 널 값을 제대로 이해하지 못한 채 쿼리문을 사용하면 원하지 않는 결과를 얻을 수 있기 때문입니다. 

다음은 널에 대한 이해를 돕기 위해서 다양한 널의 정의를 살펴본 것입니다.


1 0(zero)도 아니고 

2 빈 공간도 아니다. 

3 미확정(해당 사항 없음), 알 수 없는(unknown) 값을 의미한다. 

4 어떤 값인지 알 수 없지만 어떤 값이 존재하고 있다.

5 ? 혹은 ∞의 의미이므로 

6 연산, 할당, 비교가 불가능하다.

- NULL은 ? 혹은 ∞의 의미이기 때문에 연산, 할당, 비교가 불가능합니다. 


select ename, comm, sal*12+comm, nvl(comm, 0), sal*12+nvl(comm, 0) from emp;

- 연봉 계산을 위해 사원 테이블에서 급여와 커미션 칼럼을 살펴본 결과 영업사원이 아닌 사원들의 커미션은 NULL로 지정되어 있으므로 연봉을 올바르게 계산하기 위해서는 커미션이 NULL인 경우 0으로 변경하여 계산에 참여하도록 해야 합니다

- 오라클에서는 NULL을 0 또는 다른 값으로 변환하기 위해서 사용하는 함수로 NVL을 제공합니다. 커미션에 널이 저장되어 있더라도 널을 다른 값으로 변환하는 NVL 함수를 사용하면 제대로 된 계산 결과를 얻을 수 있습니다.  






'Server > DBMS' 카테고리의 다른 글

[DBMS] HAVING 조건  (0) 2014.12.02
[DBMS] Group By  (0) 2014.12.02
[DBMS] 서브쿼리  (0) 2014.11.30
[DBMS] 집합연산자  (0) 2014.11.30
[DBMS] 조인  (0) 2014.11.30

[DBMS] 서브쿼리


서브쿼리


1. 서브쿼리의 개념

서브쿼리는 하나의 SQL 문 안에 포함되어 있는 또 다른 SQL 문을 의미합니다.

SQL 에 포함된 또 다른 SQL을 서브쿼리라고 합니다. 서브쿼리는 SELECT절, FROM절, WHERE절, HAVING절에 사용될 수 있습니다.

서브쿼리는 메인 쿼리가 실행되기 전에 먼저 실행되며 서브쿼리에서는 메인 쿼리의 모든 컬럼을 참조할 수 있지만 메인 쿼리에서는 서브쿼리의 컬럼을 참조할 수 없습니다.

  • 서브쿼리 개념


2. 서브쿼리가 가능한 곳은 다음과 같다.

SELECT CLAUSE

FROM CLAUSE

WHERE CLAUSE

HAVING CLAUSE

ORDER BY CLAUSE

INSERT VALUES CLAUSE

UPDATE SET CLAUSE


3. 서브쿼리의 유형

(1) 단일 행(Sing-Row) 서브쿼리 : SELECT 문장으로 부터 오직 하나의 행 만을 검색하는 질의이다.

서브쿼리에서 한 행에 대한 결과 값만 반환하는 것을 단일행 서브쿼리라고 합니다 (=, >, >=, <, <=, <>, !=)

- WHERE 절에서 사용된 서브쿼리에서 한 개의 결과 값만 반환할 경우 사용하는 연산자는 다음과 같습니다. 이 외의 연산자를 사용할 경우 에러가 발생할 수 있습니다.

연산자의미
=같음
>보다 큼
>=크가나 같음
<보다 작음
<=작거나 같음
, !=같지 않음

▶ 구문

SELECT select_list

FROM table_name

WHERE 표현식 연산자 (SELECT select_list

                       FROM table_name

                       WHERE 조건식);

표현식 연산자 : subquery는 비교 연산자 우측에 () 안에 작성한다.


▶ 예제

employee 테이블에서 gildong보다 급여를 많이 받는 사원을 출력하시오.

SELECT ename, salary

FROM employee

WHERE salary > (SELECT salary

                         FROM employee

                         WHERE ename = 'gildong') ;

 

20번 사원과 같은 부서에서 일하는 사원을 출력하시오.

SELECT ename, dno

FROM employee

WHERE dno = (SELECT dno

                   FROM employee

                   WHERE eno = 20) ;



(2) 다중 행(Multiple-Row) 서브쿼리 : SELECT 문장으로부터 하나 이상의 행을 검색하는 질의이다.

서브쿼리에서 여러 행에 대한 결과 값을 반환하는 것을 다중행 서브쿼리라고 합니다. (IN, NOT IN, ANY, ALL, EXISTS)

- 다중 행 subquery를 이용하여 데이터를 비교할 경우에는 다중 행 연산자를 사용합니다. 만약 다중 행 subquery에 단일 행 연산자를 사용한다면, 다음과 같은 오류가 발생합니다.

다중 행 연산자설명
IN(서브쿼리)서브쿼리의 결과에 존재하는 임의의 값과 동일한 조건을 의미한다. (Multiple OR 조건)
비교연산자 ALL(서브쿼리)서브쿼리의 결과에 존재하는 모든 값을 만족하는 조건을 의미한다. 비교 연산자로 ">"를 사용했다면 메인쿼리는 서브쿼리의 모든 결과 값을 만족해야 하므로, 서브쿼리 결과의 최대값보다 큰 모든 건이 조건을 만족한다. ANY 연산자는 Subquery의 여러 결과값 중 어느 하나의 값만 만족이 되면 행을 반환 한다.
비교연산자 ANY(서브쿼리)서브쿼리의 결과에 존재하는 어느 하나의 값이라도 만족하는 조건을 의미한다. 비교 연산자로 ">"를 사용했다면 메인쿼리는 서브쿼리의 값들 중 어떤 값이라도 만족하면되므로, 서브쿼리의 결과의 최소값보다 큰 모든 건이 조건을 만족한다. ANY 연산자는 Subquery의 여러 결과값 중 어느 하나의 값만 만족이 되면 행을 반환 한다. (SOME은 ANY와 동일함.)
EXISTS(서브쿼리)서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건을 의미한다. 조건을 만족하는 건이 여러 건이더라도 1건만 찾으면 더 이상 검색하지 않는다.

▶ 예제1 (IN)

각 부서에서 급여를 가장 적게 받는 사원들을 출력하시오
SELECT dno, ename, salary
FROM employee
WHERE salary = (SELECT MIN(salary)
                      FROM employee
                      GROUP BY dno);
[ERR-31002 : A single-row subquery returns more than one row.] 단일 행 하위 질의에 2개 이상의 행이 리턴되었다. 

SELECT dno, ename, salary
FROM employee
WHERE salary IN (SELECT MIN(salary)
                       FROM employee
                       GROUP BY dno) ;

10 rows selected.  


SELECT ENAME, SAL, DEPTNO FROM EMP
WHERE DEPTNO IN ( SELECT DISTINCT DEPTNO
FROM EMP 
WHERE SAL>=3000);

SELECT ENAME, SAL, DEPTNO FROM EMP
WHERE DEPTNO IN (10, 20);


▶ 예제2 (ANY)

SALESMAN 직업의 급여보다 많이 받는 사원의 사원명과 급여 정보를 출력하는 예제

SELECT ename, sal

FROM emp

WHERE deptno != 20

AND sal > ANY (SELECT sal 

                        FROM emp 

                        WHERE job='SALESMAN');

ENAME             SAL

---------- ----------

ALLEN            1600

BLAKE            2850

CLARK            2450


▶ 예제3 (ALL)

모든 SALESMAN직업의 급여보다 많이받는 사원의 사원명과 급여정보를 출력하는예제

SELECT ename, sal

FROM emp

WHERE deptno != 20

AND sal > ALL (SELECT sal 

                       FROM emp 

                       WHERE job='SALESMAN');

ENAME             SAL

---------- --------

CLARK            2450

BLAKE            2850

KING               5000


▶ 예제4 (EXISTS)

-- 아래 예처럼 emp 테이블을 통해 사원들이 속한 부서번호의 정보만 조회하는 경우

-- 추출하고자 하는 대상은 dept 테이블이지만 emp 테이블과 조인하여 부서번호를 

-- 체크해야 한다.

-- 두 테이블의 관계가 1 : M 이므로 불필요하게 EMP 테이블을 모두 액세스하고 

-- DISTINCT로 중복 제거를 한다.

SELECT DISTINCT d.deptno, d.dname

FROM dept d, emp e

WHERE d.deptno = e.deptno;

 

-- EXISTS를 사용하는 Subquery로 변경

-- 추출하고자 하는 대상만을 FROM절에 놓고 emp테이블은 체크만 하기위해 

-- EXISTS절에 위치시켰으며 이로 인해 수행속도가 대폭 감소하게 된다.

SELECT d.deptno, d.dname

FROM dept d

WHERE EXISTS 

      (SELECT 1

        FROM emp e

        WHERE e.deptno = d.deptno);


(3)  다중 열(Multiple-Column)[다중 컬럼] 서브쿼리 : SELECT 문장으로부터 하나 이상의 컬럼을 검색하는 질의이다.

서브쿼리에서 여러 열에 대한 결과 값을 반환하는 것을 다중열 서브쿼리라고 합니다. 메인쿼리의 조건절에 여러 컬럼을 동시에 비교할 수 있다. 서브쿼리와 메인쿼리에서 비교하고자 하는 컬럼 개수와 컬럼의 위치가 동일해야 한다. 


▶ 예제

SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 

FROM PLAYER 

WHERE (TEAM_ID, HEIGHT) IN (SELECT TEAM_ID, MIN(HEIGHT) 

                            FROM PLAYER 

                            GROUP BY TEAM_ID) 

ORDER BY TEAM_ID, PLAYER_NAME; 

다중 칼럼 서브쿼리는 서브쿼리의 결과로 여러 개의 칼럼이 반환되어 메인쿼리의 조건과 동시에 비교되는 것을 의미한다.


(4) FROM절상의 서브쿼리(INLINE VIEW) : FROM절상에 오는 서브쿼리로 VIEW처럼 작용 한다.

SELECT 의 FROM 절에서 사용하는 서브쿼리를 inline view라고 합니다. view와는 달리 inline view에서 사용하는 SELECT문을 저장하지 않기 때문에 dynamic view 라고도 부릅니다.

다른 서브쿼리와는 다르게 inline view에서 질의하는 칼럼들을 메인 서브쿼리에서 사용할 수 있습니다.


▶ 예제1

사원 정보와 각 사원이 속한 부서의 평균 급여를 함께 출력하라.

SELECT e.ename, e.salary, a.avg_sal

FROM employee e, (SELECT dno, AVG(salary) avg_sal FROM employee GROUP BY dno) a

WHERE e.dno = a.dno;

ENAME             SALARY       AVG_SAL     

-----------------------------------------

HSCHOI            2000000      2150000     

JHCHOI            2300000      2150000     

HYCHOI            1700000      1340000     

KWKIM              980000      1340000     

YHBAE             4000000      2438250

 


▶ 예제2

 부서번호 20의 평균 급여보다 크고, 부서번호 20에 속하지 않은 관리자를 조회하는 예제이다.

SELECT b.empno, b.ename, b.job, b.sal, b.deptno

FROM (SELECT empno

          FROM emp  

          WHERE sal >(SELECT AVG(sal) 

                              FROM emp 

                              WHERE deptno = 20)) a, emp b

   WHERE a.empno = b.empno

   AND b.mgr is NOT NULL

   AND b.deptno != 20;

 EMPNO ENAME      JOB         SAL     DEPTNO

 ----- --------- --------- ------- ---------

  7698 BLAKE      MANAGER     2850        30

  7782 CLARK      MANAGER     2450        10


(5) SCALAR SUBQUERY

SELECT 절에서 사용하는 서브쿼리를 스칼라 서브쿼리(Scalar Subquery)라 한다.

스칼라 서브쿼리는 한 행, 한 칼럼(1 Row 1 Column)만을 반환하는 서브쿼리를 말한다. 

스칼라 서브쿼리는 메인 서브쿼리의 row수 만큼 반복되어 실행이 되고, 만약 조건에 만족하는 스칼라 서브쿼리의 결과가 없다면 NULL 을 리턴하게 된다.


▶ 예제

사원 정보와 각 사원이 속한 부서의 평균 급여를 함께 출력하시오.

SELECT ename, salary, (SELECT AVG(salary) FROM employee WHERE dno = e.dno) avg_sal 

FROM employee e;

ENAME            SALARY       AVG_SAL     

-------------------------------------------

HSCHOI           2000000      2150000     

KSKIM             1800000      1800000


cp.) HAVING 절에서 서브쿼리 사용하기

HAVING 절은 그룹함수와 함께 사용될 때 그룹핑된 결과에 대해 부가적인 조건을 주기 위해서 사용한다.

SELECT P.TEAM_ID 팀코드, T.TEAM_NAME 팀명, AVG(P.HEIGHT) 평균키 

FROM   PLAYER P, TEAM T 

WHERE  P.TEAM_ID = T.TEAM_ID 

GROUP  BY P.TEAM_ID, T.TEAM_NAME 

HAVING AVG(P.HEIGHT) < (SELECT AVG(HEIGHT) 

                        FROM PLAYER 

                        WHERE TEAM_ID ='K02');


cp.) UPDATE문의 SET 절에서 사용하기

UPDATE TEAM A 

SET  A.STADIUM_NAME = (SELECT X.STADIUM_NAME 

                         FROM STADIUM X 

                         WHERE X.STADIUM_ID = A.STADIUM_ID); 


cp.)  INSERT문의 VALUES절에서 사용하기

- INSERT INTO 다음에 VALUES 절을 사용하는 대신에 서브 쿼리를 사용할 수 있습니다. 

- 이렇게 하면 기존의 테이블에 있던 여러 행을 복사해서 다른 테이블에 삽입할 수 있습니다. 

- 이 때 주의할 점은 INSERT 명령문에서 지정한 컬럼의 개수나 데이터 타입이 서브 쿼리를 수행한 결과와 동일해야 한다는 점입니다. 

INSERT INTO PLAYER(PLAYER_ID, PLAYER_NAME, TEAM_ID) 

VALUES((SELECT TO_CHAR(MAX(TO_NUMBER(PLAYER_ID))+1) FROM PLAYER), '홍길동', 'K06'); 




'Server > DBMS' 카테고리의 다른 글

[DBMS] HAVING 조건  (0) 2014.12.02
[DBMS] Group By  (0) 2014.12.02
[DBMS] NULL도 데이터이다  (0) 2014.12.02
[DBMS] 집합연산자  (0) 2014.11.30
[DBMS] 조인  (0) 2014.11.30

[DBMS] 집합연산자


집합 연산자


두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중에 또 다른 방법이 있는데 그 방법이 바로 집합 연산자(Set Operator)를 사용하는 방법이다. 

집합 연산자연산자의 의미
UNION여러 개의 SQL문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 하나의 행으로 만든다.
UNION ALL여러 개의 SQL문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로 표시된다. 즉, 단순히 결과만 합쳐놓은 것이다. 일반적으로 여러 개의 결과가 상호 배타적인(Exclusive)일 때 많이 사용한다. 개별 SQL문의 결과가 서로 중복되지 않는 경우, UNION과 결과가 동일한다. (결과의 정렬 순서에는 차이가 있을 수 있음)
INTERSECT여러 개의SQL문의 결과에 대한 교집합이다. 중복된 행은 하나의 행으로 만든다.
EXCEPT앞의 SQL문의 결과에서 뒤의 SQL문의 결과에 대한 차집합이다. 중복된 행은 하나의 행으로 만든다. (일부 데이터베이스는 MINUS를 사용함)


1. UNION : 합집합

UNION은 두 테이블의 결합을 나타내며, 결합시키는 두 테이블의 중복되지 않은 값들을 반환 한다.


▶부서번호를 조회하는 UNION 예제

SELECT deptno FROM emp

UNION

SELECT deptno FROM dept;

DEPTNO

--------

      10

      20

      30

      40 


2. UNION ALL : 중복을 포함하는 합집합

UNION과 같으나 두 테이블의 중복되는 값 까지 반환 한다.


부서번호를 조회하는 UNION ALL 예제

SELECT deptno FROM emp

UNION ALL

SELECT deptno FROM dept;

 DEPTNO

-------

     20

     30

     30

     20

     30

...

18개의 행이 선택되었습니다.


3. INTERSECT : 교집합

INTERSECT는 두 행의 집합중 공통된 행을 반환 한다.


▶ 부서번호를 조회하는 INTERSECT 예제

SELECT deptno FROM emp

INTERSECT

SELECT deptno FROM dept;

  DEPTNO

---------

       10

       20

       30



4. MINUS : 차집합

MINUS는 첫 번째 SELECT문에 의해 반환되는 행 중에서 두 번째 SELECT문에 의해 반환되는 행에 존재하지 않는 행들을 반환 한다.


▶ 사원이 없는 부서를 조회하는 MINUS 예제

SELECT deptno FROM dept

MINUS

SELECT deptno FROM emp;

 DEPTNO

---------

     40





'Server > DBMS' 카테고리의 다른 글

[DBMS] HAVING 조건  (0) 2014.12.02
[DBMS] Group By  (0) 2014.12.02
[DBMS] NULL도 데이터이다  (0) 2014.12.02
[DBMS] 서브쿼리  (0) 2014.11.30
[DBMS] 조인  (0) 2014.11.30

[DBMS] 조인

조인


join이란?

- 둘 이상의 테이블을 연결하여 데이터를 검색하는 방법이다. 다시 말해, 두 개 이상의 테이블들을 연결하여 데이터를 검색하는 것을 JOIN 이라고 합니다.

- 보통 둘 이상의 행들의 공통된 값 primary Key 및 Foreign Key 값을 사용하여 조인한다.

- 보통 테이블을 select 문장 안에서 조인하려면 적어도 하나의 컬럼이 그 두 테이블 사이에서 공유 되어야 한다.

- JOIN 시 사용되는 JOIN 연산자에 따라서 EQUI JOIN과 NON EQUI JOIN 으로 구별되며, FROM 절의 JOIN 형태에 따라서 INNER JOIN과 OUTER JOIN 으로 구별합니다.


Join 분류

1) JOIN 조건으로 사용되는 연산자에 따른 분류

JOIN설명
EQUI JOIN두 테이블 간의 칼럼 값들이 서로 일치하는 경우
JOIN 조건으로 '=' 연산자를 사용
NON EQUI JOIN두 테이블 간의 칼럼 값들이 서로 일치하지 않는 경우
JOIN 조건으로 'BETWEEN ~ AND' 등의 범위 비교 연산자를 사용


 2) FROM 절의 JOIN 형태에 따른 분류

JOIN설명
INNER JOINJOIN 조건에서 값이 일치하는 행만 반환
OUTER JOINJOIN 조건에서 한쪽 값이 없더라도 행을 반환


1. EQUI JOIN

- 두 테이블 간의 컬럼 값들이 서로 정확하게 일치하는 경우에 사용하는 JOIN으로 WHERE 절에 '=' 연산자를 사용하여 JOIN 조건을 명시합니다.

- 일반적으로 기본키, 외래키로 지정된 컬럼을 JOIN으로 많이 사용합니다.

  • EQUI JOIN 개념

(1)  EQUI JOIN 구문

SELECT table1.column_name, table2.column_name

FROM table1, table2

WHERE table1.column_name = table2.column_name;

- table1.column_name : 데이터를 검색할 테이블 및 열을 명시한다.

- table 이름 대신에 FROM 절에 기술한 테이블의 alias를 사용해도 된다.

- table1.column_name = table2.column_name : 두 테이블을 JOIN 시킬 JOIN 조건을 명시한다.

- table 이름 대신에 FROM 절에 기술한 테이블의 alias를 사용해도 된다.


(2) EQUI JOIN 예제

사원이 어떤 부서에서 근무하는지를 검색하시오.

SELECT employee.eno, employee.ename, department.dno, department.dname

FROM employee, department

WHERE employee.dno = department.dno;


사원이 어떤 부서에서 근무하는지를 검색하시오(별칭을 사용하시오).

SELECT e.eno, e.ename, d.dno, d.dname

FROM employee e, department d

WHERE e.dno = d.dno;


    

2. NON EQUI JOIN

두 테이블 간의 컬럼 값들이 서로 일치하지 않는 경우에 사용하는 JOIN 방법으로 WHERE 절에 보통 BETWEEN ~ AND, < , > 등의 비교 연산자를 사용하여 JOIN 조건을 작성합니다.

  • ON EQUI JOIN 개념

(1) NON EQUI JOIN 예제

사원이 받는 급여의 등급을 조회

SELECT e.ename, e.salary, s.grade

FROM employee e, salary s

WHERE e.salary BETWEEN s.low_sal AND s.high_sal; 



3. INNER JOIN

JOIN 조건을 만족하는 행만 반환하는 JOIN으로 FROM 절에 INNER JOIN 혹은 JOIN 절을 사용합니다. JOIN 조건은 ON 절에 명시합니다.

  • OUTER JOIN 개념

(1) INNER JOIN 구문

SELECT table1.column_name, table2.column_name, …

FROM table1 [INNER] JOIN table2

ON table1.column_name = table2.column_name;

- table1 [INNER] JOIN table2 : JOIN 할 테이블의 이름을 나열한다. INNER 를 생략해도 INNER JOIN 방식이 적용된다.

- ON table1.column_name=table2.column_name : JOIN 조건을 명시한다


(2) INNER JOIN 예제

사원정보와 사원이 근무하는 부서이름을 검색하시오.

▶ 아래 두 쿼리는 결과가 동일하다

-- 일반적인 조인 방식

SELECT e.eno, e.ename, d.dno, d.dname 

FROM employee e, department d

WHERE e.dno = d.dno;


-- INNER JOIN 을 사용한 방식

SELECT e.eno, e.ename, d.dno, d.dname 

FROM employee e INNER JOIN department e

ON e.dno = d.dno;


    

4. OUTER JOIN

조인 조건을 만족하지 않는 데이터를 처리하기 위한 JOIN의 확장 형태입니다. INNER JOIN 이 두 테이블에 있는 키 갑싱 일치하는 데이터만 가져오는 것에 비해 OUTER JOIN은 어느 한 쪽의 데이터를 모두 가져옵니다.

또한, 한 테이블의 행이 다른 테이블의 행에 대응되지 않을 때 반환된 결과 집합의 경우, 대응되지 않는 행을 갖고 있는 테이블로 확인된 모든 결과 집합 열에 대해 NULL값이 제공됩니다.

콤마(,) 대신 INNER JOIN을 사용 할 수 있으며, INNER는 생략 가능하다. Join 조건은 ON 절에 온다.


(1) OUTER JOIN 구문

SELECT table1.column_name, table2.column_name, …

FROM table1 {LEFT|RIGHT|FULL} OUTER JOIN table2

ON table1.column_name = table2.column_name;


- LEFT OUTER JOIN : JOIN 수행 시 왼쪽에 표기된 데이터를 기준으로 OUTER JOIN을 수행한다.

- RIGHT OUTER JOIN : JOIN 수행 시 오른쪽에 표기된 데이터를 기준으로 OUTER JOIN을 수행한다.

- FULL OUTER JOIN : 조인 수행 시 왼쪽, 오른쪽 테이블의 모든 데이터를 읽어 JOIN을 수행한다. LEFT OUTER JOIN과 RIGHT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일하다.


(2) OUTER JOIN 예제

사원이 어떤 부서에서 근무하는지를 검색하고, 부서를 아직 배정받지 못한 사원정보까지 함께 검색하시오

▶ 아래 두 쿼리의 결과는 동일하다.

SELECT e.eno, e.ename, d.dno, d.dname

FROM employee e LEFT OUTER JOIN department d

ON e.dno = d.dno;


SELECT e.eno, e.ename, d.dno, d.dname

FROM department d RIGHT OUTER JOIN employee e

ON e.dno = d.dno;


사원이 어떤 부서에서 근무하는지 검색하고, 부서를 아직 배정받지 못한 사원 및 사원이 아직 없는 부서정보도 함께 검색하시오.

SELECT e.eno, e.ename, d.dno, d.dname

FROM department d RIGHT OUTER JOIN employee e

ON e.dno = d.dno;




'Server > DBMS' 카테고리의 다른 글

[DBMS] HAVING 조건  (0) 2014.12.02
[DBMS] Group By  (0) 2014.12.02
[DBMS] NULL도 데이터이다  (0) 2014.12.02
[DBMS] 서브쿼리  (0) 2014.11.30
[DBMS] 집합연산자  (0) 2014.11.30