SQLD 13

SQLD 개념정리 (JOIN 수행 원리)

조인의 종류 * Nested Loop JOIN (NL Join) - 두 개의 테이블을 조인할 때 사용되며, 보통 내부 조인(inner join)에서 많이 사용됩니다. - 조인 컬럼에 적당한 인덱스가 있어서 자연조인(Natural Join)이 효율적일때 유용하다. - NL Join은 프로그래밍에서 사용하는 중첩된 반복문과 유사한 방식으로 조인을 수행한다. - 반복문의 외부에 있는 테이블을 선행테이블 또는 외부테이블(Outter Table)이라고 하고, 반복문의 내부에 있는 테이블을 후행테이블 또는 내부테이블(Inner Table)이라고 한다. - 결과 행의 수가 적은 테이블을 조인 순서상 선행 테이블로 선택하는 것이 전체 일량을 줄임. 조인이 성공하면 바로 조인 결과를 사용자에게 보여줌으로 온라인 프로그램..

SQLD 2023.11.14

SQLD 개념정리 (SQL 최적화 기본 원리)

옵티마이저와 실행계획 - 옵티마이징 : 최적화 한다. - 옵티마이저 : 옵티마이징을 수행, 성능을 가장 유리한 방향으로 이끄는 역할 수행. 즉, 최적의 실행방법, 실행계획(Execution Plan)을 짠다. - 동일 SQL문에 대해 실행계획이 달라도 쿼리의 실행 결과는 항상 같아야 한다. - 실행 계획 구성 요소 * 조인 순서 (Join Order) * 조인 기법(조인 방법) (Join Method) * 액세스 기법=액세스 방법 (Access Method) * 최적화 정보 (Optimization Information) * 연산 (Operator) * 질의 처리 예상 비용 (Cost) 규칙 기반 옵티마이저 - 규칙(우선순위)을 기반으로 실행계획을 작성 -> 실행계획을 생성하는 규칙을 이해한다면 누구나 ..

SQLD 2023.11.13

SQLD 개념정리 (절차형 SQL)

절차형 SQL - SQL문의 연속적인 실행이나 조건에 따른 분기처리를 이용하여 특정 기능을 수행하는 저장 모듈을 생성할 수 있다. Procedure, User Defined Function, Trigger 등이 있음. - 분기, 반복이 가능한 모듈화된 프로그램. DBMS에서 직접 실행됨 - 프로시저(Procedure), 사용자 정의 함수(User Defined Function), 트리거(Trigger) - [Oracle] PL/SQL - [SQL Server] T-SQL - PL/SQL은 여러 SQL문장을 BLOCK으로 묶고 한번에 BLOCK전부를 서버로 보내기 때문에 통신량을 줄여서 응용프로그램의 성능응 향상시킴. PL/SQL 특징 1. Block 구조로 되어있어 각 기능별로 모듈화 가능 2. 변수 상..

SQLD 2023.11.12

SQLD 개념정리 (DCL)

DCL (Data Control Language) - 유저를 생성하고 권한을 제어하는 명령어 (GRANT와 REVOKE) - 유저가 사용하는 모든 DDL(CREATE, ALTER, DROP, RENAME) 문장은 그에 해당하는 적절한 권한이 있어야만 가능 Oracle 기본 유저 종류 - SCOTT / TIGER (ID / PW) : 테스트용 샘플 유저 - SYS : DBA ROLE을 부여받은 유저 - SYSTEM : 모든 권한을 부여받은 DBA 유저 - 설치 시 패스워드를 설정 [ Oracle 권한부여 ] - DBA 권한을 가진 SYSTEM 유저로 먼저 => 다른 유저에게 권한을 주는 방식으로 진행 [ SQL Server 권한부여 ] - 유저 생성 전, 먼저 로그인을 생성해야 함 - 로그인을 생성할 수 ..

SQLD 2023.11.12

SQLD 개념정리 (윈도우 함수)

