728x90
반응형
SMALL

STS를 설치하다가 .jar파일을 더블클릭하여 실행하면 디렉터리가 생성이 되어야 하는데

연결 파일만 뜨고 실행이 안됨..

 

1. 먼저 cmd 창을 키고 java가 설치되어 있는지 확인!

java -version

17버전으로 잘 설치되어 있다.

 

2. 탐색기로 이동 후 shift키를 누른 상태에서 오른쪽 버튼 클릭해 "여기에 PowerShell 창 열기" 클릭

java -jar 파일명.jar

위 명령어를 입력하여 jar파일을 실행한다.

 

그럼 이렇게 jar파일을 실행해서 디렉터리가 생성된 것을 볼 수 있다!

728x90
반응형
LIST
728x90
반응형
SMALL

1. 데이터 모델링의 정의

- 고객과 함께 고객의 업무 프로세스를 이해해야 데이터 모델링을 제대로 할 수 있다.

- 현실 세계를 데이터베이스에서 표현하기 위한 추상화 과정

- 데이터 모델링 표기법을 사용해 모델링

- 고객의 업무 프로세스내 비즈니스 프로세스 규칙을 정의하여 데이터 모델로 표현할 수 있어야 함.

- 고객이 이해하기 쉽게 간결하게 모델링 해야 함.

 

2. 데이터 모델링의 특징

추상화 Abstraction 현실 세계를 일정한 양식에 맞게 간략하게 표현
단순화 Simplification 누구나 이해하기 쉽게 약속된 규약의 표기법 또는 언어를 이용해 표현
명확화 Clarity 명확하게 의미가 한 가지로 해석되어야 함.

 

3. 데이터 모델링의 단계

1) 개념적 모델링 : 추상화 수준이 가장 높음. 업무 측면의 모델링. 전사적/포괄적 모델링. 핵심 엔터티(객체) 도출. ERD 작성

2) 논리적 모델링 : 특정 DB모델에 종속. 세부속성/식별자/관계 등 정확하게 표현. 정규화 완료. 재사용성 높음

3) 물리적 모델링 : 물리적 성능과 데이터 저장을 고려한 설계. 가장 구체적. 추상화 수준이 가장 낮음.

 

4. 데이터 모델링의 3과지 관점

* 데이터 관점

- 데이터와 업무 간의 어떤 관련이 있는지,  데이터 사이의 관계가 무엇인지에 따라 모델링함.

- 비즈니스 프로세스에 사용되 는 데이터 의미

- 구조분석, 정적분석

 

* 프로세스 관점 

- 실제 하는 업무에 따라 무엇을 어떻게 하는지 모델링 함.

- 비즈니스 프로세스에서 수행하는 작업 의미

- 시나리오 분석, 도메인 분석, 동적 분석

 

* 데이터와 프로세스의 상관 관점

- 업무의 처리(프로세스)와 데이터 간의 서로 어떤 영향을 주고 받는지를 모델링

- 프로세스와 데이터 간의 관계 의미

- CRUD ( Create, Read, Update, Delete)

 

5. 데이터 모델링을 위한 ERD

- 1976년 피터첸이 만든 표기법

- 대표적 표기법 : IE, Barker

* ERD 작성순서

1) 엔티티 도출

2) 엔티티 배치

3) 엔티티 관계 설정

4) 관계명 기술

5) 관계 참여도 기술

6) 관계 필수 여부 기술

 

6. 3단계 구조 스키마(3-Level Schema)

- 데이터베이스 독립성을 위해 3단계 구조 스키마 존재

- 사용자(외부 스키마), 설계자(내부 스키마), 개발자(개념 스키마)의 각기 관점에 따라 데이터베이스를 기술하고 이들간의 관계를 ANSI표준으로 정했다.

- 데이터의 독립성 확보를 통해 데이터 복잡도 감소, 데이터 중복 제거, 사용자 요구사항 변경에 따른 대응력 향상, 관리 및 유지보수 비용 절감등의 장점이 생긴다.

- 각 계층을 뷰라고 부르며 3단계 계층으로 분리되어 서로 독립성을 확보한다.

 

7. 데이터베이스 3단계 구조 특징

외부 스키마
(외부 단계)
데이터베이스의 개별 사용자 관점의 이해와 표혐
응용프로그램이 접근하는 데이터베이스
여러 개의 외부 스키마 존재
개념 스키마
(개념 단계)
데이터베이스 관리자의 관점으로 규칙과 구조 표현
데이터베이스의 전체적인 논리구조
일반적으로 스키마는 개념 스키마를 지칭
내부 스키마
(내부 단계)
데이터베이스 시스템의 설계자 관점으로 저장 장치 관점의 이해 및 표현
데이터가 실제로 데이터베이스에 물리적으로 어떻게 저장되는지 확인

 

8. 엔티티(Entity)

- 데이터의 집합

- 저장되며 관리되는 데이터

- 개념, 사건, 장소 등의 명사

- 유형과 무형에 따른 분류

유형 엔티티 물리적 / 안정적 / 지속적
ex) 사원, 제품, 교수 등
개념 엔티티 물리적이지 않지만 개념적으로 존재하며 정보로 구분
ex) 강의, 금융상품, 부서 등
사건 엔티티 비즈니스 프로세스에 따라 발생되는 엔티티
데이터가 많음
ex) 구매, 판매, 영업, 수납 등

