본문 바로가기

분류 전체보기106

[SQL] 1,2,3차 정규화 (feat. ERwin Data Modeler) 정규화(定規化, Database Normalization)란? 데이터의 중복을 제거하고 컬럼들의 제자리를 찾아주기 위해 테이블을 정해진 규칙에 의거해 규격화 하는 작업을 말한다. 이론 상으로는 1~5차 정규화와 BCNF까지 총 6단계가 존재하지만, 현장에서는 보통 3단계까지를 많이 수행한다. 정규화를 거친 테이블을 각각의 테이블이 하나의 기능만 수행하게 되어서, 향후 업무가 증가하거나 변화해도 최소한의 수정만으로 처리할 수 있게 된다. 상단의 주문 테이블을 통해 1~3차 정규화를 수행해보자. 여러 기능을 하나의 테이블에 때려 박은 상태이기 때문에 중복 데이터가 많은 것을 확인할 수 있다. 또한 회원정보나 상품정보에 수정이 발생할 시 해당 데이터를 가지고 있는 모든 컬럼에 적용되어야 하는데, 그렇지 못하기.. 2019. 5. 3.
[SQL] 식별자의 정의와 종류(후보키, 기본키, 대체키, 복합키, 대리키) 식별자(Identifier)란? 한 실체(Entity)내에서 각각의 인스턴스를 유일하게 구분할 수 있는 단일 속성 또는 그룹 속성을 말한다. 실체 내에서 식별자에 동일한 값이 중복될 수 없으며, 이를 실체 무결성이라고 한다. 모든 Entity는 반드시 하나 이상의 식별자를 보유해야 하며 여러 개의 식별자를 보유하는 경우도 있다. 주로 이 식별자를 통해 해당 인스턴스의 구분이 가능해지며 검색이나 조인시 매우 중요하게 작용한다. 후보키(Candidate Key) 실체(Entity) 내에서 각각의 인스턴스를 유일하게 구분할 수 있는 속성으로, 하나 또는 여러 개의 속성으로 구성된다. 즉, 기본키(PK)가 될 수 있는 후보 속성이다. 아래의 예에서는 '사번'과 '주민번호'가 후보키에 해당한다. 기본키(Prima.. 2019. 4. 30.
[Oracle] 14. 트랜잭션과 잠금(Exclusive Lock, Share Lock, Dead Lock, Undo Segment) 트랜잭션(Transaction) 반드시 함께 실행되어야 하는 작업의 단위를 의미. 즉 사용자의 의도에 따라 여러 개의 문장으로 구성된 트랜잭션은 반드시 동시에 실행(COMMIT;)되거나 취소(ROLLBACK;)된다. RDBMS는 트랜잭션을 통해 작업의 단위를 결정함으로써 작업 결과의 신뢰성을 확보한다. 트랜잭션의 기본 과정은 다음과 같다. 1. DML(insert, update, delete), DDL(create, alter, drop, truncate), DCL(grant, revoke)문 실행 2. 입력된 행에 잠금이 걸림 3. COMMIT 또는 ROLLBACK 실행 4. 잠금 풀림 언두 세그먼트(Undo Segment) DML 작업이 발생할 때 그 작업을 취소(ROLLBACK;)시키기 위해서는 이.. 2019. 4. 26.
[Oracle] 13. 단일 행 서브쿼리, 다중 행 서브쿼리(IN, ANY, ALL) 서브쿼리(Sub Query)란? 하나의 쿼리에 의해 검색된 결과값이 또 다른 쿼리에 필요한 경우, 두 개의 쿼리문을 합해서 만들어지는 쿼리. 메인 쿼리문 내에 서브 쿼리문이 포함된다. 서브 쿼리문은 조건절인 WHERE절, HAVING절에 주로 쓰이며, FROM절에 쓰이는 경우에는 '인라인 뷰(Inline View)', SELECT절에 쓰이는 경우 '스칼라 서브 쿼리(Scala Sub Query)'라고 부른다. 서브 쿼리문을 괄호()로 반드시 감싸야 한다! SELECT [DISTINCT | ALL] 컬럼명, 컬럼명... FROM 테이블 WHERE 컬럼명 연산자 (Sub Query문) 단일 행 서브쿼리 서브쿼리 문장에서 단 하나의 행과 열을 검색하는 경우, 단일 행 연산자( (SELECT avr FROM s.. 2019. 4. 24.
[Oracle] 12. 다양한 변환함수(TO_CHAR, TO_DATE, TO_NUMBER) TO_CHAR 날짜와 숫자를 문자로 변환한다, 출력데이터 형식을 지정한다. TO_CHAR(날짜, 출력형식), TO_CHAR(숫자, 출력형식) TO_DATE 데이터를 날짜형으로 해석한다. TO_DATE(문자, 해석형식) TO_NUMBER 데이터를 숫자로 해석한다. 대부분의 경우 오라클의 자동형변환에 의해 숫자로 읽혀지므로 사용빈도가 낮다. SQL보다 PL-SQL에서 간혹 사용된다. 예제1) 현재 날짜를 다양한 형식으로 출력한다 SELECT TO_DATE(sysdate, 'YYYY/MM/DD') date1, TO_DATE(sysdate, 'YYYY/MM/DD:HH24:MI:SS') date2, TO_DATE(sysdate, 'YYYY/MM/DD:HH:MI:SS AM') date3 FROM dual; SELE.. 2019. 4. 23.
[Oracle] 11. 날짜 출력 포맷 의미 표현 문자 내용 년 YYYY 4자리로 표현된 년도(1999, 2019) YY 2자리로 표현된 년도(99, 19) 앞에 두자리는 현재 년도를 이용한다 (99년은 2099년을 의미) RR 2자리로 표현된 년도(99, 19) 앞에 두가지는 현재 년도와 가장 가까운 년도(99년은 1999년을 의미) 월 MM 2자리 숫자로 표현된 월(03, 04) MONTH 영문이나 한글로 표현된 월(MARCH, 3월) MON 약자로 표현된 영문이나 한글월(MAR, 3월) ※ 한글인 경우 MONTH와 동일하다 일 DD 2자리 숫자로 표현된 일자(01, 02) DAY 영문이나 한글 요일(SUNDAY, 일요일) DY 약자로 표현된 요일(SUN, 일) 시 HH24 1시에서 24시까지 표현 HH 1시에서 12시까지 표현 정확한 표.. 2019. 4. 23.
[Oracle] 10. 다양한 날짜함수(ROUND, TRUNC, MONTH_BETWEEN, ADD_MONTHS, NEXT_DAY) ROUND 형식에 맞추어 반올림한 날짜를 반환한다 ROUND(날짜, 형식) ROUND(sysdate, 'DD') → 2019/04/23 TRUNC 형식에 맞추어 절삭한 날짜를 반환한다 TRUNC(날짜 형식) TRUNC(sysdate, 'YYYY') → 2019/01/01 MONTH_BETWEEN 두 날짜간의 기간을 월 수로 계산한다 MONTH_BETWEEN(날짜1, 날짜2) MONTH_BETWEEN('2011/07/01', '2011/08/01') → -1 MONTH_BETWEEN('2011/08/01', '2011/07/01') → 1 ADD_MONTHS 날짜에 n달을 더한 날짜를 계산하다 ADD_MONTH(날짜, n) ADD_MONTH('2011/07/01', 23) → 2013/06/01 NEXT_.. 2019. 4. 23.
[Oracle] 09. 다양한 문자함수(LOWER, UPPER, INITCAP, SUBSTER, TRIM, LPAD, RPAD, LENGTH, TRANSLATE, REPLACE) LOWER 문자열을 소문자로 변환한다 LOWER('ORACLE') → oracle UPPER 문자열을 대문자로 변환한다 UPPER('oracle') → ORACLE INITCAP 첫문자만 대문자로 변환하고 나머지는 소문자로 변환한다 INITCAP('oRaCle') → Oracle SUBSTR 문자열 내에 지정된 위치의 문자열을 반환한다 SUBSTR(문자열, 시작위치, 출력문자의 갯수) SUBSTR('oracle', 1, 2) → or TRIM 접두어나 접미어를 잘라낸다 TRIM([leading|trailing|both]) 제외문자 FROM 문자열 제외문자를 지정하지 않으면 공백문자를 잘라낸다 TRIM('o' FROM 'oracle') → racle LPAD, RPAD 지정된 문자열의 길이만큼 빈 부분에 .. 2019. 4. 23.
[Oracle] 08. 다양한 숫자함수(ROUND, TRUNC, MOD, POWER, CELL, FLOOR, ABS, SQRT, SIGN) ROUND n자리까지 반올림한다 ROUND(m,n) ROUND(123.456, 3) → 123.456 TRUNC n자리 미만을 절삭한다 TRUNC(m,n) TRUNC(123.4567, 3) → 123.456 MOD m을 n으로 나눈 나머지 계산한다 MOD(m,n) MOD(10,4) → 2 POWER m의 n승을 계산한다 POWER(m,n) POWER(2,4) → 16 CELL m보다 큰 가장 작은 정수를 찾는다 CELL(m) CELL(3.34) → 4 FLOOR m보다 작은 가장 큰 정수를 찾는다 FLOOR(m) FLOOR(2.34) → 2 ABS m의 절대값을 계산한다 ABS(m) ABS(-4) → 4 SQRT m의 제곱근을 계산한다 SQRT(m) SQRT(9) → 3 SIGN m이 음수일 때 -1, .. 2019. 4. 23.