SQLD 시험 준비
- 모델링의 정의
- 정보시스템을 구축하기 위한 데이터 관점의 업무 분석 기법
- 현실세계의 데이터에 대해 약속된 표기법에 의해 표현하는 과정
- 데이터베이스를 구축하기 위한 분석/설계의 과정
- 모델링의 특징
- 추상화 : 현실세계를 일정한 형식에 맞추어 표현
- 단순화 : 복잡한 현실세계를 약속된 규약에 의해 제한된 표기법이나 언어로 표현하여 쉽게 이해할 수 있도록 하는 개념
- 명확화 : 누구나 이해하기 쉽게 하기 위해 대상에 대한 애매모호함을 제거하고 정확하게 현상을 기술
- 모델링의 관점
- 데이터 관점 : 업무가 어떤 데이터와 관련이 있는지 또는 데이터 간의 관계는 무엇인지?
- 프로세스 관점 : 실제하고 있는 업무는 무엇인지 또는 무엇을 해야하는지?
- 데이터와 프로세스의 상관 관점 : 업무가 처리하는 일의 방법에 따라 데이터는 어떻게 영향을 받고 있는지?
- 모델링이 중요한 이유
- 파급효과 : 데이터 구조 변경 시, 영향도가 큼
- 복잡한 정보 요구 사항의 간결한 표현 : 데이터 모델은 건축물로 비유하자면 설계 도면
- 데이터 품질 : 아래는 유의할 점
- 중복 : 여러 장소에 같은 정보 저장 x
- 비유연성 : 데이터의 정의를 데이터의 사용 프로세스와 분리함으로서 영향도 줄임
- 비일관성 : ex. 신용상태에 대한 갱신 없이 고객의 납부 이력 정보를 갱신 => 납부이력정보와 신용상태는 동시에 갱신되어야 함
- 데이터 모델링의 3단계 : 아래로 내려갈수록 구체적, 위로 올라갈수록 추상적 => 보통 아래 순서대로 데이터 모델링이 진행됨
- 개념적 데이터 모델링 : 추상화 수준이 높고 업무 중심적이고 포괄적인 수준의 모델링 진행. 전사적 데이터 모델링, EA 수립 시 많이 이용
- 논리적 데이터 모델링 : 시스템으로 구축하고자 하는 업무에 대해 Key, 속성, 관계 등을 정확하게 표현, 재사용성이 높음
- 물리적 데이터 모델링 : 실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계
- 데이터베이스 3단계 구조 : 화면과 데이터베이스 간의 독립성 유지를 위함
- 외부 스키마 : 개개 사용자 단계로서 개개 사용자가 보는 개인적 DB 스키마
- 개념 스키마 : 모든 사용자 관점을 통합한 조직 전체의 DB를 기술하는 것
- 내부 스키마 : 물리적 장치에서 데이터가 실제적으로 저장되는 방법을 표현하는 스키마
- 데이터 모델링의 세 가지 요소
- 업무가 관여하는 어떤 것 (Thins)
- 어떤 것이 가지는 성격 (Attributes)
- 업무가 관여하는 어떤 것 간의 관계 (Relationships)
- ERD 작업순서
- 엔터티를 그린다.
- 엔터티를 적절하게 배치한다.
- 엔터티 간 관계를 설정한다.
- 관계명을 기술한다.
- 관계의 참여도를 기술한다.
- 관계의 필수여부를 기술한다.
- 엔터티의 특징
- 반드시 해당 업무에서 필요하고 관리하고자 하는 정보이어야 한다.
- 유일한 식별자에 의해 식별이 가능해야 한다.
- 영속적으로 존재하는 인스턴스의 집합이어야 한다.
- 엔터티는 업무 프로세스에 의해 이용되어야 한다.
- 엔터티는 반드시 속성이 있어야 한다.
- 엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 있어야 한다.
- 엔터티의 관계가 필요 없는 경우
- 통계를 위한 엔터티
- 코드를 위한 엔터티
- 시스템 처리 시 내부 필요에 의한 엔터티
- 엔터티의 분류
- 유무형에 따른 분류
- 유형엔터티 : 물리적인 형태가 있고 안정적이며 지속적으로 활용되는 엔터티 (ex. 사원, 물품, 강사)
- 개념엔터티 : 물티적인 형태가 없지만 관리해야 할 개념정 정보로 구분되는 엔터티 (ex. 조직, 보험상품)
- 사건엔터티 : 업무를 수행함에 따라 발생하는 엔터티 (ex. 주문, 청구, 미납)
- 발생시점에 따른 분류
- 기본엔터티 : 다른 엔터티와의 관계에 의한 것이 아닌 독립적으로 생성이 가능하고 타 엔터티의 부모 역할이 되는 엔터티 (ex. 사원, 부서, 고객, 상품, 자재)
- 중심엔터티 : 기본엔터티로부터 발생되고 업무에서 중심적인 역할을 하는 엔터티 (ex. 계약, 사고, 예금원장, 청구, 주문, 매출)
- 행위엔터티 : 두 개 이상의 부모엔터티로부터 발생하고, 자주 내용이 바뀌거나 데이터 양이 증가하는 엔터티 (ex. 주문목록, 사원변경이력)
속성 : 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더이상 분리되지 않는 최소의 데이터 단위
속성의 특징
- 반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야 한다.
- 정규화 이론에 근거하여 정해진 주식별자에 함수적 종속성을 가져야 한다.
- 하나의 속성은 한 개의 값만을 가진다.
- 속성의 특성에 따른 분류
- 기본속성 : 업무로부터 추출한 모든 속성
- 설계속성 : 업무상 필요한 데이터 이외에 데이터 모델링 및 업무를 규칙화하기 위해 새로 만들거나 변형한 속성 (ex. 일련번호)
- 파생속성 : 다른 속성에 영향을 받아 발생하는 속성, 보통 계산된 값들이 이에 해당, 가급적 적게 정의하는 것이 좋음.
- 관계 정의 시, 체크할 사항
- 두 개의 엔터티 사이에 관심 있는 연관규칙이 존재하는가?
- 두 개의 엔터티 사이에 정보의 조합이 발생하는가?
- 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?
- 업무기술서, 장표에 관계연결을 가능하게 하는 동사가 있는가?
- 식별자의 특징
- 유일성 : 주식별자에 의해 엔터티 내에 모든 인스턴스들이 유일하게 구분되어야 한다.
- 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.
- 불변성 : 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다.
- 존재성 : 주식별자가 지정이 되면 반드시 값이 들어와야 한다.
- 식별자 분류
- 대표성 여부
- 주식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있고, 타 엔터티와 참조관계를 연결할 수 있는 식별자
- 보조식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있지만, 대표성을 가지지 못해 참조관계 연결을 못하는 식별자
- 스스로 생성 여부
- 내부식별자 : 엔터티 내부에서 스스로 만들어지는 식별자
- 외부식별자 : 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자
- 속성 수
- 단일식별자 : 하나의 속성으로 구성된 식별자
- 복합식별자 : 둘 이상의 속성으로 구성된 식별자
- 대체 여부
- 본질식별자 : 업무에 의해 만들어지는 식별자
- 인조식별자 : 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 갖고 있기 때문에 인위적으로 만든 식별자
- 주식별자 도출 기준
- 해당 업무에서 자주 이용되는 속성을 주식별자로 지정
- 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면 주식별자로 지정하지 않는다.
- 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.
식별자관계 : 부모로부터 받은 식별자를 자식엔터티의 주식별자로 이용하는 경우는 Null값이 오면 안되므로 반드시 부모엔터티가 생성되어야 자기 자신의 엔터티가 생성되는 관계
- 문제점 : PK수 증가
비식별자관계 : 부모엔터티로부터 속성을 받았지만 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 관계
- 문제점 : 부모엔터티의 PK조건으로 자식엔터티의 속성을 조회해야 할 때, 불필요한 join이 들어감
- 문제점 : 부모엔터티의 PK조건으로 자식엔터티의 속성을 조회해야 할 때, 불필요한 join이 들어감
제1정규형 : 모든 속성은 반드시 하나의 값을 가져야 한다. (Ex. 연락처 = 02-123-4567, 010-1234-5678 => x)(ex. Entity : 주문번호/상품번호1/상품명1/상품번호2/상품명2/고객번호/고객명 => x)
- 부모-자식 엔터티 관계형성으로 해결, 자식엔터티로 생성
제2정규형 : 엔터티의 일반속성은 주식별자 전체에 종속적이어야 한다. (Ex. 상품명은 오직 주식별자인 상품번호에 의해서만 결정된다, 주식별자가 상품번호 1개임을 가정)
- M:M 관계형성으로 해결
제3정규형 : 엔터티 일반속성 간에는 서고 종속적이지 않는다. (Ex. 고객번호는 주문번호에 종속, 고객명은 고객번호에 종속=>고객명은 주문번호에 종속 ==> 이행 종속성이므로 제3정규형 위반)
- 부모-자식 엔터티 관계형성으로 해결, 위 예제에서는 고객을 부모엔터티로 생성
- 부모-자식 엔터티 관계형성으로 해결, 위 예제에서는 고객을 부모엔터티로 생성
반정규화 : 성능을 위해 데이터 중복을 허용, 정규화의 반대
- 성능이 향상될 수 있는 경우 : 잦은 조회 쿼리의 join 횟수가 많은 경우
- 성능이 저하될 수 있는 경우 : 불필요한 UPDATE로직이 추가될 수 있음
계층형 데이터 모델 : 엔터티의 인스턴스간 계층이 존재할 때의 데이터 모델
- 데이터 조회 시, 셀프조인 발생
- Null 속성의 이해
- Null 값의 연산은 언제나 Null
- 집계함수는 Null 값을 제외하고 처리한다.
- SQL의 종류
- 데이터 조작어 (DML) : SELECT, INSERT, UPDATE, DELETE
- 데이터 정의어 (DDL) : CREATE, ALTER, DROP, RENAME
- 데이터 제어어 (DCL) : GRANT, REVOKE
- 트랜잭션 제어어 (TCL) : COMMIT, ROLLBACK
합성연산자 : || 또는 CONCAT(string1, string2)
단일행 함수의 종류
- 문자형 함수 : LOWER, UPPER, ASCII, CHR/CHAR, CONCAT, SUBSTR/SUBSTRING, LENGTH/LEN, LTRIM, RTRIM, TRIM
- 숫자형 함수 : ABS, SIGN, MOD, CEIL/CEILING, FLOOR, ROUND, TRUNC, SIN, COS, TAN, EXP, POWER, SQRT, LOG, LN
- 날짜형 함수 : SYSDATE/GETDATE, EXTRACT/DATEPART, TO_NUMBER(TO_CHAR(d, ‘YYYY’|’MM’’|DD’))/YEAR|MONTH|DAY
- 변환형 함수 : (CAST, TO_NUMBER, TO_CHAR, TO_DATE)/(CAST, CONVERT)
- NULL 관련 함수 : NVL/ISNULL, NULLIF, COALESCE
ASCII <-> CHR/CHAR
LTRIM : 첫 문자부터 확인해서 지정 문자가 나타나면 해당 문자를 제거 (디폴트는 공백)
TRIM : 문자열에서 머리말, 꼬리말 또는 양쪽에 있는 지정 문자를 제거 (디폴트는 both)
MOD : 숫자를 나누어 나머지 값을 리턴 (%로 대체 가능)
SIGN : 숫자가 양수인지, 음수인지 0인지를 구별
TRUNC : 숫자를 소수 m자리에서 잘라서 버림 (디폴트는 0)
POWER : 숫자의 거듭제곱 값을 리턴
EXTRACT/DATEPART : 날짜 데이터에서 연월일 데이터를 출력
CASE 표현
- CASE (표현식) WHEN 기준값1 THEN 값1 WHEN 기준값2 THEN 값2 ELSE 디폴트값 END
- Oracle 한정 : DECODE(표현식, [기준값1, 값1, 기준값2, 값2, … , 디폴트값]) : 표현식이 기준값1이면 값1을, 기준값2이면 값2를 리턴하고, 부합하는 기준값이 없을 경우, 디폴트값 리턴
NULLIF(식1, 식2) : 식1이 식2의 결과와 같을 경우 null, 다를 경우 식1 리턴
연산자의 우선순위
- 괄호
- 비교 연산자, SQL 연산자
- NOT 연산자
- AND
- OR
- 집계함수의 종류
- COUNT(*) : NULL 값을 포함한 행의 수를 출력
- COUNT(표현식) : 표현식의 값이 NULL 값인 것을 제외한 행 수를 출력
- STDDEV : 표준 편차를 출력
- VARIANCE/VAR : 분산을 출력
집계함수는 WHERE 절에 올 수 없다.
GROUP BY는 NULL을 무시한다.
GROUP BY 보다 WHERE 절이 먼저 수행된다.
HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계함수를 이용한 조건을 표시할 수 있다.
SELECT 문장 실행 순서
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
EQUI JOIN : 두 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용되는 방법
Non EQUI JOIN : 두 개의 테이블 간에 논리적인 연관 관계는 갖고 있으나, 칼럼 값들이 서로 일치하지 않는 경우에 사용 (등호가 아닌 부등호나 BETWEEN 사용)
OUTER JOIN : 조인 조건이 안맞아도 데이터를 조회하려고 할 때 사용되는 방법 (LEFT, RIGHT가 있음, 값이 없을 경우 NULL)
FROM 절의 JOIN 형태
- INNER JOIN : 조인 조건을 만족하는 행들만 반환
- NATURAL JOIN : 두 테이블 간에 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN 수행
- USING 조건절 : NATURAL JOIN에서 USING 조건절을 활용하여 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN 수행
- ON 조건절 : JOIN 조건 설정, 칼럼명이 달라도 JOIN 가능
- CROSS JOIN : 두 테이블간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합 (M * N 건의 데이터 조합 발생)
- OUTER JOIN
- 동작하는 방식에 따른 서브 쿼리 분류
- 비연관 서브 쿼리 : 서브 쿼리가 메인 쿼리 컬럼을 갖고 있지 않는 형태의 서브 쿼리다. 메인 쿼리에 값을 제공하기 위한 목적으로 주로 사용한다.
- 연관 서브 쿼리 : 서브 쿼리가 메인 쿼리 칼럼을 갖고 있는 형태의 서브 쿼리다. 일반적으로 메인 쿼리가 먼저 수행돼 읽혀진 데이터를 서브 쿼리에서 조건이 맞는지 확인하고자 할 때 주로 사용한다. 서브 쿼리 내에 메인 쿼리 칼럼이 사용된 서브 쿼리
- 반환되는 데이터의 형태에 따른 서브 쿼리 분류
- Single Row 서브 쿼리 : 서브 쿼리의 실행 결과가 항상 1건 이하인 서브 쿼리, 단일 행 비교 연산자와 함께 사용 (ex. =, < 등)
- Multi Row 서브 쿼리 : 서브 쿼리의 실행 결과가 여러 건인 서브 쿼리, 다중 행 비교 연산자와 함께 사용 (ex. In, all, exists 등)
- Multi Column 서브 쿼리 : 서브 쿼리의 실행 결과로 여러 칼럼을 반환
- 다중 행 비교 연산자
- IN : 서브 쿼리의 결과에 존재하는 임의의 값과 동일한 조건
- ALL : 서브 쿼리의 결과에 존재하는 모든 값을 만족하는 조건
- ANY : 서브 쿼리의 결과에 존재하는 어느 하나의 값이라도 만족하는 조건
- EXISTS : 서브 쿼리의 결과가 존재하는지 여부를 확인하는 조건
- 뷰 사용의 장점
- 독립성 : 테이블 구조가 변경돼도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다.
- 편리성 : 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있다.
- 보안성 : 숨기고 싶은 정보는 빼고 생성하여 사용자에게 정보를 감출 수 있다.
- 집합연산자
- UNION : 개별 SQL 문의 결과에 대해 합집합 연산을 수행
- UNION ALL : 개별 SQL 문의 결과에 대해 합집합 연산을 수행하며, 중복된 행도 그대로 표시
- INTERSECT : 개별 SQL 문의 결과에 대해 교집합 연산을 수행
- EXCEPT : 개별 SQL 문의 결과에 대해 차집합 연산을 수행
ROLLUP : GROUP BY 칼럼의 GROUP 별 집계 (TOTAL) 수행 및 GROUP 정렬, 상세 칼럼도 정렬이 필요할 경우, ORDER BY 도 병행 사용
GROUPING : 소계가 계산된 결과에는 1이 표시됨, 그렇지 않은 경우는 0이 표시됨
GROUPING SETS : GROUP BY 모든 칼럼에 대해 GROUPING 수행, 칼럼 순서가 바껴도 조회결과는 같음 (ex. GROUP BY GROUPING SETS (A, B) : count(A) + count(B) 개의 칼럼 조회)
WINDOW FUNCTION SYNTAX : SELECT WINDOW_FUNCTION (ARGUMENTS) OVER ([PARTITION BY 칼럼] [ORDER BY 절] [WINDOWING 절]) FROM 테이블명;
- ARGUMENTS : 함수에 따라 0 ~ N개의 인수가 지정될 수 있다.
- PARTITION BY 절 : 전체 집합을 기준에 의해 소그룹으로 나눌 수 있다.
- ORDER BY 절 : 어떤 항목에 대해 순위를 지정할지 ORDER BY 절을 기술한다.
- WINDOWING 절 : WINDOWING 절은 함수의 대상이 되는 행 기준의 범위를 강력하게 지정할 수 있다.
RANK : ORDER BY를 포함한 QUERY 문에서 특정 항목에 대한 순위를 구하는 함수, PARTITION 포함 시, 특정 컬럼별로 RANK가 지정됨
DENSE_RANK : RANK 함수와 유사하나 동일한 순위를 하나의 건수로 취급
ROW_NUMBER : RANK나 DENSE_RANK 함수와는 다르게 동일한 값이라도 고유한 순위를 부여
FIRST_VALUE : 파티션별 윈도우에서 가장 먼저 나온 값 (SQL_SERVER (x))
LAST_VALUE : 파티션별 윈도우에서 가장 나중에 나온 값 (SQL_SERVER (x))
LAG : 파티션별 윈도우에서 이전 몇 번째 행의 값 (SQL_SERVER (x))
LEAD : 파티션별 윈도우에서 이후 몇 번째 행의 값 (SQL_SERVER (x))
RATIO_TO_REPORT : 파티션 내 전체 SUM(칼럼) 값에 대한 행별 칼럼 값의 백분율을 소수점으로 구할 수 있음 (SQL_SERVER (x))
PERCENT_RANK : 파티션별 윈도우에서 제일 먼저 나오는 것을 0으로, 제일 늦게 나오는 것을 1로 해, 값이 아닌 행의 순서별 백분율을 구한다. (SQL_SERVER (x))
CUME_DIST : 파티션별 윈도우의 전체 건수에서 현재 행보다 작거나 같은 건수에 대한 누적백분율을 구한다. 결과 값은 > 0 & <= 1 (SQL_SERVER (x))
NTILE : 파티션별 전체 건수를 ARGUMENT 값으로 N 등분한 결과, N개씩 그룹이 나누어짐
TOP (Expression) [PERCENT] [WITH TIES] : SQL Server 한정
- Expression : 반환할 행 수를 지정하는 숫자
- PERCENT : 쿼리 결과 집합에서 처음 Expression%의 행만 반환
- WITH TIES : ORDER BY 절이 지정된 경우에만 사용, TOP N(PERCENT)의 마지막 행과 같은 값이 있는 경우 추가 행이 출력되도록 지정 가능
- ROW LIMITTING절 (ORDER BY 절 다음에 기술)
- Syntax1 : [OFFSET offset {ROW | ROWS}]
- Syntax2 : [FETCH {FIRST | NEXT} [{row count | percent PERCENT}] {ROW | ROWS} {ONLY | WITH TIES}]
- OFFSET offset : 건너뛸 행의 개수를 지정
- FETCH : 반환할 행의 개수나 백분율을 지정
- ONLY : 지정된 행의 개수나 백분율만큼 행을 반환
- WITH TIES : 마지막 행에 대한 동순위를 포함해서 반환
- Oracle 계층형 질의
SELECT …
FROM 테이블
WHERE condition
AND condition
START WITH condition
AND condition
CONNECT BY [NOCYCLE] condition
AND condition
[ORDER SIBLINGS BY column, column, …]
- START WITH : 계층 구조 전개의 시작 위치를 지정하는 구문
- CONNECT BY : 다음에 전개될 자식 데이터를 지정하는 구문
- PRIOR : CONNECT BY절에 사용되며, 현재 읽은 칼럼을 지정, (FK) = PRIOR (PK) 형태를 사용하면 부모 데이터에서 자식 데이터 방향으로 전개하는 순방향 전개, (PK) = PRIOR (FK) 형태를 사용하면 반대로 자식 데이터에서 부모 데이터 방향으로 전개하는 역방향 전개
- NOCYCLE : 데이터를 전개하면서 이미 나타났던 동일한 데이터가 전개 중에 다시 나타나는 사이클이 발생 시, 런타임 오류가 발생. NOCYCLE을 추가하면 오류를 발생시키지 않고 사이클이 발생한 이후의 데이터를 전개하지 않는다.
- ORDER SIBLINGS BY : 형제 노드 사이에서 정렬을 수행
- WHERE : 모든 전개를 수행한 후에 지정된 조건을 만족하는 데이터만 추출
- 계층형 질의에서 사용되는 가상 칼럼
- LEVEL : 루트 데이터이면 1, 그 하위 데이터이면 2다. 리프(Leaf) 데이터까지 1씩 증가한다.
- CONNECT_BY_ISLEAF : 전개 과정에서 해당 데이터가 리프 데이터이면 1, 그렇지 않으면 0이다.
- CONNECT_BY_ISCYCLE : 전개 과정에서 자식을 갖는데, 해당 데이터가 조상으로서 존재하면 1, 그렇지 않으면 0
- 계층형 질의에서 사용되는 함수
- SYS_CONNECT_BY_PATH : 루트 데이터부터 현재 전개할 데이터까지의 경로를 표시
- CONNECT_BY_ROOT : 현재 전개할 데이터의 루트 데이터를 표시
PIVOT절 : 행을 열로 회전
UNPIVOT절 : 열을 행으로 회전
정규표현식 POSIX 연산자
- . : 모든 문자와 일치 (newline 제외)
- | : 대체 문자를 구분
- \ : 다음 문자를 일반 문자로 취급
- ^ : 문자열의 시작
- $ : 문자열의 끝
- ? : 0회 또는 1회 일치 (greedy : 패턴 최소 일치)
- ?? : 0회 또는 1회 일치 (nongreedy : 패턴 최대 일치)
- * : 0회 또는 그 이상의 횟수로 일치 (greedy : 패턴 최소 일치)
- *? : 0회 또는 그 이상의 횟수로 일치 (nongreedy : 패턴 최대 일치)
- + : 1회 또는 그 이상의 횟수로 일치 (greedy : 패턴 최소 일치)
- +? : 1회 또는 그 이상의 횟수로 일치 (nongreedy : 패턴 최대 일치)
- {m} : m회 일치 (greedy : 패턴 최소 일치)
- {m}? : m회 일치 (nongreedy : 패턴 최대 일치)
- {m,} : 최소 m회 일치 (greedy : 패턴 최소 일치)
- {m,}? : 최소 m회 일치 (nongreedy : 패턴 최대 일치)
- {,m} : 최대 m회 일치 (greedy : 패턴 최소 일치)
- {,m}? : 최대 m회 일치 (nongreedy : 패턴 최대 일치)
- {m,n} : 최소 m회, 최대 n회 일치 (greedy : 패턴 최소 일치)
- {m,n}? : 최소 m회, 최대 n회 일치 (nongreedy : 패턴 최대 일치)
- (expr) : 괄호 안의 표현식을 하나의 단위로 취급
- [char…] : 문자 리스트 중 한 문자와 일치
- [^char…] : 문자 리스트에 포함되지 않은 한 문자와 일치
- [-] : [0-9] [a-z] [A-Z] [a-zA-Z] [0-9a-zA-Z] [0-9a-fA-F]
- \d : 숫자
- \D : 숫자가 아닌 모든 문자
- \w : 숫자와 영문자(underbar 포함)
- \W : 숫자와 영문자가 아닌 모든 문자(underbar 제외)
- \s : 공백 문자
- \S : 공백 문자가 아닌 모든 문자
REGEXP_SUBSTR : 문자열에서 일치하는 패턴을 반환
REGEXP_LIKE : 문자열이 패턴과 일치하면 TRUE, 아니면 FALSE 반환
REGEXP_REPLACE : 일치하는 패턴을 replace_string으로 변경한 문자로 반환
REGEXP_SUBSTR : 일치하는 패턴의 문자만을 반환
REGEXP_INSTR : 일치하는 패턴의 시작 위치를 정수로 반환
REGEXP_COUNT : 일치하는 패턴의 횟수를 반환
MERGE : 새로운 행을 입력하거나, 기존 행을 수정하는 작업을 한번에 할 수 있음
트랜잭션의 특성
- 원자성 : 트랜잭션에서 저으이된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다.
- 일관성 : 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 돼 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.
- 고립성 : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
- 지속성 : 트랜잭션이 성공적으로 수행되면, 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.
- COMMIT or ROLLBACK 이전 상태
- 이전 상태로 복구 가능
- 현재 사용자는 SELECT 문장으로 결과를 확인할 수 있다.
- 다른 사용자는 현재 사용자가 수행한 명령의 결과를 볼 수 없다.
- 변경된 행은 잠금(LOCKING)이 설정돼서 다른 사용자가 변경할 수 없다.
- SQL Server에서의 트랜잭션
- AUTO COMMIT : SQL Server의 기본 방식, DBMS가 트랜잭션을 컨트롤하는 방식, 명령어가 성공적으로 수행되면 자동으로 COMMIT 수행, 오류가 발생하면 자동으로 ROLLBACK 수행
- 암시적 트랜잭션 : Oracle과 같은 방식, 트랜잭션의 시작은 DBMS가 처리, 트랜잭션의 끝은 사용자가 명시적으로 COMMIT 또는 ROLLBACK 처리
- 명시적 트랜잭션 : 트랜잭션의 시작과 끝을 모두 사용자가 명시적으로 지정하는 방식
SAVEPOINT : 저장점(SAVEPOINT)를 지정하면 ROLLBACK할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라, 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다.
제약조건의 종류
- PRIMARY KEY : 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 기본키를 정의한다.
- UNIQUE : 테이블에 저장된 행 데이터를 고유하기 식별하기 위한 고유키를 정의한다.
- NOT NULL : NULL값의 입력을 금지한다.
- CHECK : 입력할 수 있는 값의 범위 등을 제한한다.
- FOREIGN KEY : 관계형 데이터베이스에서 테이블 간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우 외래키가 생성된다.
- Oracle에서 제공하는 유저들
- SCOTT : Oracle 테스트용 샘플 계정
- SYS : 백업 및 복구 등 데이터베이스 상의 모든 관리 기능을 수행할 수 있는 최상위 관리자 계정
- SYSTEM : 백업, 복구 등 일부 관리 기능을 제외한 모든 시스템 권한을 부여받은 DBA 계정