- 발생 시점에 따른 엔티티 분류

기본 엔티티 키 엔티티라고 하며, 독립적으로 생성 및 관리됨
ex) 고객, 부서, 판매제품
중심 엔티티 기본 엔티티로부터 발생되는 행위 엔티티를 생성하는 중간 엔티티
ex) 계좌, 주문, 수납 등
행위 엔티티 상위에 있는 2개 이상의 엔티티로부터 발생되는 엔티티
ex) 주문이력, 접속 이력, 수납 이력 등

 

9. 속성(Attribute)

- 엔티티가 가지는 항목

- 속성은 더 이상 분리되지 않음

- 업무에 필요한 데이터를 저장

- 인스턴스의 구성 요소로 최소의 데이터 단위

- 속성의 특징

1) 속성은 업무에서 관리되는 정보

2) 속성은 하나의 값만 가짐

3) 주식별자에게 함수적으로 종속. 기본키에 따라 속성의 값도 변경될 수 있음

- 특성에 따른 속성 종류

기본 속성 비즈니스 프로세스에서 도출한 본래의 속성
ex) 이름, ID, 전화번호, 등록일시 등
설계 속성 데이터 모델링 과정에서 발생되는 속성
ex) 상품코드, 지점코드 등
파생 속성 다른 속성에 의해 만들어지는 속성
ex) 합계, 평균 등

 

728x90
반응형
LIST
728x90
반응형
SMALL

시퀀스

- 자동으로 유일한 번호 생성

- 공유 가능한 객체

- 주로 기본키에 저장될 값을 만드는데 사용

- 애플리케이션 코드 대체

- 메모리에 캐쉬되면 시퀀스 값을 사용하는 효율성 향상시킴.

 

1. 시퀀스 생성

CREATE SEQUENCE sequence_name
	[START WITH n]
    [INCREMENT by n]
    [{MAXVALUE n | NOMAXVALUE}]
    [{MINVALUE n | NOMINVALUE}]
    [{CYCLE | NOCYCLE}]
    [{CACHE n | NOCACHE}]
create sequence depts_seq
start with 91
increment by 1
maxvalue 100
nocycle
nocache;

2. 시퀀스 확인

- USER_SEQUENCES 데이터 사전 뷰에서 시퀀스 값을 검사

- LAST_NUMBER 열은 다음 이용 가능한 시퀀스 번호 출력

select sequence_name, min_value, max_value, increment_by, last_number
from user_sequences;

3. NEXTVAL과 CURRVAL

- NEXTVAL은 다음 사용 가느한 시퀀스 값을 반환

- 시퀀스가 참조될 때마다 사용자에게 유일한 값을 반환

- CURRVAL이 현재 시퀀스 값 반환

- CURRVAL이 참조되기 전에 NEXTVAL 이 먼저 이용되어야 함

4. 시퀀스 사용

insert into depts(deptno, dname, loc)
values (depts_seq.NEXTVAL, 'MARKETING', 'SAN DIEGO');
select * from depts;
select depts_seq.currval
from dual;

5. 시퀀스 수정

ALTER SEQUENCE sequence_name
    [INCREMENT by n]
    [{MAXVALUE n | NOMAXVALUE}]
    [{MINVALUE n | NOMINVALUE}]
    [{CYCLE | NOCYCLE}]
    [{CACHE n | NOCACHE}]
alter sequence depts_seq
maxvalue 99999;

6. 시퀀스 삭제

- DROP SEQUENCE 문장을 사용하여 데이터 사전에서 시퀀스 제거

- 한 번 제거되었다면 시퀀스는 더는 참조될 수 없음.

drop sequence sequence_name;

 

인덱스

- 인덱스는 테이블이나 클러스터에서 쓰이는 선택적인 객체

- DB 테이블에서 원하는 레코드를 빨리 찾아갈 수 있음

 

1. 인덱스 생성

- 자동 : 유일인덱스는 테이블 정의 primary key 또는 unique 제약조건 정의 시 자동 생성

- 수동 : 사용자는 행에 대한 엑세스 시간을 줄이기 위해 열에서 유일하지 않은 인덱스 생성 가능

CREATE [UNIQUE | BITMAP] INDEX index_name
ON table_name(col1, col2);
create index emps_first_name_idx
on emps(first_name);

2. 인덱스 삭제

DROP INDEX emps_first_name_idx;

 

동의어

- 객체를 위한 대체 이름 제공

CREATE [PUBLIC] SYNONYM [schema.]synonym
FOR [schema.]object;

 

 

728x90
반응형
LIST

'IT > SQL' 카테고리의 다른 글

[SQL] 12. 뷰(View)  (0) 2023.05.16
[SQL] 11. 제약조건(Constraints)  (0) 2023.05.15
[SQL] 10. 테이블 생성과 관리  (0) 2023.05.15
[SQL] 9. 트랜잭션(Transaction)  (0) 2023.05.15
[SQL] 8. 데이터 조작(DML)  (0) 2023.05.15
728x90
반응형
SMALL

뷰(View)

- 뷰(View)는 테이블 또는 다른 뷰를 기초로 하는 논리적 테이블이다.

1. 뷰의 사용 목적

- 접근제어를 통한 자동 보안이 제공되므로 데이터베이스 액세스를 제한하기 위해 사용

- 복잡한 질의를 쉽게 만들어주기 때문에 사용자의 데이터 관리를 간단하게 해줌

