2016년 2월 16일 화요일

[SQL 교육] Join

[SQL 교육] Join

(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.)
※ Oracle DB를 사용합니다.

1. Join

  1. Oracle에서 join 방법은 2가지 이다. (2가지 표준을 따른다.)
    1. ANSI join(9i 버전 이상)
    2. Oracle join(6, 7, 8 i 버전)
  2. 구문
    1. select a.열이름, b.열이름
      from 테이블A a, 테이블B b
      where a.외래키열 = b.주키열
    2. select a.열이름, b.열이름
    3. from 테이블A a
    4. join 테이블B b
    5. on a.외래키열 = b.주키열
  3. Oracle join
    1. Catasian Product
      1. where절에 조인 조건이 없는 조인을 말한다.
      2. 조인 조건이 없거나 잘못 주었을 경우 발생.
    2. Equi join
      1. 등호(=) 연산자로 조인 조건을 기술하는 조인
    3. Self join
      1. 동일 table에서 join
      2. 서로 다른 table에서의 조인으로 가정(논리적으로 서로 다른 table)
    4. Outer join
      1. 한 쪽에 값이 없거나 null일 때 사용하는 join
      2. left outer join
        1. 왼쪽 값이 없거나 null일 가능성이 있을 때 사용한다.
        2. 오른쪽 값에 (+) 표시를 한다.
      3. right outer
        1. 오른쪽 값이 없거나 null일 가능성이 있을 때 사용한다.
        2. 왼쪽 값에 (+) 표시를 한다.
  4. ANSI join
    1. join ~on
    2. join using
    3. natural join
    4. {left|right|full} [outer] join
      1. 값이 없거나 null인 쪽의 방향을 선택한다.
    5. cross join
      1. catasian product
  5. 관계
    1. 실선
      1. 한 테이블이 다른 테이블의 주키(PK)열을 참조 할 때는 실선으로 표시한다.
    2. 점선
      1. 한 테이블이 다른 테이블의 PK가 아닌 열을 찬조 할 때는 점선으로 표시한다.
    3. 다중도
      1. 1을 의미
      2. 0부터 1을 의미
      3. 1부터 여러 개를 의미
      4. 0부터 여러 개를 의미

[SQL 교육] 그룹 쿼리(Group Query)


[SQL 교육] 그룹 쿼리(Group Query)

(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.)
※ Oracle DB를 사용합니다.


1. 그룹 쿼리

  1. 그룹 행 함수(=복수 행 함수)
    1. count - 갯수
    2. sum - 합계
    3. avg - 평균
      1. 평균을 계산할 때 null값은 자동으로 배제된다.
      2. null인 행을 포함하여 평균을 계산하려면, 'sum(열이름)/count(*)'으로 계산한다.
    4. min - 최소값, max - 최대값
    5. variance - 분산
    6. stddev - 표준편차
  2. Group By
    1. ~별 ( 그룹을 지을 열들 )
    2. 구문
      1. group by 열
      2. group by (열1, 열2, … )
    3. 주의할 점!!
      1. select 절에는 group by 절의 열이 아닌 다른 열을 복수 행 함수 없이 사용 할 수 없다.
  3. Having
    1. group by 한 것에 조건을 건다.
    2. 예. 부서별 급여의 평균이 5000이상인
      1. 이 경우 '부서별 급여의 평균'이 그룹핑 한 것이고 그것을 조건 확인한다.
    3. group by의 앞에 올 수 도 있고, 뒤에 올 수도 있다.
  4. 집계 함수
    1. roullup
      1. 레벨별 집계
    2. cube
      1. 가능한 조합으로 집계
    3. grouping
      1. 어떤 컬럼이 그룹핑 작업에 사용되었으면 1, 그렇지 않았으면 0을 반환
    4. grouping_id
      1. 두 컬럼 다 그룹핑에 사용되면 3, A컬럼만 그룹핑에 사용되면 1, B컬럼만 그룹핑에 사용되면 2, 두 컬럼 모두 사용 안되면 0
    5. grouping sets
      1. 두 그룹에 대한 집계를 동시에 출력하고 싶을 때 사용한다.
  5. 집합 연산자
    1. union - 합집합
      1. 중복된 결과가 있으면 1개만 출력한다.
    2. union all - 합집합
      1. 중복된 결과가 있더라도 모두 출력한다.
    3. intersect - 교집합
    4. minus - 차집합
    5. 주의할 점!!!
      1. select 절에 있는 열의 개수,타입이 일치해야 한다.

