IT_developers

SQL- scott(개념 + 실습)5 본문

SQL

SQL- scott(개념 + 실습)5

developers developing 2022. 8. 7. 12:00

집합 연산자 : union, minus, intersect

 

※ UNION - 합집합

1) deptno =10 or deptno=20 사원 조회

SELECT
    empno,
    ename,
    job
FROM
    emp
WHERE
    deptno = 10
UNION
SELECT
    empno,
    ename,
    job
FROM
    emp
WHERE
    deptno = 20;

UNION

  •  사용시 컬럼명을 동일하게 사용하기
  •  중복 값을 알아서 제거

ex) SELECT empno, ename, job FROM emp WHERE deptno = 10

UNION

SELECT mgr, ename, job FROM emp WHERE deptno = 20;

데이터 자료 타입만 맞으면 출력 가능. 

empno와 mgr이 넘버 타입이 같기 때문에 출력이 가능함.

그러니 꼭 컬럼명을 확인하고 작성.

 

※ UNION ALL : 중복 제거 안함

2) deptno =10 or deptno=10 사원 조회

SELECT
    empno,
    ename,
    job
FROM
    emp
WHERE
    deptno = 10
UNION ALL
SELECT
    empno,
    ename,
    job
FROM
    emp
WHERE
    deptno = 10;

 deptno가 같아서 중복된 숫자가 나옴.

 

3) deptno =10 or deptno=10 사원 조회

SELECT
    empno,
    ename,
    job
FROM
    emp
WHERE
    deptno = 10
UNION
SELECT
    empno,
    ename,
    job
FROM
    emp
WHERE
    deptno = 10;

UNION 만 사용 시 중복값은 제외하고 보여줌

 

※ MINUS : 차집합

4) 전체 emp 중에서 depno=10 제외

SELECT
    empno,
    ename,
    job,
    deptno
FROM
    emp
MINUS
SELECT
    empno,
    ename,
    job,
    deptno
FROM
    emp
WHERE
    deptno = 10;

20번, 30번만 출력

 

※ INTERSECT : 교집합

5) deptno=10만 출력

SELECT
    empno,
    ename,
    job,
    deptno
FROM
    emp
INTERSECT
SELECT
    empno,
    ename,
    job,
    deptno
FROM
    emp
WHERE
    deptno = 10; 

※ 연습문제

1) 사원 이름(ENAME)이 S로 끝나는 사원 데이터를 출력

SELECT
    *
FROM
    emp
WHERE
    ename LIKE '%S';

2)  30번 부서(DEPTNO)에서 근무하고 있는 사원 중에 직책(JOB)이 SALESMAN 인 원의 사원번호, 이름, 직책, 급여, 부서 번호를 출력

SELECT
    empno,
    ename,
    job,
    sal,
    deptno
FROM
    emp
WHERE
        deptno = 30
    AND job = 'SALESMAN';

3) 20번,30번 부서에 근무하고 있는 사원 중 급여(SAL)가 2000초과인 사원을 다음 두가지 방식의 SELECT 문을 사용하여 사원번호, 이름, 직책, 급여,부서 번호를 출력.

집합 연산자를 사용하지 않는 방식

 SELECT
    empno,
    ename,
    sal,
    deptno
FROM
    emp
WHERE
    deptno IN ( 20, 30 )
    AND sal > 2000;

집합 연산자를 사용하지 않는 방식 : MINUS

SELECT
    empno,
    ename,
    sal,
    deptno
FROM
    emp
WHERE
    sal > 2000
MINUS
SELECT
    empno,
    ename,
    sal,
    deptno
FROM
    emp
WHERE
    deptno = 10;

 

4) NOT BETWEEN A AND B 연산자를 쓰지 않고, 급여(SAL) 열 값이 2000 이상 3000이하 범위 이외의 값을 가진 데이터만 출력

SELECT
    *
FROM
    emp
WHERE
    sal < 2000
    OR sal > 30000;

5) 사원 이름에 E가 포함되어 있는 30번 부서의 사원 중 급여가 1000 ~ 2000 사이가 아닌 사원 이름, 사원번호, 급여, 부서 번호를 출력

SELECT
    ename,
    empno,
    sal,
    deptno
FROM
    emp
WHERE
    ename LIKE '%E%'
    AND deptno = 30
    AND sal NOT BETWEEN 1000 AND 2000;

6) 추가 수당이 존재하지 않고 상급자가 있고 직책이 MANAGER,CLERK인 사원 중에서 사원 이름의 두번째 글자가 L이 아닌 사원의 정보를 출력

SELECT
    *
FROM
    emp
WHERE
    comm IS NULL
    AND mgr IS NOT NULL
    AND job IN ( 'MANAGER', 'CLERK' )
    AND ename NOT LIKE '_L%';

 

※ 연산자 우선 순위

 

높음  (     ) 괄호 
  * , / 산술연산자
  + , - 산술연산자
  = , =!  , ^= , <> , > , >= , < , <= 대소비교연산자
  IS (NOT) NULL, (NOT)LIKE, (NOT)IN 비교연산자
  BETWEEN BETWEEN 연산자
  NOT 논리 부정 연산자
  AND 논리연산자
낮음 OR 논리연산자

 

'SQL' 카테고리의 다른 글

SQL - scott(개념 + 실습)7  (0) 2022.08.09
SQL - scott(개념 + 실습)6  (0) 2022.08.08
SQL - scott (개념 + 실습)4  (0) 2022.08.06
SQL - scott (개념+실습) 연산자  (0) 2022.08.05
SQL -scott (개념 + 실습) 2  (0) 2022.08.04
Comments