- 같은 데이터를 다른 뷰로 나타낼 수 있으므로 같은 데이터에 대해 동시에 여러 사용자의 다른 응용프로그램 요구를 지원해줌.

2. 단순 뷰와 복합 뷰

특징 단순 뷰 복합 뷰
테이블 수 하나 둘 이상
함수 포함 없음 있음
데이터 그룹 포함 없음 있음
뷰를 통한 DML 있음 없음

*뷰에 관한 정보

SELECT * FROM USER_VIEWS;

뷰 생성, 데이터 검색, 수정, 삭제

1. 뷰 생성 권한

select * from user_role_privs; --현재 사용자의 롤

select * from user_sys_privs; -- 현재 사용자에게 주어진 권한

 

2. 뷰 생성

- CREATE VIEW 문장 내에서 서브쿼리 작성

- 서브쿼리는 조인 구문 포함 가능

- CREATE VIEW 절에서 열 별칭은 서브쿼리에서의 열과 같은 순서로 나열됨.

CREATE [OR REPLACE]
	[FORCE | NOFORCE]
VIEW view_name[(alias[, alias ...])]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint_name]]
[WITH READ ONLY]

1) 뷰 생성

create view emp_view_dept60
as select employee_id, first_name, last_name, job_id, salary
from employees
where department_id=60;
select * from emp_view_dept60;

 

2) 뷰 생성 서브쿼리에서 별칭 사용

create view emp_dept60_salary
as select
employee_id as empno,
first_name || ' ' || last_name as anme,
salary as monthly_salary
from employees
where department_id=60;
create view emp_dept60_salary (empno, name, monthly_salary)
as select
employee_id,
first_name || ' ' || last_name,
salary
from employees
where department_id=60;
select * from emp_dept60_salary;

 

3. 뷰 질의

select * from user_views;

4. 뷰 수정

- CREATE OR REPLACE VIEW 절을 사용하여 뷰를 수정

- ALTER 사용X

CREATE OR REPLACE VIEW veiw_name...
create or replace view emp_dept60_salary
as select
employee_id as empno,
first_name||' '||last_name as name,
job_id job,
salary
from employees
where department_id=60;
desc emp_dept60_salary;

5. 복합 뷰 생성

- 두 개 이상 테이블로부터 값을 출력하는 뷰를 생성

create view emp_view
as select
e.employee_id as id,
e.first_name as name,
d.department_name as department,
j.job_title as job
from employees e
left join departments d on e.department_id=d.department_id
join jobs j on e.job_id=j.job_id;
select * from emp_view;

 

6. 뷰 삭제

- 뷰는 데이터베이스에서 기본 테이블을 기반으로 하므로 데이터 손실 없이 삭제 가능

DROP VIEW view_name;

 

뷰를 이용한 DML 연산

1. 뷰에서 DML 연산 실행 규칙

- 단순 뷰에서 DML 연산 수행가능

- 뷰가 다음을 포함한다면 행 제거 불가능(그룹함수, GROUP BY, DISTINCT)

- 뷰가 다음을 포함한다면 데이터 수정 불가능(행제거불가표현, 표현식, ROWNUM)

- 뷰가 다음을 포함한다면 데이터 추가 불가능(행제거불가조건, 수정불가조건, NOTNULL)

create table emps as select * from employees;

 

1) 데이터 조작이 가능한 경우

- 단순 뷰에서 DML 연산수행 가능

create or replace view emp_dept60
as select * from emps where department_id=60;

delete from emp_dept60 where employee_id=104;
select * from emps where employee_id=104;

2) 행 제거가 안 되는 경우

create or replace view emp_dept60
as select distinct * from emps where department_id=60;

delete from emp_dept60 where employee_id=60;

3) 데이터 수정이 안 되는 경우

create or replace view emp_dept60
as select
employee_id,
first_name||' '||last_name as name,
salary*12 as annual_Salary
from emps where department_id=60;

update emp_dept60 set annual_salary=annual_salary*1.1
where employee_id=106;

 

4) 데이터 입력이 안 되는 경우

create or replace view emp_dept60
as select
employee_id,
first_name,
last_name,
email,
salary
from emps where department_id=60;

insert into demp_dept60
values(500,'JinKyoung','Heo', 'HEOJK',8000);

 

2. WITH CHECK POINT

- 뷰에 대한 DML연산이 뷰의 조건을 만족할 때만 수행하게 함

create or replace view emp_dept60
as select employee_id, first_name, hire_Date, salary, department_id
from emps
where department_id=60
with check option;

update emp_dept60
set department_id=10
where employee_id=105;

 

3. WITH READ ONLY

- DML 연산을 수행할 수 없게 함

- DML 수행 시 에러 발생

create or replace view emp_dept60
as select employee_id, first_name, hire_Date, salary, department_id
from emps
where department_id=60
with read only;

delete from emp_dept60
where employee_id=105;

 

인라인 뷰(Inline View)

- SQL 구문에서 사용 가능한 별칭(상관 이름)을 사용하는 서브 쿼리

- 기본질의의 FROM 절에 명명된 서브쿼리를 사용하는 것과 유사

- 객체가 아님.

select row_number, first_name, salary
from ( select first_name,salary,
row_number() over(order by salary desc) as row_number
from employees)
where row_number between 1 and 10;

 

728x90
반응형
LIST

'IT > SQL' 카테고리의 다른 글

[SQL] 13. 시퀀스, 인덱스, 동의어  (0) 2023.05.16
[SQL] 11. 제약조건(Constraints)  (0) 2023.05.15
[SQL] 10. 테이블 생성과 관리  (0) 2023.05.15
[SQL] 9. 트랜잭션(Transaction)  (0) 2023.05.15
[SQL] 8. 데이터 조작(DML)  (0) 2023.05.15
728x90
반응형
SMALL

제약조건이란?

- 테이블의 해당 열에 사용자가 원치 않은 데이터가 입력/수정/삭제되는 것을 방지하기 위한 조건

- 제약조건에 종속성이 존재할 경우 테이블의 삭제를 방지

select * from user_constraints;

 1. 제약조건 정의

- 테이블 레벨 제약조건을 정의할 수 있음

- 열 레벨 제약조건을 정의할 수 있음

CREATE TABLE [schema.] table(
	column datatype [DEFUALT expr] [column_constraint],
    ...,
    [table_constraint]
);

2. 열 레벨 제약조건

- 열별로 제약 조건 정의

- 무결성 제약조건의 어떤 유형도 정의 가능.

column datatype [DEFUALT expr]
[CONSTARINT constraint_name] constraint_type,

3. 테이블 레벨 제약조건

- 하나 이상의 열을 참조하고, 테이블의 열 정의와는 개별적으로 정의

- not null은 열레벨 제약조건으로만 가능

 

제약조건 종류

1. NOT NULL

- null 값을 가질 수 없음

- 열 레벨 제약조건으로만 설정 가능

2. PRIMARY KEY

- 값들이 유일해야 함

- null값을 가질 수 없음

3. UNIQUE

- 값들이 유일해야 함

- null값 가질 수 있음

4. FOREIGN KEY

- 테이블간의 관계 설정

5. CHECK

- 각 행을 만족해야 하는 조건 정의

 

제약조건 관리

- 제약 조건의 추가 또는 삭제는 가능.

- 수정을 불가능

- 제약조건의 활서화/비활성화 가능

- MODIFY 절을 사용해 not null조건 추가

 

1. 제약조건 추가

ALTER TABLE table_name
ADD [CONSTRAINT constraint_name] type(column);

2. 제약조건 조회

- 모든 제약조건 정의와 이름을 보기 위해 user_constraints 테이블을 질의

- user_cons_columns 뷰에서 제약조건 이름과 관련된 열 보기 가능

3. 제약조건 삭제

ALTER TABLE table_name
DROP PRIMARY KEY
| UNIQUE (column)
| CONSTRAINT constraint_name
[CASCADE];

4. 제약조건 비활성화

- 무결성 제약조건을 비활성화하기 위해 alter table문장의 disable 절을 실행

- 종속적인 무결성 제약조건을 비활성화하기 위해 cascade 옵션 적용

ALTER TABLE table_name
DISABLE [NOVALIDATE | VALIDATE]
CONSTRAINT constraint_name [CASCADE];

5. 제약조건 활성화

- 무결성 제약조건 활성화

ALTER TABLE table_name
ENABLE [NOVALIDATE | VALIDATE]
CONSTRAINT constraint_name;
728x90
반응형
LIST

'IT > SQL' 카테고리의 다른 글

[SQL] 13. 시퀀스, 인덱스, 동의어  (0) 2023.05.16
[SQL] 12. 뷰(View)  (0) 2023.05.16
[SQL] 10. 테이블 생성과 관리  (0) 2023.05.15
[SQL] 9. 트랜잭션(Transaction)  (0) 2023.05.15
[SQL] 8. 데이터 조작(DML)  (0) 2023.05.15
728x90
반응형
SMALL

테이블 생성

1. 이름 규칙

- 테이블 이름과 열 이름은 문자로 시작

- 영어 대/소문자, 숫자, _ , $(보통 뷰에 사용), # 문자만 포함 가능

- 사용자에 의해 소유된 다른 객체(테이블, 뷰, 인덱스 등) 의 이름과 중복은 불가능

- 오라클 예약어 불가능

- 대소문자 구분X

2. 데이터 타입

문자 데이터 타입 CHAR(n) 고정길이 n. 문자 타입
VARCHAR2(n) 최대 n. 가변길이 문자 타입
숫자 데이터 타입 NUMBER(p, s) 전체 p 자리, 소수점이하 s자리 가지는 숫자 (s는 p에서 제외)
BINARY_FLOAT 4byte 부동 소수점 타입
BINARY_DOUBLE 8byte 부동 소수점 데이터 타입
날짜 데이터 타입 DATE 고정길이 날짜 데이터 타입
TIMESTAMP 날짜, 시간, 밀리초까지 표현
바이너리 데이터
타입
RAW(size) 가변 길이 바이너리 데이터 타입(최대 2000byte)
LONG RAW 가변 길이 바이너리 데이터 타입(최대 4gb)
BLOB 대용량 바이너리 데이터 타입(최대 4gb)
BFILE 대용량 바이너리 데이터를 파일 형태로(최대 4gb)

3. CREATE TABLE

CREATE TABLE[schema.] table_name(
	column_name data_type [DEFAULT expr],
    ...
);

4. 서브쿼리를 사용한 테이블 생성

CREATE TABLE table_name AS SELECT statement;

테이블 구조 변경

1. ALTER TABLE

- ADD / MODIFY 로 열을 변경할 수 있다.

ALTER TABLE table_name
ADD ( column data_type [DEFAULT expr]
	[, column data_type] ...);
    
ALTER TABLE table_name
MODIFY (column data_type [DEFAULT expr]
	[, column data_type] ...);
create table emp_dept50
as select employee_id, first_name, salary*12 as ann_sal, hire_Date
from employees
where department_id=50;

2. 열 추가

- ADD 절을 사용해 열을 추가

- 새로운 열이 마지막 열이 됨

ALTER TABLE emp_dept50
ADD (job VARCHAR2(10));

3. 열 수정

- MODIFY 절을 사용해 열을 ㅅ줭

- 기존의 데이터를 손상되게 크기를 조정할 수는 없음

alter table emp_dept50
modify(first_name varchar2(10));

4. 열 삭제

- ALTER TABLE문을 DROP COLUMN 절과 함께 사용하여 테이블에서 열 삭제 가능

- ORACLE 8i 부터 가능

ALTER TABLE table_name
DROP COLUMN column_name;
alter table emp_dept50
add(job_id varchar2(10));

alter table emp_dept50
drop column job_id;

5. 열 이름 변경

- RENAME COLUMN 절을 사용하여 테이블의 열 이름을 변경할 수 있습니다.

ALTER TABLE table_name
RENAME COLUMN old_name TO new_name;
alter table emp_dept50
rename column job to job_id;

6. SET UNUSED 옵션과 DROP UNUSED 옵션

- SET UNUSED 옵션을 사용하여 하나 이상의 열을 "사용되지 않았음"으로 표시

- DROP UNUSED COLUMNS 옵션을 사용해 UNUSED로 표시된 열을 제거

ALTER TABLE table
SET UNUSED [COLUMN] (column);

ALTER TABLE table
DROP UNUSED COLUMNS;

7. 객체 이름 변경

RENAME old_name TO new_name;
rename emp_dept50 to employees_dept50;
--테이블 이름이 변경되었습니다.

 

테이블 삭제

- 테이블의 모든 데이터와 구조가 삭제됩니다.

- 어떤 결정되지 않은 트랜잭션이 커밋됩니다.

- 모든 인덱스가 삭제됩니다.

- 이 문장은 롤백할 수 없습니다.

DROP TABLE table_name [ CASCADE CONSTRAINTS]
drop table employees_dept50;
--Table EMPLOYEES_DEPT50이(가) 삭제되었습니다.

 

테이블 데이터 비우기(TRUNCATE)

- TRUNCATE TABLE 문장으로 테이블의 모든 행을 삭제합니다.

- 해당 테이블에 사용된 기억공간을 해제합니다.

- TRUNCATE를 사용하여 삭제한 행을 롤백할 수 없습니다.

- TRUNCATE 대안적으로, DELETE 문장을 사용하여 행을 삭제합니다.

TRUNCATE TABLE table_name;
truncate table emp2;
--Table EMP2이(가) 잘렸습니다.

 

 

728x90
반응형
LIST

'IT > SQL' 카테고리의 다른 글

[SQL] 12. 뷰(View)  (0) 2023.05.16
[SQL] 11. 제약조건(Constraints)  (0) 2023.05.15
[SQL] 9. 트랜잭션(Transaction)  (0) 2023.05.15
[SQL] 8. 데이터 조작(DML)  (0) 2023.05.15
[SQL] 7. 서브쿼리(Subquery)  (0) 2023.05.12
728x90
반응형
SMALL

트랜잭션

- 트랜잭션 : 논리적인 작업의 단위

- 분리되어서는 안 될 작업의단위

- 실행 가능한 첫번째 sql문장이 실행될 때 시작

- commit/rollback으로 명시적으로 종료하거나 DDL/DCL 로 자동커밋되어 종료될 수 있음

문장 설명
COMMIT 미결정 데이터를 영구적으로 변경. 현재 트랜잭션 종료
SAVEPOINT savepoint_name 현재 트랜잭션 내에 savepoint 표시
ROLLBACK [[TO [SAVEPOIT]]] savepoint_name] 모든 미결정 데이터 변경을 버림. 현재의 트랜잭션 종료.

1. 암시적 트랜잭션 종료

* 자동 커밋

- DDL 문장 완료

- DCL 문장 완료

- 명시적 COMMIT / ROLLBACK 없이 SQL plus정상 종료할 때

 

* 자동 롤백

- SQL plus 비정상적 종료시

- 시스템 실패 시

 

create table emp_temp as select * from employees;

delete emp_temp where department_id=20;

savepoint svpnt_del_20;

delete emp_temp where department_id=50;

savepoint svpnt_del_50;

delete emp_temp where department_id=60;

rollback to savepoint svpnt_del_50;

728x90
반응형
LIST

'IT > SQL' 카테고리의 다른 글

[SQL] 11. 제약조건(Constraints)  (0) 2023.05.15
[SQL] 10. 테이블 생성과 관리  (0) 2023.05.15
[SQL] 8. 데이터 조작(DML)  (0) 2023.05.15
[SQL] 7. 서브쿼리(Subquery)  (0) 2023.05.12
[SQL] 6. 조인을 이용한 다중 테이블 검색  (0) 2023.05.11
728x90
반응형
SMALL

DML(Data Manipulation Language)

