두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회할 때 사용하는 것을 말합니다. SELECT 절의 칼럼 수가 동일하고 SELECT 절의 동일 위치에 존재하는 칼럼의 데이터 타입이 상호 호환할 때 사용 가능합니다.
Union, Intersection, Difference, Product
Select, Project, Join, Divide
관계형 DB를 새롭게 구현
JOIN 조건에서 동일한 값이 있는 행만 반환합니다.
두 테이블 간의 동일한 이름을 갖 는 모든 칼럼들에 대해 EQUI JOIN 수행합니다.
ON 조건절과 WHERE 조건절을 분리하여 이해가 쉬우며, 칼럼명이 다르더라도 JOIN 조건을 사용할 수 있 는 장점이 있습니다.
ALIAS나 테이블명 반드시 사용해야합니다.
JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말 합니다.
즉, 양쪽 집합의 M*N건의 데이터 조합이 발생합니다.
먼저 표기된 좌측 테이블에 해당하는 데이터를 읽은 후, 나중 표기된 우측 테이블 에서 JOIN 대상 데이터를 읽어 옵니다.
우측 값에서 같은 값이 없는 경우 NULL 값으로 채웁니다.
LEFT OUTER JOIN의 반대로 작동합니다.
좌우측 테이블의 모든 데이터를 읽어 JOIN하여 결과를 생성합니다.
또한, UNION 기능과 같으므로 중복 데이터는 삭제합니다.
테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해서 계층형 질의(Hierarchical Query)를 사용합니다.
셀프 조인(Self Join)이란 동일 테이블 사이의 조인을 말합니다.
하나의 SQL문안에 포함되어 있는 또 다른 SQL문입니다. 알려지지 않은 기준을 이용한 검색에 사용합니다. 또한, 서브쿼리는 메인쿼리가 서브쿼리를 포함하는 종속적인 관계입니다.
다중 칼럼 서브쿼리는 서브쿼리의 결과로 여러 개의 칼럼이 반환되어 메인쿼리의 조건과 동시에 비교되는 것을 의미합니다.
다중 행 비교 연산자 : IN, ALL, ANY, SOME 등 스칼라 서브쿼리 : 한 행, 한 칼럼만을 반환하는 서브 쿼리
연관 서브쿼리(Correlated Subquery)는 서브쿼리 내에 메인쿼리 칼럼이 사용된 서브쿼리입니다.
한 행, 한 칼럼만을 반환하는 서브쿼리이고, 스칼라 서브쿼리라고 불립니다.
select 절에서 쓰이는 서브쿼리를 말합니다.
FROM 절에서 사용되는 서브쿼리를 인라인 뷰(Inline View)라고 합니다.
서브쿼리의 결과가 마치 실행 시에 동적으로 생성된 테이블인 것처럼 사용할 수 있습니다.
HAVING 절은 그룹함수와 함께 사용될 때 그룹핑된 결과에 대해 부가적인 조건을 주기 위해서 사용합니다.
테이블은 실제로 데이터를 가지고 있는 반면, 뷰(View)는 실제 데이터를 가지고 있지 않습니다.
뷰는 단지 뷰 정의(View Definition)만을 가지고 있습니다. 질의에서 뷰가 사용되면 뷰 정의를 참조해서 DBMS 내부적으로 질의를 재작성(Rewrite)하여 질의를 수행합니다. 뷰는 실제 데이터를 가지고 있지 않지만 테이블이 수행하는 역할을 수행하기 때문에 가상 테이블(Virtual Table)이라고도 한다.
CREATE VIEW V_PLAYER_TEAM AS SELECT ... ;
DROP VIEW V_PLAYER_TEAM;
그룹 함수를 사용한다면 하나의 SQL로 테이블을 한 번만 읽어 소계, 중계, 합계, 총 합계등을 손쉽게 추출할 수 있습니다.
GROUP BY ROLLUP (DNAME, JOB);
==
GROUP BY (DNAME, JOB)
UNION ALL
GROUP BY (DNAME)
UNION ALL
GROUP BY ()
ROLLUP, CUBE, GROUPING SETS 등 새로운 그룹 함수를 지원하기 위해 GROUPING 함수가 추가되었습니다.
소계가 계산된 결과에는 GROUPING(EXPR) = 1 이 표시되고, - 그 외의 결과에는 GROUPING(EXPR) = 0 이 표시됩니다.
결합 가능한 모든 값에 대하여 다차원 집계를 생성합니다.
ROLLUP에 비해 시스템에 부하가 심합니다.
GROUP BY CUBE(A, B) = GROUPING SETS(A, B, (A,B ), ())
인수들에 대한 개별 집계를 구할 수 있습니다.
다양한 소계 집합 생성이 가능합니다.
표시된 인수들 간에는 계층 구조인 ROLLUP과는 달리 평등한 관계이므로 인수의 순서가 바뀌어도 결과는 같습니다.
GROUPING SETS 함수 사용시 UNION ALL을 사용한 일반 그룹함수를 사용한 SQL과 같은 결과를 얻을 수 있으며, 괄호로 묶은 집합 별로(괄호 내는 계층 구조가 아닌 하나의 데이터로 간주함) 집계를 구할 수 있습니다.
행과 행간의 관계를 쉽게 정의하기 위해 만든 함수가 바로 WINDOW FUNCTION입니다. 즉, 행과 행간의 관계를 정의하거나 행과 행간을 비교합니다.
SELECT WINDOW_FUNCTION (ARGUMENTS) OVER ( [PARTITION BY 칼럼] [ORDER BY 절] [WINDOWING 절] ) FROM 테이블 명;
WINDOW 함수에는 OVER 문구가 키워드로 필수 포함됩니다.
WINDOW_FUNCTION : 기존에 사용하던 함수도 있고, 새롭게 WINDOW 함수용으로 추가된 함수도 있습니다.
ARGUMENTS (인수) : 함수에 따라 0 ~ N개의 인수 가 지정될 수 있습니다.
PARTITION BY 절 : 전체 집합을 기준에 의해 소그룹으로 나눌 수 있습니다.
ORDER BY 절 : 어떤 항목에 대해 순위를 지정할지 ORDER BY 절을 기술합니다.
WINDOWING 절 : WINDOWING 절은 함수의 대상이 되는 행 기준의 범위를 강력하게 지정할 수 있습니다.
예를 들어, ROWS는 물리적인 결과 행의 수를,
RANGE는 논리적인 값에 의한 범위를 나타내는데,
둘 중의 하나를 선택해서 사용할 수 있습니다.
다만, WINDOWING 절은 SQL Server에서는 지원하지 않습니다.
RANK : 동일한 값에 대해서는 동일한 순위를 부여 (1,2,2,4)
DENSE_RANK : 동일한 순위를 하나의 등수로 간 주(1,2,2,3)
ROW_NUMBER : 동일한 값이라도 고유한 순위 부 여 (1,2,3,4)
SUM : 파티션별 윈도우의 합 구할 수 있습니다.
예) 같은 매니저를 두고 있는 사원들의 월급 합
MAX, MIN : 파티션별 윈도우의 최대, 최소 값을 구할 수 있습니다.
예) 같은 매니저를 두고 있는 사원들 중 최대값
AVG : 원하는 조건에 맞는 데이터에 대한 통계 값
예) 같은 매니저 내에서 앞의 사번과 뒤의 사번의 평균
COUNT : 조건에 맞는 데이터에 대한 통계 값
예)본인의 급여보다 50 이하가 적거나 150 이하로 많은 급여를 받는 인원수
출처:https://gent.tistory.com/473
SQL Server 지원X
FIRST_VALUE : 파티션별 윈도우의 처음 값
LAST_VALUE : 파티션별 윈도우의 마지막 값
LAG : 파티션별 윈도우에서 이전 몇 번째 행의 값
LEAD : 파티션별 윈도우에서 이후 몇 번째 행의 값
RATIO_TO_REPORT : 파티션 내 전체 SUM에 대한 행별 칼럼 값의 백분율을 소수점으로 구할 수 있습니다.
범위) > 0, <=1
PERCENT_RANK : 파티션별 윈도우에서 처음 값을 0, 마지막 값을 1로 하여 행의 순서별 백분율을 구합니다.
범위) 0 >=,<=1
CUME_DIST : 현재 행보다 작거나 같은 건수에 대한 누적백분율을 구합니다.
범위) > 0, <=1
NTILE : 파티션별 전체 건수를 인수 값으로 N등분한 결과를 구할 수 있습니다.
유저를 생성하고 권한을 제어할 수 있는 DCL(DATA CONTROL LANGUAGE) 명령어입니다.
사용자가 SQL 문을 실행하기 위해 필요한 적절한 권한
GRANT : 권한 부여
REVOKE : 권한 취소
GRANT CREATE USER TO SCOTT;
CREATE USER PJS IDENTIFIED BY KOREA7;
GRANT CREATE SESSION TO PJS;
GRANT CREATE TABLE TO PJS;
REVOKE CREATE TABLE FROM PJS;
모든 유저는 각각 자신이 생성한 테이블 외에 다른 유저의 테이블에 접근하려면 해당 테이블에 대한 오 브젝트 권한을 소유자로부터 부여받아야 합니다.
오브젝트 권한은 특정 오브젝트인 테이블, 뷰 등에 대한 SELECT, INSERT, DELETE, UPDATE
작업 명령어를 의미합니다.
모든 유저는 각각 자신이 생성한 테이블 외에 다른 유저의 테이블에 접근하려면 해당 테이블에 대한 오브젝트 권한을 소유자로부터 부여받아야 합니다.
INSERT INTO MENU VALUES (1, '화이팅');
GRANT SELECT ON MENU TO SCOTT;
SELECT * FROM PJS.MENU;
유저를 생성하면 기본적으로 CREATE SESSION, CREATE TABLE, CREATE PROCEDURE 등 많은 권한을 부여해야 합니다.
데이터베이스 관리자는 유저가 생성될 때마다 각각의 권한들을 유저에게 부여하는 작업을 수행해야 하며 간혹 권한을 빠뜨릴 수도 있으므로 각 유저별로 어떤 권한이 부여되었는지를 관리해야 합니다.
하지만 관리해야 할 유저가 점점 늘어나고 자주 변경되는 상황에서는 매우 번거로운 작업이 될 것이기 때문에, 이와 같은 문제를 줄이기 위하여 많은 데이터베이스에서 유저들과 권한들 사이에서 중개 역할을 하는 ROLE을 제공합니다.
CREATE ROLE LOGIN_TABLE;
GRANT CREATE SESSION, CREATE TABLE TO LOGIN_TABLE;
GRANT LOGIN_TABLE TO JISUNG;
CREATE TABLE MENU2( MENU_SEQ NUMBER NOT NULL, TITLE VARCHAR2(10));
DROP USER JISUNG CASCADE;
- CASCADE : 하위 오브젝트까지 삭제 지성이 만든 테이블 삭제
SQL문의 연속적인 실행이나 조건에 따른 분기처리를 이용하여 특정 기능을 수행하는 저장 모듈을 생성할 수 있습니다.
저장 모듈에는 Procedure, User Defined Function, Trigger 등이 있습니다.
PL/SQL 문장을 DB 서버에 저장하여 사용자와 애플리케이션 사이에서 공유할 수 있도록 만든 일종의 SQL 컴포넌트 프로그램입니다.
독립적으로 실행 되거나 다른 프로그램으로부터 실행될 수 있는 완전 한 실행 프로그램이라고 할 수 있습니다.
Block 구조로 되어있어 각 기능별로 모듈화 가능
변수, 상수 등을 선언하여 SQL 문장 간 값을 교환
IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하도록 한다.
DBMS 정의 에러나 사용자 정의 에러를 정의하여 사용할 수 있다.
PL/SQL은 Oracle에 내장되어 있으므로 호환성이 좋다
응용 프로그램의 성능을 향상시킨다.
Block 단위로 처리 -> 통신량을 줄일 수 있다.
근본적으로 SQL Server를 제어하는 언어입니다.
특정한 테이블에 INSERT, UPDATE, DELETE
와 같은 DML문이 수행되었을 때, DB에서 자동으로 동작하도록 작성된 프로그램, 사용자 호출이 아닌 DB 자동 수행합니다.
출처: SQL 전문가 가이드 서적