[SQL 교육] 계층형 쿼리(Connect by, Prior)

[SQL 교육] 계층형 쿼리(Connect by, Prior)

(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.)
※ Oracle DB를 사용합니다.

계층형 쿼리에서 Connect by 절을 배우는데 prior를 어느쪽 열에 붙여야 하는지 이해가 겨우 되어서 잊기 전에 정리한다.

employees 테이블에는 employee_id, manager_id 열이 존재한다.

--모든 사원의 관계도를 출력하라.
select employee_id,
lpad(' ', 3*(level-1))||first_name||' '||last_name, level
from employees
start with manager_id is null
connect by prior employee_id=manager_id
order siblings by first_name;
--siblings by절에는 열별칭 사용 불가



위의 sql문에서 'start with manager_id is null'이라는 것은 employees 테이블에서 사장은 manager가 없기 때문에 null이다. 그래서 사장부터 시작하겠다는 의미이다.

그러고서 'connect by prior employee_id=manager_id'가 시작점부터 하위계층을 연결시켜주는 부분인데, employee_id에 prior가 붙은 의미는
-> start with에서 시작점 행을 출력했고, 이제 connect by에서 다음 행을 선택을 할 거다. 이때, 다음 행을 기준으로 manager_id가 이전 행의 employee_id와 같은 것을 선택해라.
라는 것이다.

즉, connect by는 다음에 선택 될 행을 기준으로 하고있다. 그래서 prior가 의미하는 것은 현재 출력되는 행을 의미한다.
그래서 'connect by prior employee_id=manager_id'는 현재 출력된 행의 employee_id와 다음의 선택 될 행의 manager_id가 같은 행들을 선택하라는 것이다.



2016년 2월 12일 금요일

[SQL 교육] SQL 구성요소

[SQL 교육] SQL 구성요소

(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.)
※ Oracle DB를 사용합니다.

1. SQL 구성요소

  1. 의사컬럼
    1. select 문장에서 사용할 수 있는 열들
    2. 종류
      1. rownum
        1. select 한 결과 집합들에 번호를 붙여준다.
        2. between A and B를 이용해서 윈도우 데이터를 찾을 때, A값이 1이 아니면 찾을 수 없다.
      2. rowid : 테이블에 저장된 각 행의 주소 값
  2. 연산자
    1. 수식 연산자
      • +, -, *, /
    2. 문자 연산자
      • || : 문자열을 연결한다.
    3. 논리 연산자
      1. 등호, 부등호
        • =, <, >, <=, >=
      2. 비동등 연산자
        • <>, !=, ^=
        • 세가지 연산자 모두 사용법과 반환 결과는 같다.
  3. 표현식
    1. CASE 표현식
      • 특정 조건에 따라 값을 변경해서 출력
      • 크거나 작은 조건을 처리할 경우 사용
      • case문으로 표현한 것은 decode문으로 표현 할 수 없는 경우도 있다.
    2. DECODE 표현식
      • 주로 동등비교(=)를 처리할 때 사용
      • decode로 표현한 것은 case문으로 표현 가능하다.
  4. 조건식
    1. ANY
      • 조건들 중 하나만 맞으면 된다.
      • OR조건으로 변환이 가능하다.
    2. ALL
      • 모든 조건을 만족해야 한다.
    3. 부동호와 함께 사용할 때의 의미
      • > ALL --가장 큰 값보다 큰
      • < ALL --가장 작은 값보다 작은
      • > ANY --가장 작은 값보다 큰
      • < ANY --가장 큰 값보다 작은
    4. AND, OR, NOT
      • and가 or보다 우선순위가 높다.
    5. IN
      • ANY와 같다.
    6. EXISTS
      • 후행 조건절로 값의 리스트가 아닌 서브 쿼리만 올 수 있다.
      • 서브 쿼리 내에서 조인 조건이 있어야 한다.
    7. LIKE
      • 문자열을 포함하는 행을 찾아준다.
      • 문자, 날짜 타입에서 사용할 수 있다. *. 문자열에 %(0개 이상 문자열), _(1개 문자)를 사용할 수 있다.
      • ex. 이름이 A로 시작하는 문자열 -> 'A%'