DML 문장 실행 상황

- 테이블에 새로운 행 추가

- 테이블에 있는 기존의 행을 변경

- 테이블로부터 기존의 행 제거

 

DML 종류

- INSERT

- UPDATE

- DELETE

 

예시

- 은행 DB. 저축성 예금 -> 당좌예금으로 전달

- 저축성 예금 감소

- 당좌 예금 증가

- 트랜잭션 일지에 트랜잭션 기록

=> 하나라도 실패시 모두 실패해야함.

=> 트랜잭션 보장 필요

 

CTAS(CREATE TABLE AS SELECT)

CREATE TABLE table AS SELECT statment

현재 있는 테이블 statement와 똑같은 구조를 갖는 tale 생

 

CREATE TABLE emp1 AS SELECT * FROM employees;
SELECT count(*) from emp1;

create table emp2 as select * from employees where 1=2;
select count(*) from emp2;

 

INSERT

INSERT INtO ( col1, col2,...)
VALUES (val1, val2, ...)

- col과 val은 순서를 맞춰야 함.

- 열 이름이 생략될 경우 모든 값을 다 넣어야 함.

- 값을 넣고 싶지 않은 부분은 null을 넣음

1. 테이블 구조 확인

DESC tablename;

2. 새로운 행 삽입

- 각각의 열에 대한 값을 포함하는 새로운 행 삽입

- 테이블에 있는 열의 티폴트 순서로 값 나열

- INSERT 절에서 열을 선택적으로 나열

- 문자와 날짜 값은 단일 따옴표 내에 둠.

INSERT INTO departments
VALUES(280, 'Data Analytics', null, 1700);

=>실행을 취소하려면 ROLLBACK; 사용(커밋했을 때로)

3. 다른 테이블로부터 행 복사

- 서브쿼리로 INSERT 문장 작성

- VALUES 절 사용X

- 서브쿼리의 열 수와 INSERT절의 열 수는 일치해야 함.

INSERT INTO table(col1, col2, ...)
select_sub_query;
CREATE TABLE MANAGERS As
select * from employees where 1=2;

insert into managers
select * from employees where job_id like '%MAN';

 

UPDATE

- update 문장으로 기존의 행 갱신

- 하나 이상의 행을 갱신 가능

create table emps as select * from employees;

alter table emps
add(constraint emps_emp_id_ppk primary key(employee_id),
constraint emps_manager_id_fk foreign key(manager_id)
references emps(employee_id));

1. 테이블 행 갱신

select employee_id, first_name, salary
from emps
where employee_id=103;
update emps
set salary=salary*1.1
where employee_id=103;

 2. 서브쿼리로 다중 열 갱신

UPDATE table
SET (col1, col2, ...) =
(SELECT col1, col2, ...
FROM table
WHERE condition)
WHERE condition;
update emps
set(job_id, salary, manager_id) =
(select job_id, salary, manager_id
from emps
where employee_id = 108)
where employee_id=109;

 

DELETE

DELETE [FROM] table
[WHERE condition];

1. 행 삭제

delete from emps
where employee_id = 104;
delete from emps
where emplyee_id=103;
-- 104번 사원의 매니저는 103이므로 제약조건때문에 삭제되지 않음.

2. 다른 테이블을 이용한 행 삭제

create table depts as
select * from departments;
delete from emps
where department_id=
(select department_id
from depts
where department_name='Shipping');

--45개 행 이(가) 삭제되었습니다.

3. RETURNING

- DML 조작 시 특정 값을 임시로 저장할 수 잇음

- Oracle 10g에 추가

variable emp_name varchar2(50);
variable emp_sal number;
variable;

delete emps
where employee_id=109
returning first_name, salary into :emp_name, :emp_sal;

select * from emps where employee_id=109;

print emp_name;
print emp_sal;

 

MERGE

- INSERT 문과 UPDATE 문을 동시에 사용할 수 있습니다.

- Oracle 9i에 추가되었습니다.

MERGE INTO table[alias]
	USING (target | view | subquery) [alias]
		ON(join_condition)
	WHEN MATCHED THEN
		UPDATE SET col1=val1
	WHEN NOT MATCHED THEN
		INSERT(column_lists) VALUES(value_lists);
create table emps_it as select * from employees where 1=2;

merge into emps_it a
    using (select * from employees where job_id='IT_PROG') b
    on (a.employee_id = b.employee_id)
when matched then
    update set
        a.phone_number =b.phone_number,
        a.hire_date=hire_date,
        a.job_id = b.job_id,
        a.salary=b.salary,
        a.commission_pct = b.commission_pct,
        a.manager_id = b.manager_id,
        a.department_id = b.department_id
when not matched then
insert values
(b.employee_id, b.first_name, b.last_name, b.email,
b.phone_number, b.hire_date, b.job_id, b.salary,
b.commission_pct, b.manager_id, b.department_id);

 

Multiple INSERT

INSERT [ALL | FISRT]
[[WHEN condition1 THEN]
	INTO [table1] VALUES(col1, col2, ...)]
[[WHEN condition2 THEN]
	INTO [table2] VALUES(col1, col2, ...)]   
[ELSE
	INTO [table3] VALUES (col1, col2)]

1. UNCONDITIONAL INSERT ALL

- 조건과 상관없이 기술된 여러 개의 테이블에 데이터 입력

