SQL스터디/SQL자격검정시험_정리

SQL 자격 검정 실전문제_활용파트(4)

hozy연 2022. 9. 4. 00:09

#1 표준 조인

1) 순수 관계 연산자: relation 구조와 특성을 이용하는 연산자

- SELECT : WHERE 절로 구현 (조건에 맞는 행 추출)

- JOIN : 다양한 JOIN 기능으로 구현 (두개 테이블 관계)

- DIVIDE : 현재 사용되지 않음

- PROJECT : SELECT절로 구현 (제시된 속성값만 추출해서 새로운 relation 만듦 / 이때 중복은 제거됨)

 

2) From 절의 JOIN 형태

- INNER JOIN : 한번에 2개가 동시에 올 수 없음

- NATURAL JOIN (자동 JOIN됨--> ALAS X)  

- USING 조건절 (자동 JOIN됨--> ALAS X)  

- ON 조건절

    -BETWEEN 1 AND 3일 경우 1,2,3을 의미함 

- CROSS JOIN (product 개념 --> 조건절이 없을 경우 = 겹치는 열이름이 없을때)

- OUTER JOIN (LEFT, RIGHT, FULL)/(+) : 겹치는거 다 살리고 LEFT이면 겹치는거 이외희 RIGHT 테이블 제거 (반대 똑같음)

    - FULL OUTER : LEFT OUTER UNION RIGHT OUTER

    - UNION vs. UNION ALL : UNION은 중복제거 / UNION ALL은 중복제거 X --> UNION ALL이 연산 더 빠름

* JOIN에서 ORDER BY는 SELECT 이후에 수행됨(마지막에 수행됨)

 

3) 집합 연산자 종류

- UNION: 중복 제거 합집합

- UNION ALL: 중복 살리고 합집합 / 열이 겹칠 경우 ALAS 는 하나로 함(먼저 나온 것으로) / UNION ALL은 데이터를 2배로 가져옴

예시_ 이럴경우 추출되는 열은 AAA & AAB

- INTERSECT : 교집합--> 중복 제거 (INNER JOIN의 경우 중복 제거됨) / 따라서 1:1 양쪽 필수 관계에서 결과값은 같아짐

- EXCEPT(=MINUS): 차집합

 

 

#2 계층형 질의 (상위 하위 존재하는 query_열이름에 상위 하위있는지 확인하기)

1) 특징

- CTE: 메모리상에 존재하는 table 호출

- 재귀 : start 앵커 멤버 실행 (= 처음 시작을 정의)

- WHERE절은 필터 조건만 시행

- PRIOR은 SELECT, WHERE, CONNECT BY에서 쓸 수 있음
   -PRIOR 자식=부모 : 순방향(부모-->자식)

 

2) 문제 풀때 유의하기

- level 확인 (어떤게 start인지): START WITH

- level (start 점) 기준으로 위아래 순서 확인

- JOIN 확인

- ORDER BY 확인: ORDER SIBLINGS BY(형제 노드 사이에서 정렬을 수행)

 

3) 기타

- SELF JOIN : 한 테이블 내에서 두 칼럼이 연관 관계가 있을 경우

    - 일자별 누적 구하는 문제에서 SELECT 열은 큰값을 가지는 열이어야함!

- DISTINCT: 중복 제거

- || : 연결 연산자 (ex. A||B : A열과 B열에 있는 값을 합친다)

 

#3 서브 쿼리

1) 서브 쿼리의 종류

- Single Row 서브 쿼리 (단일 행 서브쿼리) : 단일행 비교 연산자 < = > => =< <> +(IN, ALL, ANY, SOME, EXISTS 가능)

- Multi Row 서브 쿼리 (다중 행 서브쿼리): IN, ALL, ANY, SOME, EXISTS

    - IN vs. EXISTS

       IN(=or, 여러개의 값 중 하나라도 일치하게 되면 불러와+ NULL값 존재하면 FALSE )

       EXISTS(TRUE or not 존재하는지만 체크+ NULL값 존재해도 TRUE)

- Multi Column 서브 쿼리 (다중 칼럼 서브쿼리): 여러 컬럼 반환, 메인 쿼리 조건절에서 여러 칼럼을 동시에 비교 가능 but 서브 쿼리& 메인 쿼리에서 비교하고자 하는 칼럼 개수와 칼럼의 위치가 동일해야함 (SQL에서 지원 X)

- 스칼라쿼리: SELECT 절에 사용하는 서브쿼리로서 JOIN을 대체하는 목적으로 자주 쓰임

- INLINE VIEW: FROM 절에서 사용되는 서브쿼리로 하나의 테이블에 대한 view로 쓰인다 (=DYNAMIC VIEW)

* 서브쿼리는 ORDER BY 쓸 수 없음! 하지만 ORDER BY 안에서는 서브쿼리 쓰는 건 가능

 

2) 동작 방식에 따른 서브쿼리

- 비연관 query: 서브쿼리가 메인쿼리의 column을 가지지 않음 (주로 메인쿼리에 값을 제공하기 위한 목적으로 사용함)

- 연관 query: 서브쿼리가 메인쿼리의 column을 가짐 (조건으로 메인쿼리의 열을 사용함)

 

