테이블
데이터를 저장하기 위한 것
create table 데이블이
(
컬럼이름, 컬럼타입, (길이) [ 여기 ],
컬럼이름, 컬럼타입, (길이),
constriaint dept_a_pk printmary key (a)
)
필수 요소 테이블 이름 , 컬럼이름, 컬럼타입, (길이)
제약조건
-PK ,FK, nn , uk, ck
-제약조건을 생성할 때도 생성이후에도 생성 가능
-not null 만 [ 여기 ] 에 기록 가능 ( constraint 가 생략가능해서 생략됨 )
alter table
add
- (a number (t));
- 컬럼이름과 데이터타입 길이
- pk, fk, uk, ck 가능
constraint 이름 유형 (column)
modify
- dauatype 변경
- 길이를 줄이거나 키우거나
- (a number (t));
- 컬럼이름과 데이터타입 길이
- 무결성따름
- nn
- a constraint 이름 유형 ;
drop column
- table 삭제할 때 사용
trauncate table
-delete
__________________복습
2권 15p
vew
-중요
- 데이터의 엑섹스를 제한하기위해 만들어진 객체
- select 문장을 대체가능함
- 단순뷰 : - 보여주는 데이터 == 테이블의 원래 데이터
테이블의 데이터를 그대로 보여주는 데이터
- DML 연산이 가능하다 (공식) 현업에선 데이터보안때문에 뷰를 통한 DML 연산 안하는 편
- 복합뷰 : - 테이블의 데이터가 변경된 걸 보여주는 데이터
- DML 연산이 불가능
- 가짜 테이블이라고 불린다
테이블은 실제로 데이터를 가지고 있으니까
1 create view empvu80
2 as select employee_id, last_name, salary
3 from employees
4* where department_id = 80
SQL> /
View created.
-
SQL> create view salvu50
2 as select employee_id ID_NUMBER, last_name NAME, salary*12 ANN_SALARY
3 from employees
4 where department_id = 50;
View created.
SQL> select * from salvu50 > 생성한 뷰 확인 가능
뷰와 테이블의 차이란 ?
-뷰는 변경된 값을 적용할 수 있다
테이블
- 생성시 컬럼이름, 길이, 데이터 를 저장하여 저장구조가 생성된다
논리적으로 무언가 만들어진 것
- 수정시 alter 테이블로 구조를 변형시킴
뷰
- 생성시 select의 문장을 저장한다
select empidd
fromm emp
where depfid = 50 ;
즉 create view 어쩌고 , 자체를 저장한다
-복작합 질의의 값을 간단하게 한다
- m 일회성
- alter 명령어는 없다/ 뷰수정하는건 뷰가 가지고 있는 select어쩌고 웅엥웅
create or replace 을 써서 덮어서 수정되는것처럼 보이게 만든다
- 뷰가 가장 많이 쓰일 때 ex p27 같은것, 주기적으로 확인해야하는 통계값들
매주 물건의 웅엥웅 을 할 때
뷰 제거 p34
- 테이블에 영향없이 삭제한다
select 만 없애는 거니까
____________________인라인 뷰 p35
- 현업에서 가장 많이 사용
- from 에서 사용하였던 서브쿼리를 일라임 뷰라고 한다
__________
+
1 select rownum, salary
2* from employees
rownum 은 행 출력이 웅엥웅 ?
__________
-급여를 많이받는 상위 3명 출력
select rownum, last_name, salary
from employees
where romnum <=3
order by salary desc
/
-정렬 잊지마 . . . !
-하지만 where이 먼저 실행되어 우리가 원하는 값이 안된다
select rownum, last_name, salary
from (
select rownum, last_name, salary
from employees
order by salary desc
)
where rownum <=5
/
-그래서 from 에서 서브쿼리를 ( ==인라인 뷰 ) 를 사용한다
인라인뷰란
-from 절에서 임시 공간에 테이블을 생성하여 사용하는 뷰와 비슷한 저장 형태
(+ 서브쿼리는 where 조건 절에서 비교형태로 사용되는 형태
스칼라서브쿼리 select 절에서 함수처럼 사용되는 쿼리문을 말하며 반환값은 한개여야한다
출처 : https://seohc.tistory.com/103?category=485501 )
- 큰 장점 : 변경된 값을 근거로 해서 기존에 있는 테이블과 비교를 할 때
-35p
select a.last_name, a.salary, a.department_id, b.maxsal
from employees a,
(
select department_id, max(salary) maxsal
from employees
group by department_id
) b
where a.department_id = b.department_id
and a.salary < b.maxsal
/
top-n 분석
- 상위 몇개 하위 몇개를 분석할때
- rownum /
- where 이나 having 에서는 order by 절을 사용 안했다 ?
p38
select rownum as rank , last_name, salary
from (
select last_name, salary
from employees
order by salary desc
)
where rownum <= 3
/
-nownum 는 크다는 값은 없다
cuz 행이 출력이 되면 rownum 이 생성되는데
보다 크다/ 크다는 건 그 전의 값이 출력되지않았기 때문에 just 크다는 값은 존재하지 않는다
ex / 38p 의
where rownum > 3 하면 no rows selected 라고 없다고 뜬다
______________________________t
회사의 평균 급여가 많은 상위 3개 부서의 번호와 평균 급여를 출력하시오
-흰트 : select 는 내가 보고자하는걸 출력하고, , , ,웅엥웅
select rownum as rank, department_id, avg(salary)
from
(
select department_id, avg(salary) AVG
from employees
group by department_id
order by avg(salary) desc
)
where rownum <= 3
/
- avg(salary) 때문에 오류가 나느데 이유는
avg 로 시작하는 건 테이블로 시작하지않는다, 사용하지 못한다
그래서 alais를 줘야한다
-인라인 뷰가 테이블처럼 사용되는데
컬럼 헤딩들이 테이블이 실행되는 동안
avg , sum 등은 컬럼이름(헤딩)으로 사용할 수 없다 그래서 알리아스를 줘야한다
- 인라인 뷰는 그게 실행되는 동안 테이블처럼 사용된다
즉 아래처럼 바꿔줘야한다.
select rownum as rank, department_id, AVG
from
(
select department_id, avg(salary) AVG
from employees
group by department_id
order by AVG desc
)
where rownum <= 3
/
-rownum는 그때그때마다 출력이 되는 행의 갯수를 추출해주는 함수 == 추출해주는 함수
______________________________
인덱스 57p
- 컬럼단위에 설치를 한다
- 별도의 저장형태를 배열 형태로 가지고 있다
- 테이블 풀스택 == 순차 어쩌고
- 인덱스를 찾고 그에 해당하는 포인터를 보고 값을 찾아간다
- PK , UK 를 설치하면 자동으로 인덱스를 설치한다
- pk, uk의 공통점은 중복이 없다.
-
- 범위선정? 할 때 좋다 > 순차적으로 되어있기에 빠르다
- 전체데이터에 인덱스를 할당하지 않는이유는 전체의 4%만 하는게 빠르다
- DB설계 : 마지막 물리적설계때 인덱스를 설계함
동의어 67p
- 오라클에서만 사용할 수 있음
시퀀스 46p
- 자동번호 생성기
- primary 키에 자주 사용함
ex 엑셀에서 드레그하면 자동으로 번호생성되는 것
- 공유할 수 있는 개체이다
- 메모리에 캐시(메모리에 저장하는 무엇) 가 누적된다
- 스텍 : 입구 == 출구 /
- 큐 :
- 리프 : 입구 != 출구
메모리를 저장할 때 여러 방법이 있는데 대중화 되어있는게 스텍 큐 덱
메모리 관리 : 기존에 있는 메모리를 삭제하고 다른 메모리를 넣음
다섯가지 옵션 사용 가능
- increament by x
- 그 다음번호가 생성되는 증가값 x만큼 증가하여 다음에 x+10 이 생성됨
- start with x
- 시작번호가 x
- naxvalue x
- 생성되는 최대값이 x값
- nocache
- 디폴트값은 노캐시 / 디폴트라 생략가능
-
- nocycle
- 디폴트값은 노사이클 / 디폴트라 생략가능
- 사이클옵션을 준다면 다사용하고 재사용이 가능하다 / 재사용이 가능하다
- for (i=10; i<=100 ; i+10) 일경우 i=100되고 난 뒤에 다시 i=10부터 시작한다
- 중복된다
- 무결성에 어긋난다
- primary key 를 생성할때 제일 많이 사용한다
p48
create sequence dept_deptid_seq
increment by 10
start with 300
maxvalue 9999
/
-확인방법1
select sequence_name, min_value, max_value, increment_by, last_number
from user_sequences
/
-확인방법2
select sequence_name, min_value, max_value, increment_by, last_number
from user_sequences
where sequence_name = 'dept_deptid_seq'
/
- insert 문장 으로 새로운 행 실행
- 확인 ( select *from departments )
- rollback 하면 생성된 트랙잭션1 이 사라지고 다시 새로운행 실행하면 트랜잰션 2 가 생긴다
- 트랜잭션1 이라는 공백이 생긴다
- 다른 곳에서 시퀸스 생성(트랜잭션3)하면 그이후의 번호(트랜잭션4)로 생성한다
- 시퀸스는 한 번 생성을 해버리면 더이상 추출하지않는다
- 다른 곳에서 시퀸스 생성하면
insert into departments(
department_id, department_name, location_id )
values (
dept_deptid_seq.nextval, 'Support', 2500 )
/
시퀸스 수정
- 이전에 생긴거에는 영향을 안 주고 이후에만 영향준다
- start with는 절대로 바꿀 수 없다
start를 바꾸고 싶을 경우에는 삭제하고 재 생성 해야한다
- maxvalue 를 수정하고 싶은 경우에는
기존에 생성이 되었던 (줄일때) 일부검증을 해서 맞는지 틀린지를 검증하고 맞으면 되고 틀리면 안됨
( 이미 생성된 값은 영향을 못 주기에 줄일경우 이미 만들어진 거 이전으로 못 수정함 )
primary 키에 자주 사용하는 시퀸스
-개념적설ㄱㅖ 에서 논리적설계로 넘어갈대
__________정리 DDL
테이블
- 디폴트 4개 값 갖기
- 데이터베이스의 무결성을 위해 제약조건 가짐
- 제약조건 5가지
- 변경, 수정은 alter table 어쩌고로 한다
- 드랍은 한 번 더 고민 /오토커밋이 일어나서 백업본이 없는 이상 절대 복구할 수 없다
뷰
- 가짜테이블
- 형성할때 사용한 select명령문을 저장한다
- 두가지 : 단순 뷰 , 복합 뷰
- 데이터의 엑섹스를 제한 할 수 있다
- 뷰 수정 alter view X , 새로운 뷰 생성해서 덮어쓴다
- 인라인 뷰 : from 절에서 사용되는 서브쿼리st
- rownum
- top
시퀀스
- 중복되지않는 일련 번호
- create 시퀀스
- 5가지 (start with
- 수정 alter 시퀀스 / but strat with는 수정불가 > 재생성하기
-
인덱스
- 데이터 검색속도 증진위하여 사용
- 동의어를 통한것
________________________________________________
________________________________________________
________________________________________________
________________________________________________ DCL 71p
data control language
시스템 권한
- 백가지 권한이 있다 (외울필요 ㄴ )
- 대표 create user / drop user / drop ant table 등 p75
데이터 권한
-
________________1run =1R
SQL> conn system/12345 > 시스템 계정으로 로그인
Connected.
SQL>
SQL> create user test > 유저 만들기
2 identified by test
3 ;
User created.
________________2run =2R
SQL> conn test/tset
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
SQL>
1R
grant create session to test > grant 로 권한 부여 / 권한은 여러 유저에게 동시 부여 가능
/
롤 만들기
-롤 = 여러 유저에게 권한을 동시 부여할 때 사용
create role manager ; >
grant a, b, c to manager ; > a, b, c 에게 메니저 권한을 줌
grant manager to scott, test; > scott, test 에게 롤을 부여함
grant d to manager ; > 메니저라는 권한을 a,b,c,d 에게 줌
> 새로운 메니저 권한을 준다면 메니저 권한을 가진 scott, test 는 자동으로 메니저 권한을 가지고있다
> roll만 관리하면 roll에 관여된 모든 유저들을
-sysDBA
- 계정이 있는게 아니고 디비의 모든걸 컨트롤 할 수 있다
- conn /as sysdba 하면
alter user 로 암호변경(DBA == system ) 하지만 유저가 변경 가능 하다
객체권한 p82
???????????????????
권한은 기본적으로 DBA가 줄 수 있지만 일반 유저1는 권한을 타인2한테 권한이 없다
하지만 DBA가 마지막에 with grant option을 한다면
유저1이 권한을 타인2에게 전달 가능 하다 > ?????????
( 권한종속이 가능하다 )
DBA가 권한을 회수하면 종속된 권한은 모두 끌려온다
system 권한
회수할때도 준 사람만 권한회수 가능
with admin optin
종속적으로 회수가 안된다
???????????????????
-create user 하는 방법/ 패스워드 / 유저수정 / grant 로 시스템 권한 / 회수 하는 명령어 /
[Data Base] 2019.06.25. 기록. 문제풀이 (0) | 2019.08.24 |
---|---|
[Data Base] 2019.06.24. 기록. 실습내용 (0) | 2019.08.24 |
[Data Base] 2019.06.22. 기록. 실습내용 (0) | 2019.08.23 |
[Data Base] 2019.06.21. 기록 (0) | 2019.08.22 |
[Data Base] 2019.06.20. 기록 (0) | 2019.08.22 |
댓글 영역