insert all
into emp1
values (300, 'Kildong', 'Hong', 'KHONG', '011.624.7902',
TO_DATE('2015-05-11','yyyy-mm-dd'), 'IT_PROG', 6000, null, 100, 90)
into emp2
values (400, 'Kilseo', 'Hong', 'KSHONG', '011.324.7952',
TO_DATE('2015-06-20','yyyy-mm-dd'), 'IT_PROG', 5500, null, 100, 90)
SELECT * FROM dual;
create table emp_salary as
select employee_id, first_name, salary, commission_pct 
from employees
where 1=2;

create table emp_hire_date as
select employee_id, first_name, hire_Date, department_id
from employees
where 1=2;
insert all
into emp_salary values
(employee_id, first_name, salary, commission_pct)
into emp_hire_date values
(employee_id, first_name, hire_date, department_id)
select * from employees;

--218개 행 이(가) 삽입되었습니다.

 

2. CONDITIONAL INSERT ALL

- 특정 조건들을 기술하여 그 조건에 맞는 행들을 원하는 테이블에 난어 삽입

create table emp_10 as select * from employees where 1=2;
create table emp_20 as select * from employees where 1=2;
insert all
when department_id=10 then
into emp_10 values
(employee_id, first_name, last_name, email, phone_number,
hire_date, job_id, salary, commission_pct, manager_id, department_id)
when department_id=20 then
into emp_20 values
(employee_id, first_name, last_name, email, phone_number,
hire_date, job_id, salary, commission_pct, manager_id, department_id)
select * from employees;
--3개 행 이(가) 삽입되었습니다.
select * from emp_10;
select * from emp_20;

 

3. CONDITIONAL INSERT FIRST

- 첫번째 when 절에서 조건을 만족하는 경우 다음의 when절은 수행하지 않음.

create table emp_sal5000 as
select employee_id, first_name, salary from employees where 1=2;
create table emp_sa10000 as
select employee_id, first_name, salary from employees where 1=2;
create table emp_sal15000 as
select employee_id, first_name, salary from employees where 1=2;
create table emp_sal20000 as
select employee_id, first_name, salary from employees where 1=2;
create table emp_sal25000 as
select employee_id, first_name, salary from employees where 1=2;
insert first
when salary <=5000 then
into emp_sal5000 values(employee_id, first_name, salary)
when salary <=10000 then
into emp_sal10000 values(employee_id, first_name, salary)
when salary <=15000 then
into emp_sal15000 values(employee_id, first_name, salary)
when salary <=20000 then
into emp_sal20000 values(employee_id, first_name, salary)
when salary <=25000 then
into emp_sal25000 values(employee_id, first_name, salary)
select employee_id, first_name, salary from employees;
--109개 행 이(가) 삽입되었습니다.
select count(*) from emp_sal5000; --49
select count(*) from emp_sal10000; --45
select count(*) from emp_sal15000; --12
select count(*) from emp_sal20000; --2
select count(*) from emp_sal25000; --1

 

4. PIVOTING INSERT

- 여러개의 into절을 사용하지만 그 뒤에 오는 테이블은 모두 동일

- 비관계형DB를 관계형DB로 바꿀 때 사용

insert all
into sales_log
values(employee_id, week_id, 'SALES_MON', sales_mon)
into sales_log
values(employee_id, week_id, 'SALES_TUE', sales_tue)
into sales_log
values(employee_id, week_id, 'SALES_WED', sales_wed)
into sales_log
values(employee_id, week_id, 'SALES_THU', sales_thu)
into sales_log
values(employee_id, week_id, 'SALES_FRI', sales_fri)
select employee_id, week_id, sales_mon, sales_tue, sales_wed, sales_thu, sales_fri
from sales;
--10개 행 이(가) 삽입되었습니다.

 

728x90
반응형
LIST

'IT > SQL' 카테고리의 다른 글

[SQL] 10. 테이블 생성과 관리  (0) 2023.05.15
[SQL] 9. 트랜잭션(Transaction)  (0) 2023.05.15
[SQL] 7. 서브쿼리(Subquery)  (0) 2023.05.12
[SQL] 6. 조인을 이용한 다중 테이블 검색  (0) 2023.05.11
[SQL] 5. 분석 함수  (0) 2023.05.11
728x90
반응형
SMALL

서브쿼리

* 서브쿼리 : 다른 SELECT 문장의 절에 내장된 SELECT문장이다.

SELECT select_list
FROM table
WHERE expr operator 
		(SELECT select_list
        FROM table);

* 서브쿼리 사용시 규칙

- 서브쿼리는 괄호로 둘러싸여야 함(CTAS 제외)

- 비교 연산자의 오른쪽에 위치

- 두 종류의 비교연산자 사용(단일행, 다중행)

select first_name, salary
from employees
where salary > (select salary from employees where first_name='Nancy');

 

단일행 서브쿼리

- 내부 select 문장으로부터 하나의 행을 반환하는 질의

연산자 설명
= 같다
> 보다 크다
>= 보다 크거나 같다
< 작다
<= 작거나 같다
<>, != 같지 않다
select first_name, job_id, hire_date
from employees
where job_id = (select job_id from employees where employee_id=103);

 

다중행 서브쿼리

- 서브쿼리의 결과가 2개 행 이상일 경우

