2 minute read

SQL - 4

  • 조인(join)
  • 서브쿼리
  • 데이터 조작어(INSERT, UPDATE 등)



조인(join) - 1. 조인? (중요!!)

  • 두 개 이상의 테이블을 연결하여 하나의 테이블처럼 출력
  • Union 등의 집합연산자와는 다름
    • 집합연산자: column 개수 동일 // 조인: column 개수 상관없음
    • 집합연산자: 세로연결 // 조인: 가로연결
  • 별다른 조건없다면, ‘출력 행 개수 = [테이블1] x [테이블2]’

joinWhere

  • select문에서 열 선택할 때는, 어떤 테이블의 열인지 표기!
  • 테이블마다 별칭 지정 가능(지정 후 select문, where문 등에서 구분자로 사용)

joinAs



조인(join) - 2. 조인 종류

  • 내부 조인
    • 등가 조인: ‘=’ 사용, 각 테이블의 특정 열에 일치하는 데이터를 출력
    • 비등가 조인: 등가조인 외 범위설정 등

      ex. SELECT * FROM EMP E, SALGRADE S WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

    • 자체 조인: 하나의 테이블을 여러 테이블처럼 사용

      별칭 사용하여 서로 다른 테이블처럼 사용

equiJoin

joinSelf

  • 외부 조인
    • left outer join: 왼쪽 테이블의 항목(열)을 전체 출력
    • right outer join: 오른쪽 테이블의 항목(열)을 전체 출력
    • full outer join: 두 테이블의 모든 항목(열) 출력

      교재 p.231 벤 다이어그램 참고!

joinOuter



조인(join) - 3. SQL-99 표준문법으로 배우는 조인

  • NATURAL JOIN
    • ‘등가조인’처럼 사용
    • 자동으로 조인 기준 열 지정해준다!!
  • JOIN ~ USING
  • JOIN ~ ON



조인(join) - 4. 3개 이상의 테이블 조인?

  • ‘오라클’에서 3개 이상의 테이블 조인할 때

    FROM TABLE1, TABLE2, TABLE3
    WHERE TABLE1.COL = TABLE2.COL
    AND TABLE2.COL = TABLE3.COL

  • ‘SQL-99’에서 3개 이상의 테이블 조인할 때

    FROM TABLE1. JOIN TABLE2 ON (조건식)
    JOIN TABLE3 ON (조건식)



서브쿼리 - 1. 서브쿼리? (중요!!)

  • SQL문 속 또 다른 SQL문

    ex.

subQuery

subQuery2

  • 서브쿼리 특징
    • 비교/조회 대상의 오른쪽에 괄호()로 묶어서 사용
    • 대부분의 경우, 서브쿼리에선 ORDER BY절 사용 불가!
    • 메인쿼리의 비교 대상과 같은 자료형, 같은 개수여야 함!
    • 메인쿼리의 연산자 종류와 호환 가능해야 함!

      ex. 메인쿼리의 연산자가 하나의 데이터로만 연산 가능하다면,
      서브쿼리의 결과 행 수는 반드시 하나여야 함!



서브쿼리 - 2. 서브쿼리 연산자

  • 단일행: 서브쿼리의 결과가 하나 => 비교연산(>=, !=, =…)
  • 다중행: 서브쿼리의 결과가 여러개 => IN, ANY, SOME, ALL 등
    • IN: 메인쿼리의 데이터가 서브쿼리 결과와 일치하는 항목들만 출력
    • ANY/SOME: 메인쿼리 조건식을 서브쿼리 결과 중 하나라도 만족하면 출력
    • ALL: 메인쿼리 조건식을 서브쿼리 결과 모두가 만족하면 출력
    • EXISTS: 서브쿼리의 결과가 존재하면(즉, 행이 1개이상), 메인쿼리 실행



서브쿼리 - 3. 다중열 서브쿼리

    1. 메인쿼리의 비교할 열, 괄호로 묶음
    1. 괄호로 묶은 데이터와 같은 자료형 데이터를 서브쿼리에 명시

subQueryMultiColumn



서브쿼리 - 4. FROM절에 사용하는 서브쿼리 & WITH절

  • FROM절에 사용하는 서브쿼리 = ‘인라인 뷰(inline view)’

    일부 데이터를 먼저 추출, 별칭 지정 후 사용가능

subQueryInlineView

  • ‘WITH절’

    메인쿼리 전에, 사용할 서브쿼리와 별칭을 미리 지정

subQueryWith



서브쿼리 - 5. SELECT절에 사용하는 서브쿼리

  • SELECT절에 하나의 열 영역으로서 결과 출력
  • 교재 P.261 확인



데이터 조작/정의/제어

  • DDL(Data Definition Language): 데이터 정의어

    CREATE, ALTER, DROP, RENAME, TRUNCATE

  • DCL(Data Control Language): 데이터 제어어

    GRANT, REVOKE

  • DML(Data Manipulation Language): 데이터 조작어

    SELECT, INSERT, UPDATE, DELETE



데이터 조작어 - 1. INSERT문: 테이블에 데이터 추가

  • 기본문

    INSERT INTO 테이블 이름[(열1, 열2... ... 열N) 생략가능]
    VALUES (열1에 넣을 데이터, 열2에 넣을 데이터, ... ... 열N에 넣을 데이터);

    • 테이블의 열(column) 개수에 맞게 values 입력!
    • 테이블의 열(column) 순서에 맞는 values 입력!
  • 날짜 데이터도 입력 가능



데이터 조작어 - 2. UPDATE문: 테이블에 데이터 수정

  • 기본문

    UPDATE [변경할 테이블]
    SET [변경할 열1]=[데이터], [변경할 열2]=[데이터], ... [변경할 열N]=[데이터],
    WHERE [데이터를 변경할 대상 행을 선별하기 위한 조건];

  • ROLLBACK

    UPDATE / DELETE 사용 이전으로 되돌리기!

  • COMMIT

    UPDATE / DELETE 실행을 완료!
    COMMIT 이후에는 ROLLBACK 불가






기타(팁)

  • 테이블 복제 (임시 테이블 생성)

tableCopy



다음 강의 준비

  • SQL 강의 두 번 남음.. 진도 빨리 나갈 듯






nice!!!

Updated: