SQLD

    4-7 DCL

    4-7 DCL

    DCL 개요 지금까지 살펴본 SQL 문장을 분류하면 테이블 생성과 조작에 관련된 명령어(DDL)와, 데이터를 조작하기 위한 명령어(DML), 그리고 TRANSACTION을 제어하기 위한 명령어(TCL)가 있었다. 추가로, 이런 명령어들 이외에도 유저를 생성하고 권한을 제어할 수 있는 DCL(DATA CONTROL LANGUAGE) 명령어가 있다. 유저와 권한 다른 부서/다른 회사 간 데이터 공유를 위해 DB를 오픈해야 하는 경우가 있을 수 있다. 이 때 DB 오픈 자체가 데이터 손실 우려가 크다. 이런 경우엔 새로운 유저를 생성하고 생성한 유저에게 공유할 테이블이나 기타 오브젝트에 대한 접근 권한만 부여하면 쉽게 해결할 수 있다. 일반적으로 회원제 웹사이트를 방문하여 서비스를 이용하려면 먼저 회원 가입을..

    4-6 윈도우 함수

    4-6 윈도우 함수

    WINDOW FUNCTION 개요 기존 관계형 DB는 칼럼간의 연산/비교/연결/집합에 대한 집계는 쉬운 반면, 로우간의 관계 정의/비교/연산하는 것을 하나의 SQL 문으로 처리 하는 것은 매우 어려운 문제였다. PL/SQL, SQL/PL, T-SQL, PRO*C 같은 절차형 프로그램을 작성하거나, INLINE VIEW를 이용해 복잡한 SQL 문을 작성해야 하던 것을, 그나마 행간 관계 정의를 쉽게하기 위해 만든 함수가 바로 WINDOW FUNCTION이다. 윈도우 함수를 활용하면 복잡한 프로그램을 하나의 SQL 문장으로 쉽게 해결할 수 있다. 분석 함수ANALYTIC FUNCTION나 순위 함수RANK FUNCTION로도 알려져 있는 윈도우 함수(ANSI/ISO SQL 표준은 WINDOW FUNCTION..

    4-5 그룹 함수

    4-5 그룹 함수

    데이터 분석 개요 ANSI/ISO SQL 표준은 데이터 분석을 위해서 다음 세 가지 함수를 정의하고 있다. AGGREGATE FUNCTION GROUP FUNCTION WINDOW FUNCTION AGGREGATE FUNCTION GROUP AGGREGATE FUNCTION이라고도 부르며, GROUP FUNCTION의 한 부분이다. 1장 7절에서 설명한 COUNT, SUM, AVG, MAX, MIN 외 각종 집계 함수들이 포함되어 있다. GROUP FUNCTION 결산 개념의 업무를 가지는 원가, 판매 시스템의 경우는 소계, 중계, 합계, 총 합계 등 여러 레벨의 결산 보고서를 만드는 것이 중요 업무 중의 하나이다. 개발자들이 이런 보고서를 작성하기 위해서는 SQL이 포함된 3GL으로 배치 프로그램을 작..

    4-4 서브쿼리

    4-4 서브쿼리

    서브쿼리Subquery란 하나의 SQL문안에 포함되어 있는 또 다른 SQL문을 말한다. 서브쿼리는 알려지지 않은 기준을 이용한 검색을 위해 사용한다. 서브쿼리는 아래와 같이 메인쿼리가 서브쿼리를 포함하는 종속적인 관계이다. 조인은 조인에 참여하는 모든 테이블이 대등한 관계에 있기 때문에 조인에 참여하는 모든 테이블의 칼럼을 어느 위치에서라도 자유롭게 사용할 수 있다. 그러나 서브쿼리는 메인쿼리의 칼럼을 모두 사용할 수 있지만 메인쿼리는 서브쿼리의 칼럼을 사용할 수 없다. 질의 결과에 서브쿼리 칼럼을 표시해야 한다면 조인 방식으로 변환하거나 함수, 스칼라 서브쿼리Scalar Subquery 등을 사용해야 한다. 조인은 집합간의 곱Product의 관계이다. 즉, 1:1 관계의 테이블이 조인하면 1(= 1 *..

    4-3 계층형 질의와 셀프 조인

    4-3 계층형 질의와 셀프 조인

    계층형 질의테이블에 계층형 데이터가 존재하는 경우 데이터 조회를 위해서 계층형 질의Hierarchical Query를 사용한다. 계층형 데이터는 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말한다. 예를 들어, 사원 테이블에서는 사원들 사이에 상위 사원(관리자)과 하위 사원 관계가, 조직 테이블에서는 조직들 사이에 상위 조직과 하위 조직 관계가 존재한다. 엔터티를 순환관계 데이터 모델로 설계할 경우 계층형 데이터가 발생한다. 순환관계 데이터 모델의 예로는 조직, 사원, 메뉴 등이 있다. 위는 사원에 대한 순환관계 데이터 모델을 표현한 것이다. (2)계층형 구조에서 A의 하위 사원은 B, C이고 B 밑에는 하위 사원이 없고 C의 하위 사원은 D, E가 있다. 계층형 구조를 데이터로 표현한..

    4-2 집합 연산자

    4-2 집합 연산자

    두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 또 다른 방법은 바로 집합 연산자Set Operator를 사용하는 것이다. 기존의 조인에서는 FROM 절에 검색하고자 하는 테이블을 나열하고, WHERE 절에 조인 조건을 기술하여 원하는 데이터를 조회할 수 있었다. 하지만 집합 연산자는 여러 개의 질의의 결과를 연결하여 하나로 결합하는 방식을 사용한다. 즉, 집합 연산자는 2개 이상의 질의 결과를 하나의 결과로 만들어 준다. 일반적으로 집합 연산자를 사용하는 상황은 서로 다른 테이블에서 유사한 형태의 결과를 반환하는 것을 하나의 결과로 합치고자 할 때, 또 동일 테이블에서 서로 다른 질의를 수행하여 결과를 합치고자 할 때 사용할 수 있다. 이외에도 튜닝관점에서 실행계획을 분리하고자 ..

    4-1 표준 조인

    4-1 표준 조인

    STANDARD SQL 개요 1970년: Dr. E.F.Codd 관계형 DBMS(Relational DB) 논문 발표 1974년: IBM SQL 개발 1979년: Oracle 상용 DBMS 발표 1980년: Sybase SQL Server 발표 (이후 Sybase ASE로 개명) 1983년: IBM DB2 발표 1986년: ANSI/ISO SQL 표준 최초 제정 (SQL-86, SQL1) 1992년: ANSI/ISO SQL 표준 개정 (SQL-92, SQL2) 1993년: MS SQL Server 발표 (Windows OS, Sybase Code 활용) 1999년: ANSI/ISO SQL 표준 개정 (SQL-99, SQL3) 2003년: ANSI/ISO SQL 표준 개정 (SQL-2003) 2008년: ..

    3-9 JOIN

    3-9 JOIN

    JOIN 개요 지금까지는 하나의 테이블에서 데이터를 출력하는 것을 살펴보았다. 하지만, 이것은 일상생활에서 발생하는 다양한 조건을 만족하는 SQL 문장을 작성하기에는 부족하다. 두 개 이상의 테이블들을 연결/결합하여 데이터를 출력하는 것을 JOIN이라고 하며, 일반적으로 사용되는 SQL 문장의 상당수가 JOIN이라고 생각하면 JOIN의 중요성을 이해하기 쉬울 것이다. JOIN은 관계형 데이터베이스의 가장 큰 장점이면서 대표적인 핵심 기능이다. 일반적인 경우 행들은 PK나 FK 값의 연관에 의해 JOIN이 성립된다. 하지만 어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립 가능하다. 선수라는 테이블과 팀이라는 테이블이 있는 경우, 선수 테이블을 기준으로 필요한 데..

    3-8 ORDER BY 절

    3-8 ORDER BY 절

    Ordery by는 모든 실행이 끝난 후 데이터 출력 직전에 정렬하며, 대량 데이터 정렬로 인한 성능 저하가 발생하기도 한다. Orcle DB는 정렬을 위해 메모리 내부에 할당된 SORT_AREA_SIZE를 사용하는데 만약 이게 너무 작으면 성능이 저하된다. 정렬을 회피하기 위해 인덱스를 생성할 때는 사용자가 원하는 형태로 오름차순 혹은 내림차순으로 생성해야 한다. ORDER BY 정렬 ORDER BY 절은 SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게, 특정 칼럼을 기준으로 정렬하여 출력하는데 사용한다. ORDER BY 절에 칼럼명 대신에 SELECT 절에서 사용한 ALIAS 명이나 칼럼 순서를 나타내는 정수도 사용 가능하다. 별도로 정렬 방식을 지정하지 않으면 기본적으로 오름차순이 적용되며, ..

    3-7 GROUP BY, HAVING 절

    3-7 GROUP BY, HAVING 절

    집계 함수Aggregate Function 다중행 함수 중 집계 함수의 특성은 다음과 같다. 여러 행들의 그룹이 모여 그룹당 단 하나의 결과를 돌려주는 함수이다. GROUP BY 절은 행들을 소그룹화 한다. SELECT 절, HAVING 절, ORDER BY 절에 사용할 수 있다. 집계 함수명 ( [DISTINCT | ALL] 칼럼이나 표현식 ) - ALL : Default 옵션이므로 생략 가능함 - DISTINCT : 같은 값을 하나의 데이터로 간주할 때 사용하는 옵션임 자주 사용되는 주요 집계 함수들은 다음과 같다. 집계 함수는 그룹에 대한 정보를 제공하므로 주로 숫자 유형에 사용되지만, MAX, MIN, COUNT 함수는 문자, 날짜 유형에도 적용이 가능한 함수이다. [예제] 일반적으로 집계 함수는..

    3-6 FUNCTION

    3-6 FUNCTION

    내장 함수BUILT-IN FUNCTION 개요 함수는 다양한 기준으로 분류할 수 있는데 그 중 한가지로, 벤더에서 제공하는 내장 함수와 사용자가 정의하는 함수User Defined Function으로 나눌 수 있다. 내장 함수는 SQL을 더욱 강력하게 해주고 데이터 값을 간편하게 조작할 때 사용한다. 벤더 별로 차이가 크지만 핵심적인 기능들은 이름/표현법이 달라도 대부분의 DB가 공통적으로 제공한다. 함수는 입력되는 값이 아무리 많아도 출력은 하나만 되는, M:1 관계라는 중요한 특징을 가진다. 내장함수는 다시 함수의 입력 값이 단일행으로 입력되는 단일행 함수Single-Row Function와 여러 행의 값이 입력되는 다중행 함수Multi-Row Function으로 나뉜다. 또 다중행 함수는 집계 함수..

    3-5 WHERE 절

    3-5 WHERE 절

    WHERE 조건절 개요 자료를 검색할 때 SELECT 절과 FROM 절만을 사용하여 기본적인 SQL 문장을 구성한다면, 테이블에 있는 모든 자료들이 결과로 출력되어 실제로 원하는 자료를 확인하기 어렵다. 사용자들은 자신이 원하는 자료만을 검색하기 위해서 SQL 문장에 WHERE 절을 이용하여 검색되는 자료의 범위를 제한할 수 있다. WHERE 절에는 두 개 이상의 테이블 조인 조건을 기술하거나 결과 제한을 위한 조건을 기술할 수 있다. 현실 DB는 많은 사용자, 프로그램이 동시에 접속해 다량의 트랜잭션을 발생시키는데, WHERE 조건절을 사용하지 않고 필요없는 많은 자료들을 DB로부터 요청하는 SQL 문장은 대량의 데이터를 검색할 때 DB가 설치된 서버의 CPU나 메모리 등의 시스템 자원을 과다 사용하게..