연산자 설명
IN 목록의 어떤 값과 같은지 확인
EXISTS 값이 있는지 확인. + 서브쿼리만 가능
ANY, SOME 비교 연산자. 하나만 만족
ALL 비교 연산자. 모든 값과 비교해서 만족
ALL / ANY 차이점 < ANY : 가장 큰 값보다 작으면 됨
> ANY : 가장 작은 값보다 크면 됨
< ALL :  가장 작은 값보다 작으면 됨
> ALL : 가장 큰 값보다 크면 됨
= ANY : IN과 같은 역할
select first_name, salary
from employees
where salary > (select salary from employees where first_name='David');


ORA-01427: single-row subquery returns more than one row
01427. 00000 -  "single-row subquery returns more than one row"
*Cause:    
*Action
select first_name, salary
from employees
where salary > any (select salary from employees where first_name='David');

select first_name, department_id, job_id
from employees
where department_id in (select department_id
                        from employees
                        where first_name = 'David');
                        
                        --in(60,80)과 같음

 

상호연관 서브쿼리

- 한 개의 행을 비교할 때마다 결과가 메인쿼리로 반환됨

- 한 행을 처리할 때마다 서브쿼리로 주고 값을 처리한 후 결과를 다시 메인쿼리로 전달=> 성능 저하

- 메인쿼리와 서브쿼리 사이에 결과를 교한하기 위해 서브쿼리의 where 조건절에서 메인쿼리 테이블과 연결

select first_name, salary
from employees a 
where salary > (select avg(salary)
from employees b
where b.department_id = a.department_id);

 

 

스칼라 서브쿼리

- SELECT 절에 사용하는 서브쿼리

select first_name, (select department_name from departments d where d.department_id = e.department_id) department_name
from employees e
order by first_name;

select first_name, department_name
from employees e
join departments d on (e.department_id = d.department_id)
order by first_name;

 

인라인 뷰

- FROM절에 서브쿼리가 온 것

select row_number, first_name, salary
from (select first_name, salary,
row_number() over(order by salary desc) as row_number
from employees)
where row_number between 1 and 10;

 

 

3중 쿼리와 Top-N 쿼리

- 서브쿼리 안에 또 다른 서브쿼리를 갖는 것

select rownum, first_name, salary
from (select first_name, salary from employees
order by salary desc)
where rownum between 1 and 10;

 

 

계층형 쿼리

- 수직적 관게를 맺고 있는 행들의 계층형 정보를 조회할 때 사용

SELECT select_list
FROM table
WHERE conditions
START WITH top_level_cindition
CONNECT BY [NOCYCLE] [PRIOR] connect_condition
ORDER SIBLING BY order_condition;
select employee_id,
lpad(' ',3*(level-1)) || first_name || ' ' ||last_name,
level
from employees
start with manager_id is null
connect by prior employee_id = manager_id;

select employee_id,
lpad(' ',3*(level-1)) || first_name || ' ' ||last_name,
level
from employees
start with employee_id=113
connect by prior manager_id=employee_id ;

728x90
반응형
LIST
728x90
반응형
SMALL

1. 통계

통계 특정집단을 대상으로 수행한 조사나 실험을 통해 나온 결과에 대한 요약된 형태의 표현
통계자료의 획득 방법 총 조사와 표본조사
표본 추출 방법 단순랜덤추출, 계통추출법, 집략추출법, 층화추출법
자료의 측정 방법 명목척도, 순서척도, 구간척도, 비율척도

2. 통계분석

기술통계
(Descriptive Statistic)
평균, 표춘편차, 중위수, 최빈값, 그래프
통계적 추론
(Statistical Inference)
모수추정, 가설검정, 예측

3. 확률 및 확률 분포

확률변수 특정 값이 나타날 가능성이 확률적으로 주어지는 변수
이산형 확률분포 베르누이분포, 이항분포, 기하분포, 다항분포, 포아송분포
연속형 확률분포 균일분포, 정규분포, 지수분포, t분포, F분포, x^2 분포

4. 추정 및 가설검정

추정 표본으로부터 미지의 모수를 추측하는 것
점추정(Point Estimation) '모수가 특정한 값일 것'이라고 추정하는 것.
구간추정(Interval Estimation) 점추정을 보완하기 위해 모수가 특정 구간에 있을 것이라고 추정하는 것.

- 가설검정 : 모집단에 대한 가설을 설정한 뒤, 그 가설을 채택여부를 결정하는 방법

* 귀무가설(H0) vs 대립가설(H1)

* 1종 오류 : 귀무가설이 옳은데도 귀무가설을 기각하게 되는 오류

* 2종 오류 : 귀무가설이 옳지 않은데도 귀무가설을 채택하게 되는 오류

  H0가 사실이라고 판정 H0가 사실이 아니라고 판정
H0가 사실임 옳은 결정 제 1종 오류
H0가 사실이 아님 제 2종 오류 옳은 결정

=> 1종 오류의 크기를 0,1 / 0.5 / 0.01 로 고정시키고 2종 오류가 최소가 되도록 기각역을 설정

 

5. 비모수 검정

- 비모수 검정 : 모집단의 분포에 대한 아무 제약을 가하지 않고 검정을 실시

- 가설 설정 방법 : '분포의 형태가 동일하다', '분포의 형태가 동일하지 않다'라는 식으로 가설을 설정

- 검정 방법 : 순위나 두 관측값 차이의 부호를 이용해 검정

728x90
반응형
LIST

+ Recent posts