SQL 중급 - 복습 2

강용구·2021년 5월 3일
SELECT ename
     , sal
  FROM emp
  WHERE sal > (SELECT sal
                FROM emp
                WHERE ename = 'JONES')


서브쿼리 : 쿼리를 두번 실행해야 얻을 수 있는 결과를 한번에 추출하는 방법

SELECT ename
     , sal
  FROM emp
  WHERE sal IN (SELECT sal
                  FROM emp
                  WHERE job = 'SALESMAN')


다중 행 서브쿼리 : 서브쿼리에서 메인 쿼리로 하나의 값이 아니라 여러 개의 값이 반환되는 것을 다중 행 서크쿼리 라고 한다.

SELECT ename
     , job
  FROM emp
  WHERE empno NOT IN (SELECT mgr
                        FROM emp
                        WHERE mgr IS NOT NULL)


서브 쿼리문에서 NOT IN을 사용할 때는 반드시 서부 쿼리문에서 메인 쿼리문으로 NULL값이 리턴되지 않게 해야 한다.

SELECT *
  FROM dept d
  WHERE EXISTS(SELECT *
                 FROM emp e
                 WHERE e.deptno = d.deptno)


EXISTS : 테이블A에 존재하는 데이터가 테이블B에도 존재하는지 여부를 확인할 때 사용. 존재하지 않는 데이터를 검색할 때는 NOT EXISTS를 사용한다.

SELECT job
     , SUM(sal)
  FROM emp
  GROUP BY job
  HAVING SUM(sal) > (SELECT SUM(sal)
                       FROM emp
                       WHERE job = 'SALESMAN')


HAVING : 그룹 함수로 검색 조건을 작성할 때는 WHERE절을 사용할 수 없다.

SELECT v.ename
     , v.sal
     , v.순위
  FROM (SELECT ename
             , sal
             , RANK() OVER (ORDER BY sal DESC) 순위
          FROM emp) v
  WHERE v.순위 = 1


in line view : FROM절의 서브쿼리를 지칭한다. WHERE절에는 분석 함수를 사용할 수 없으므로, FROM절에 서브쿼리문을 사용하여, 서브 쿼리문이 먼저 실행되게 하고 출력된 결과 데이터를 하나의 집합으로 만든다.

INSERT INTO emp (empno
                , ename
                , sal
                , hiredate
                , job)
  VALUES(2812, 'JACK', 3500, TO_DATE('2019/06/05', 'RRRR/MM/DD'), 'ANALYST')

INSERT INTO : 이미 있는 테이블에 데이터를 입력하는 쿼리. INSERT INTO 다음에 입력하고자 하는 테이블 명을 작성한다. 그리고 괄호를 열어 데이터를 컬럼명 순서대로 기술한다. VALUES 다음에 입력하고자 하는 데이터 값을 컬럼 순서대로 작성한다. 문자와 날짜 양쪽에 싱클 쿼데이션 마크를 둘러줘야 한다.

UPDATE emp
  SET sal = 3200
  WHERE ename = 'SCOTT'

UPDATE : 테이블 일부 데이터를 변경/업데이트 하는 쿼리.
COMMIT : COMMIT 이전에 수행했던 작업들을 데이터베이스에 영구히 반영하는 언어.
ROLLBACK : 마지막 COMMIT 명령어를 수행한 이후 DML(Data Manipulation Language)문을 취소하는 TCL(Transaction Control Language)
SAVEPOINT : 특정 지점까지의 변경을 취소한다.

profile
Lifetime Value Creator

0개의 댓글