3) VIEW 사용의 장점

- 독립성

-편리성

-보안성

 

#4 그룹 함수

- ROLL UP : 집계함수 (group by랑 같이쓰임)

- NVL: data값이 null일때 임의 설정값으로 처리

- GROUP BY 없이 HAVING절 사용 가능함

- 코드 보는 순서: FROM>ON>GROUP BY>SELECT

 

1) GROUP BY CUBE: 집계 가능한 모든 결합

   EX) GROUP BY CUBE (A.설비ID, B.에너지코드): 설비 ID와 에너지 코드 가능한 모든 조합을 결합하게됨

 

2) GROUPING SET: 계층 구조 없이 열에 대한 합계만을 각각 생성

   EX) GROUPING SETS((A.설비ID),(B.에너지코드),(A.설비ID, B.에너지코드),()) : 모든 조합을 보기 위해 각각 다 불러옴

* 단 ROLLUP에 비해 시스템에 부담을 주므로 CUBE 사용에 주의해야함

 

#5 윈도우 함수_ GROUP BY절과 같이 들어갈때 문제 나옴..!

1) RANK: 순위

    - RANK: 동일순위, 중간순위는 무시

    - DENSE_RANK: 동일 순위, 중간 순위도 활용

    - ROW_NUMBER: 유일 순위 

 

2) 일반 집계(SUM, COUNT, MAX, MIN, AVG)

 

3) 그룹내 행 순서 (first_value, last_value, LAG, LEAD)

   - LAG: 바로 앞의 값

   - LEAD : 바로 뒤의 값

* 글자수가 긴게(LEAD 4글자) 뒤의 값을 의미한다고 생각하기

 

4) 그룹내 비율 함수

 

특징 (무조건 OVER 들어감)

- PARPITION과 GROUP BY 구문은 의미적으로 유사함

- PARTITON 구문이 없으면 전체 집합을 하나의 PARTITION으로 정의한다

- 윈도우 함수 적용 범위는 PARTITION을 넘을 수 없다

- 윈도우 함수는 group by절에 의한 group 함수의 값을 모두 구한 후에 윈도우 함수가 실행된다

- order by까지 모두 실행된 후 window 함수가 실행된다

 

#6 권한 부여 (DCL)

1) 권한 부여

GRANT privileges(=SELECT, INSERT, UPDATE) [ON OBJECT] TO USER;

* GRANT CREATE SESSION TO USER; (여기서는 ON 사용 금지!)

 

2) 권한 회수

REVOKE privileges(=SELECT, INSERT, UPDATE) [ON OBJECT] TO USER;

* REVOKE INSERT ON R FROM KIM CASCADE; # KIM이 다른 사람에게 부여한 INSERT 권한도 함께 회수됨

 

3) ROLE

관리자가 사용자별로 권한을 관리해야하는 부담과 복잡함을 줄이기 위하여 다양한 권한을 그룹으로 묶어 관리할 수 있도록 사용자와 권한 사이에서 중개 역할을 수행하도록 기능을 제공

 

#7 절차형 SQL(PL/SQL)

1) 특징

- BLOCK 구조_ 통신량을 줄일 수 있다. 한번에 block으로 전부를 서버로 보내기 때문

- 절차적 프로그래이 가능하도록 함(IF, LOOF)

- DBMS 정의 에러나 사용자 정의 에러를 정의하여 사용가능

- 오라클에 내장되어 있음

- 응용 프로그램의 성능을 향상

- PROCEDURE, TRIGGER, USER DEFINED FUNCTION 객체를 PS/SQL로 작성할 수 있음

- TRANSACTION 별로 PROCEDURE, USER DEFINED FUNCTION 호출 가능하다

 

 2) ROLLBACK 불가능하게하기 : execute immediate 'TRUNCATE TABLE DEPT':

 

3) 저장 모듈

- SQL 문장을 데이터 베이스 서버에 저장하여 사용자와 애플리케이션 상이에서 공유할 수 있도록 만든 일종의 SQL 컴포넌트 프로그램

- 독립적으로 실행되거나 or 다른 프로그램으로부터 실행될 수 있는 완전한 실행 프로그램

- 오라클 저장 모듈에는 PROCEDURE, USER DEFINED FUNCTION, TRIGGER 존재

* PROCEDURE vs. TRIGGER?

PROCEDURE> CREATE PROCEDURE 문법사용 / EXECUTE 명령어로 실행 / COMMIT, ROLLBACK 실행 가능

TRIGGER> CREATE TRIGGER 문법 사용/ 생성 후 자동으로 실행 / COMMIT, ROLLBACK 실행 안됨

(즉, TCL(ROLLBACK, COMMIT) 사용 안됨, 트랜젝션제어X)

 

 

* 정말 긴~~ 코드문제가 나온다면!!

* 먼저 지문을 읽고 핵심 단어 체크 + 핵심단어에 해당하는 코드 체트 + 대략적으로 flow 글로 써본 후 선지로!

* 2개를 고르는 문제 꼭 표시하기

* 옳은 것 옳지 않은것!!! 확인 꼭 꼭!!