[SQL 교육] ORACLE SQL의 SEQUENCE

[SQL 교육] Oracle sql의 sequence

(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.)
※ Oracle DB를 사용합니다.



1. Oracle SQL의 sequence

  1. sequence
    1. 구성
      • create sequence 시퀀스이름
      • [increment by n] --증가 값, 기본값 1
      • [start with n] --시퀀스 시작번호, 기본값 1
      • [maxvalue n | nomaxvalue] --생성 가능한 시퀀스 최대값
      • [minvalue n | nominvalue] --최소값
      • [cycle | nocycle] --시퀀스 순환 여부
      • [cache n | nocache] --캐시 갯수
    2. 순번의 유일성은 보장해준다.
    3. 하지만 반드시 순차적인 순번은 보장해주지 않는다.
      • ex. merge문에서 nextval가 있는 문장이 조건에 걸리지 않더라도 순번이 증가한다.

[SQL 교육] SQL(DML)

[SQL 교육] SQL(DML)

(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.)
※ Oracle DB를 사용합니다.

  1. SELECT 조회
    1. 구성
      • select 추출하고 싶은 열
      • from 찾고자 하는 대상
      • join ~on 조인, 2개 이상의 테이블에서 검색할 때
      • where 행 제한
      • group by, having 그룹핑
      • order by 정렬
  2. INSERT 삽입
    1. 구성 1
      • insert into 테이블 이름
      • [(열이름)]
      • values 값들
    2. 구성 2
      • insert into ~ select ~
  3. UPDATE 수정
    1. 구성
      • update 테이블 이름
      • set 변경할 열, 값
      • where 변경할 행 조건
  4. MERGE : 데이터를 합칠 때 사용
    1. 조건에 따라서 insert가 되거나 update 해준다.
    2. 예. 2015년 고객정보를 2014년 고객정보에 병합할 때 고객에 따라 추가 되는 경우도 있고 수정되는 경우도 있을 것이다. 예전에는 이 경우 insert 따로 update 따로 해 주었는데, 이제 merge로 한번에 해결 할 수 있다.
    3. 예. 각 지점별로 Data를 각자 운영하다가 한 Data warehouse로 Data를 모을 때 사용 할 수 있다.

    4. 구성
      • merge into 테이블 이름 [alias]
      • using (target|view|subquery) [alias]
        on (join_condition)
      • when matched then
        update set col1=val1[, …]
      • when not matched then
        insert (column_lists) values (values_list);
  5. DELETE 행 삭제
    1. 구성
      • delete from 테이블 이름
      • where 행 조건
  6. COMMIT / ROLLBACK
    1. commit : 작업 적용
    2. rollback : 작업 취소
    3. savepoint : rollback 할 지점을 지정
      1. ex. rollback to savepoint 이름 : savepoint 지점까지만 취소
  7. TRUNCATE
    1. 테이블의 모든 항목을 삭제한다.
    2. 다음의 연산과 동일하다.
      • delete from 테이블 이름;
        commit;
    3. 확실히 삭제해도 되는 것이라면 truncate가 성능이 좋다.

2016년 2월 11일 목요일

[SQL 교육] DBMS

[sql 교육] dbms