순위 관련 함수 * RANK - 동일한 값에 대해서는 동일한 순위를 부여 (1,2,2,4) - OVER절과 함께 사용 - ex) RANK() OVER (PARTITION BY partition_expression ORDER BY sort_expression [ASC | DESC], ...); -> PARTITION BY: 특정 기준에 따라 파티션을 나누고 각 파티션 내에서 순위를 부여합니다. -> ORDER BY: 순위를 매길 때 사용할 정렬 기준을 지정합니다. ASC는 오름차순, DESC는 내림차순을 나타냅니다. * DENSE_RANK - 동일한 순위를 하나의 등수로 간주 (1,2,2,3) - ex) DENSE_RANK() OVER (PARTITION BY partition_expression ORDE..

SQLD 2023.11.10

SQLD 개념정리 (GROUPING)

GROUPING - ROLLUP이나 CUBE에 의한 집계 산출물이 인자로 전달받은 컬럼 집합의 산출물이면 0을 반환하고, 아니면 1을 반환하는 함수입니다. -> 위 사진은 ROLLUP결과를 보여줍니다. -> 1번째 행에서 서비스ID와 가입일자 모두 ROLLUP에 집계로 활용되고 있으므로 GROUPING(서비스ID) == 0, GROUPING(가입일자) == 0을 반환합니다. -> 2번째 행에서는 ROLLUP 특성상 오른쪽에 있는 인자는 제거되고 1번째 인자만 집계되기 때문에 가입일자는 NULL이 나옵니다. -> 2번째 행에서의 GROUPING(서비스ID) == 0, GROUPING(가입일자) == 1을 반환합니다.

SQLD 2023.11.09

SQLD 개념정리 (View)

뷰 (View) - 가상테이블, VIEW, STORED QUERY 다 같은말 - 테이블은 실제로 데이터를 가지고 있는 반면, 뷰는 실제로 데이터를 갖지 않음. 뷰는 단지 뷰의 정의만을 가짐 뷰 특징 뷰의 장점 설명 독립성 테이블의 구조가 변경돼도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다. 편리성 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있다. 또한 해당 형태의 SQL문을 자주 사용할 때 뷰를 이용하면 편리하게 사용할 수 있다. 보안성 상위 관리자가 뷰를 생성할 때 조회할 수 있는 테이블과 칼럼을 지정할 수 있으므로 이용자가 접근 가능한 정보를 제한 할 수 있다.

SQLD 2023.11.08

SQLD 개념정리 (서브 쿼리)

서브 쿼리 - 단일행 또는 복수행 비교 연산자와 함께 사용 가능 - 서브 쿼리에선 ORDER BY를 사용 불가 -> 메인 쿼리의 마지막 부분에만 위치 가능 - 서브쿼리는 메인쿼리의 테이블의 컬럼 사용 가능 ( 메인 쿼리에선 서브 쿼리의 컬럼 사용 불가) - 서브쿼리가 SQL문에서 사용 가능한 곳 : SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT문의 VALUES절, UPDATE문의 SET절 (DELETE만 안됨) - 서브쿼리 안에 있는 테이블( = 조인할 테이블 ) 의 기본키가 2개면 WHERE절에서 조인도 기본키 두개 다 해줘야 한다. Un-Correlated 서브 쿼리 ( 비연관 서브쿼리 ) - 서브쿼리가 메인쿼리 테이블의 컬럼을 갖고 있지 않은 형태 ( 흔히 쓰는 ..

SQLD 2023.11.07

SQLD 개념정리 (NULL, NULL 관련 함수)

NULL - NULL 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다. 0은 숫자이고 공백은 하나의 문자이다. - 테이블을 생성할 때, NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 NULL 값을 포함할 수 있다. - NULL 값을 포함하는 연산의 경우 결과 값도 NULL 값이다. 모르는 데이터에 숫자를 더하거나 빼도 결과는 마찬가지로 모르는 데이터인 것과 같다. ex) 10 + NULL = NULL; - 결과값을 NULL이 아닌 다른 값을 얻고자 할때 NVL(Oracle) / ISNULL(MSSQL) 함수를 사용한다. NULL 값의 대상이 숫자 유형 데이터인 경우는 주로 0으로, 문자 유형 데이터인 경우는 블랭크보다는 'X'같이 해당 시스템에서 의미 없는 문자로 ..

SQLD 2023.11.06