DB/ORACLE

12.[오라클]SQL문 관련 정리하기

혼자좀비 2024. 1. 21. 19:32
  1. SELECT
    SELECTFROM employees a,  departments b WHERE a.department_id = b.department_id;
    기본적으로 개발하다 보면 별칭(alias)라고 말하는데 가끔 "아 뭐였더라???"라고 생각하게 된다...
    (내 머리는 메모리카드라 휘발성이 강하다...쩝)

    여기서 a,b로 명시한 부분을 별칭(alias)라고 한다.
    (칼럼에서 AS문을 붙이는 부분도 별칭이라고 한다.)
     a.employee_id, a.emp_name, a.department_id,  b.department_name AS dep_name
  2. INSERT
    아래와 같이  insert하게 되면 에러가 안난다. 여기서 col3에 있는 타입이 date인데 2번째에는 '2024-01-01'로 insert하였는데 정상적으로 들어갔다..그리고 col1칼럼에서 두번째 부분에 숫자형식인 10을 입력하였는데 정상적으로 등록되었다.
    이 부분은 사용자가 직접 데이터 타입을 변환을 한 것으로 '명시적 형변환' 이라고 한다.
    이 부분이 '묵시적 형변환' 으로 자동으로 데잍터 타입이 변환되는 것을 의미한다.
    • INSERT INTO test_1 (col1, col2, col3)VALUES ('TEST','10', SYSDATE);
    • INSERT INTO test_1 (col1, col2, col3)VALUES (10,'10','2024-01-01'); 
  3. UPDATE
    upddate test_1 set col2=50;을 쓰면 test_1에 있는 col2칼럼을 50으로 전체적으로 update한다..
    (이런식으로 쓰면 데이터 원복하기 어려우니 조건문을 달아서 쓰는걸 추천한다.)
    그리고 null부분에 대한 체크는 is null로 체크해야 한다.(where col3=''같은 형식으로 조회하면 망한다..)
    upddate test_1 set col2=50 where col3 is null;

  4. MERGE
    간단히 말해서 테이블에 해당 조건이 있으면 UPDATE,없으면 INSERT하는 문장이다.
    MERGE INTO [스키마].[테이블명]
    USING (UPDATE나 INSERT될 데이터 원천) ON (UPDATE될 조건)
    WHEN MATCHED THEN
                SET 칼럼1=값1,컬럼2=값2..........
    WHERE [UPDATE조건]
                DELETE WHERE update_delete조건
    WHEN NOT MATCHED THEN
               INSERT(칼럼1,칼럼2.....)values(값1,값2....)
               where insert 조건;
    예)
    MERGE INTO merge_test d
         USING (SELECT merge_id, salary, manager_id
                  FROM merges
                 WHERE manager_id = 146) b
            ON (d.merge_id = b.merge_id)
     WHEN MATCHED THEN 
          UPDATE SET d.bonus_amt = d.bonus_amt + b.salary * 0.01
     WHEN NOT MATCHED THEN 
          INSERT (d.merge_id, d.bonus_amt) VALUES (b.merge_id, b.salary *.001)
           WHERE (b.salary < 8000);
  5. DELETE
    데이터 삭제 : DELETE FROM [스키마].[테이블명] PARTITION (파티션명) WHERE DELETE 조건;
    테이블 삭제 : DELETE TEST_TABLE;
  6. COMMIT
    변경된 데이터를 반영할때 쓴다.(툴에서 AUTO COMMIT이 설정 되어있으면 자동 반영됨)
  7. ROLLBACK
    COMMIT 되기 전 이전상태로 되돌린다.(AUTO COMMIT으로 COMMIT되면 되돌릴수 없음)
  8. TRUNCAT
    한번 실행하면 데이터가 바로 삭제 되고 ROLLBACK을 실행하더라도 삭제 전 상태로 복귀 못함.
    (테이블에 있는 데이터를 비우기 위해 사용된다.)
  9. 의사컬럼
    테이블의 컬럼처럼 동작 하지만 실제로는 테이블에 저장되지 않는 컬럼
    계층형 사용 의사컬럼 : CONNECT_BY_ISCYCLE,CONNECT_BY_ISLEAF,LEVEL
    시퀀스 사용 의사컬럼 : NEXTVAL,CURRVAL
    순서시 사용 의사컬럼 : ROWNUM,ROWID
  10. 수식연산자 : -,+,*,/,||
  11. 논리연산자 : >,<,>=,<=,=,<>,!=,^=
  12. 집합연산자 : UNION,UNION ALL,INTERSECT,MINUS
  13. 계층형 쿼리 연산자 : PRIOR ,CONNECT_BY_ROOT
  14. 표현식
    CASE WHEN 조건1 THEN 값1
               WHEN 조건2 THEN 값2
    ......
              ELSE 기타 값
    END;
  15. 조건식
    ※비교 조건식 : ANY,SOME,ALL
          ANY : 아무것,하나라는 뜻으로 조건중 조건에 하나라도 일치하면 추출을 한다.(OR조건과 같다)
          예) WHERE salary = ANY (2000, 3000, 4000)
                 - 하나라도 일치하면 나온다.
          ALL : 모든 조건이 일치할 경우에만 추출한다.
          예)WHERE salary = ALL (2000, 3000, 4000)
                - 3가지조건이 일치해야 나온다.
    ※논리 조건식 : AND,OR,NOT
         AND : 그리고의 조건
          OR : 또는 조건
          NOT : 아닌 조건
    ※NULL 조건식 : IS NULL , IS NOT NULL
          IS NULL : NULL인것
          IS NOT NULL : NULL이 아닌것
          (빈값일 경우에는 WHERE TEST = ''형식으로 찾아야 한다. 빈값도 값이다. NULL이 아니다.)
    ※BETWEEN AND 조건식 : 범위 비교
    ※IN조건식 : 명시한 값에 포함되어있는 부분을 반환 ANY와 같음
    ※EXISTS조건식 : IN과 비슷하지만 후행조건 절로 값의 리스트가 아닌 서브 쿼리만 올 수 있다.
    ※LIKE조건식 : 문자열의 패턴을 검색할때 사용한다.
         예) WHERE TEST_NAME LIKE '나의이%' <-나의이~~~로 전체가 조회 
              WHERE TEST_NAME LIKE '나의이_'<-나의 이~로 갯수에 맞게 조회

'DB > ORACLE' 카테고리의 다른 글

14.[오라클]집계함수 정리  (0) 2024.02.05
13.[오라클]SQL함수 정리  (0) 2024.01.28
11.[오라클]파티션테이블 정리  (1) 2024.01.21
10.[오라클 공부]시퀀스 정리  (0) 2024.01.21
9.[오라클]시노님(Synonym) 정리  (0) 2024.01.17