(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.)
※ Oracle DB를 사용합니다.


  1. DBMS
    1. 데이터베이스를 관리할 있게 해주는 시스템
    2. DBMS 제공하는 벤더
      1. Oracle - Oracle(동시접송성이 좋지 않다.)
      2. Microsoft - MS SQL
      3. Dell - Dell EMC 인수. EMC DBMS 제공. 주로 storage
      4. 오픈소스
        1. MySQL(지금은 Oracle 인수)
        2. MariaDB(MySQL Oracle 인수되어 언제 상용화될지 몰라서 사람들이 많이 이동함.)
        3. PostgreSQL('포스트그레스큐:', '피쥐에스큐엘' 이라고 읽음)
          1. 동시접속성이 좋다.(KT 아이폰 예약에 사용한 사례가 있다. KT 많이 사용한다.)
    3. DBMS 성능 평가 요소
      1. CAP이론
        1. Consistency 일관성
          1. 값이 갑자기 혼자 바뀌어서는 안된다. (제어하지 않았는데도 변동되는 것이 없어야 한다.)
        2. Availability 가용성
          1. 언제든지 DB 접근하여 사용할 있어야 한다.
        3. Partition Tolerance
      2. 보통 DBMS들의 위의 3가지중 2가지(일관성과 가용성) 초점을 둔다.
  2. 수업에서 배울 SQL&PL/SQL 주요 내용
    1. SQL
      1. DML(데이터 조작 언어)
        1. CRUD(Create, Read, Update, Delete)라고 표현한다.
        2. 종류
          1. insert
          2. update
          3. delete
          4. select
      2. DDL(데이터 정의 언어)
        1. ex. create table, alter table
    2. PL/SQL
      1. 기본구조
      2. 제어문
      3. 함수
      4. 프로시저
      5. 트리거
      6. 예외처리
      7. 커서
    3. 연산자, 함수
    4. 트랜젝션 Transaction
      1. atomic : 여러 개의 문장들이 원자적으로 수행되도록 한다.
    5. 객체
      1. table
      2. index
      3. view
      4. sequence
      5. synonym
      6. partitioned table
    6. 조회
      1. select 이용
      2. 종류
        1. selection
          1. 내가 원하는 행만 뽑아내는
        2. production
          1. 내가 원하는 열만 뽑아내는
        3. join
          1. 두개 이상의 테이블에서 조회 하는
    7. Oracle Express Edition 11g 설치
      1. 설치방법이 아래 주소에 설명되어 있다. 수업과 동일하다.
      2. http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecOracle&wr_id=206
  3. Objects
    1. table : 실질적으로 데이터를 저장
      1. table 정의
        1. create table
        2. 타입과 이름
        3. 제약 조건
    2. view : 가상의 table, 단순한 쿼리문을 사용하기 위해서, 접근제어를 하기 위해서
    3. index : view 성능을 높이기 위해 만든
      1. pk/uk : 자동 생성
      2. 삽입/삭제가 빈번하지 않고 조회가 빈번하면 index 좋은 객체이다.
      3. 삽입/삭제가 빈번하면 매번 index(색인) 다시 정해줘야 하므로 비효율적이다.
    4. sequence : 자동으로 증가하거나 감소하는 .
    5. synonym : 동의어, 데이터베이스 객체에 대한 별칭을 부여한 객체
    6. partitioned table : 논리적으로는 1개의 Table이지만 실제로는 여러 파티션으로 나뉘어 저장한다.
    7. function, procedure
  4. Data Type
    1. DBMS마다 다를 있다.
    2. 문자
      1. char
        1. 고정길이
        2. ex. char(10) - 크기는 무조건 10
        3. 2000byte까지 가능
      2. varchar
        1. 가변길이
        2. ex. varchar2(10) - 크기는 저장한 문자열의 크기
        3. 4000byte까지 가능(한글 2000)
      3. nchar, nvarchar2
        1. 유니코드를 지원
      4. long
        1. 2GB까지 지원
        2. like 연산 불가능
    3. 숫자
      1. number
        1. number(p,s)
          1. p 소수점 기준 모든 유효숫자 자릿수를 의미, s 소수점 이하 유효숫자 자릿수
        2. float
        3. binary_float
          1. 최대 4byte
        4. binary_double
          1. 최대 8byte
    4. 날짜
      1. date
      2. timestamp
    5. LOB
      1. Large Object
      2. 대용량 데이터를 저장
      3. 종류
        1. CLOB : 문자형 대용량 객체
        2. BLOB : 이진형 대용량 객체
        3. NCLOB : 유니코드를 포함한 문자형 대용량 객체
        4. BFILE : 대용량 이진 파일에 대한 로케이터(위치, 이름) 저장
  5. Constraints 제약조건
    1. NN : 반드시 값을 필요
    2. UK : 유일 해야 한다. Null 가능하다.
    3. PK : 기본키
      1. UK, NN 만족해야 한다.
    4. FK : 다른 table 열을 참조한다.
    5. CK : 체크
      1. 입력 데이터를 체크해 특정 조건에 맞는 데이터만 입력 받는다.
      2. 값의 범위를 설정할 있다.
  6. 예시
    1. 고객정보를 저장
      1. NO : NUMBER(4), PK
      2. 이름 : VARCHAR2, NN
      3. 이메일 : VARCHAR2, UK
      4. 나이 : NUMBER(3)
    2. sql developer