오전 :
keywords
- 온라인에서의 약속
- db : view
- group by
- 집계함수
약속
온/오프라인 상관 없이 약속은 잘 지켜야한다.
어떤 약속들은 누군가에게 큰 영향을 줄 수도 있다.
view
논리적인 가상 테이블 객체.
Select문의 from 절에 위치해서 테이블 처럼 사용된다.
하지만 실제 데이터를 저장하고 있는 테이블은 아니다.
복잡한 조건의 문장을 쉽게 단순화해서 사용할 수 있다.
보안에 이점이 있다. (컬럼의 비공개)
작성법
create or replace view [스키마명.]뷰이름 as select 문장;
-- view 만들기
create or replace view aaa as
select first_name || ' ' || last_name, email, hire_date from employees;
-- view 사용
select * from aaa;
select iname from aaa;
view 데이터 수정
view 테이블에서 데이터를 수정하는 것은 권장할 일이 아니다.
view 제한사항 부여
- read only
- with check option
view는 데이터를 수정할 수 있기에, 제한사항을 부여할 일이 생긴다.
with read only 를 부여하면 view에 읽기만 가능한 권한이 부여된다.
집계함수,분석함수,group by , order by,의사컬럼(가짜 컬럼)을 사용하여,
서브쿼리로 작성된 뷰는 뷰를 통한 데이터 변경을 허용하지 않는다.
뷰에서의 데이터 무결성(뷰를 통해서 데이터 입력, 삭제, 수정을 일정부분 제한) 기능
-> with check option.
with check option
create or replace view test_view as
select employee_id,first_name,last_name,email,hire_date,job_id,department_id
from employees where department_id in (10,20,30)
with check option;
-- id 값을 40을 넣을때
insert into test_view values ( 333,'sarang33','kim33','kimsarang33',sysdate,'IT_PROG',40);
/*
Error report -
ORA-01402: view WITH CHECK OPTION where-clause violation
*/
inline-view
임시 테이블, 저장된 객체가 아니다.
쿼리가 실행되면 사라진다.
select * from (select * from employees);
sequence
numbering
예제
-- 테이블 생성
create table seqTest (
numbering number(10) constraint seqTest_num_pk primary key,
dataCol varchar2(10) not null
);
-- 올드 스쿨
-- 최대의 값을 선택해 1을 더한다음, 데이터 추가하는 넘버링 식 (old)
-- 쓰면 안되는 이유 : DB 데드락 유발. 데이터가 동시에 입력하는 경우, 오류 발생
insert into seqtest values (1,'bbbb');
insert into seqtest(numbering,datacol) values((select max(numbering) + 1 from seqtest), 'aaaa');
select*from seqtest;
-- 최-신 기술
-- sequence 는 순서대로 자기가 기억하는 번호로 저장함.
-- 이빨 빠지는 경우도 있지만, 안정성을 위하면 훨씬 좋음.
create sequence my_seq_num
minvalue 1
maxvalue 99999999
increment by 1
start with 12;
Synonym (시노님)
동의어(별명).
사용하는 이유
데이터베이스 보안성(원래의 객체에 별명을 달아서 숨김(?)).
편의성 : 긴이름의 객체를 짧게 사용할 수 있다. 시노님 단위 권한 부여
종류
- 공개 (public)
- 타 사용자가 접근권한이 없다면 볼 수 없음.
- 비공개 (private)
점심 : 야무지게 먹어야징
오후 :
keywords
- 집합연산자
- 계층형 쿼리
집한연산자
- Union (합집합)
- Intersect (교집합 연산자)
- Minus (차집합)
-- Union 예제
select 1,2,3,4 from dual
union
select 3,4,5,6 from dual;
/*
1 2 3 4
3 4 5 6
*/
집계함수
- sum
- min
- max
- couont
- avg
- stddev
- variance
-- 부서별로 집계 / 최대급여, 최소급여 ,평균 급여 집계
select department_id,max(salary) 최대, min(salary)최소, avg(salary)평균
from employees
group by department_id, job_id
order by department_id;
계층형 쿼리
오라클에서만 지원이 되었었다.
모든 DBMS에서 지원이 되고 있다.
'공부 > 오늘 배운것' 카테고리의 다른 글
22.11.02.Wed - 배움에 끝이 없다. 그러니 그 과정을 즐길 수 밖에. (0) | 2022.11.02 |
---|---|
22.11.01.Tue - java 시작인데, 두통이.. (0) | 2022.11.01 |
22.10.27.Thu - 조졌다 (0) | 2022.10.27 |
22.10.26.Wed - 부딪혀라 익숙해질때까지 (0) | 2022.10.26 |
22.10.25.Tue - 공부 (0) | 2022.10.25 |