본문 바로가기

교육/SQL

Day 24 (SQL)

반응형

putty만 접속이 안되고 Mobaxterm으로는 접속가능

오늘 테스트 : 둘다 접속가능

 

========================================================================

인라인 뷰(INLINE VIEW)와 TOP-N분석

튜닝에 사용할 목적으로 사용한다. 

 

*프로젝트 기간은 인시를 사용한다.인시는 한명이 작업시 소요되는 시간을 의미한다. 따라서 프로젝트에 참여하는 인원이 많으면 많을수록 프로젝트 기간이 줄어드는 것이 정상이다,

 

 

프로젝트 속도 사진

 

그로나 일정인원 이상이 참여하면 작업시간이 줄어들지 않는다. 왜냐하면 서로가 서로의 작업을 방해하기 때문이다. 이를 해결하기 위해 프로젝트를 분산하여 각각 완성되면 통합시키는 방식을 사용한다.

 

* 슬라이드에 숫자가 들어갈때는 순서를 나타낼때 뿐이다.

모델링과 방법론 중 데이터 중심의 개발 방법

* 정해진 시간 안에 다른 재화의 값을 정하지 않는것을 timeboxing방법이라고 한다.

* PM은 프로젝트 매니져로 모델러와 개발자의 중간다리역할을 한다.

 

인라인뷰는 뷰를 하나의 테이블로 인식해서 그 값을 정렬 시키는 방식이다. 따라서 SELECT ... FROM (SELECT문장 : sub query) [별명]...의 구성을 나타낸다.

 

ROWNUM은 행 번호를 주는 것이다. 행을 가르키는 지시어는 Oracle에서 ROWNUM, mysql에서는 LIMIT이다.

ROWNUM은 보통 '몇개 이하로 출력할것이다.'라고 할때 사용하는 지시어이기 때문에 'ROWNUM <= 갯수'로 표현한다.

 

TOP-N트리 분석은 최상위 또는 최하위 몇개만 확인하여 데이터를 분석하는 방식이다.

 

예제 비교사진

 

서브쿼리를 사용하지 않으면 연봉에 관계없이 무조건 가까운 블럭에서 값을 출력한다. 데이터가 저장될때 첫 블럭부터 순서대로 작성한다. 블럭은 행이 저장된 물리적 공간을 의미한다. 출력시마다 data가 다르다는 것은 '문제가 있는 DB'라는 말로 해석할수있다.

 

 

실습 26

1.  4.5 환산 평점이 가장 높은 3인의 학생을 검색한다.



2. 화학과 학생 중 기말고사 유기화학 점수가 최하위인 학생 3명을 검색한다.



3. 기말고사 과목별 평균이 높은 3과목을 검색한다.



4. 학과별 학년별 기말고사 평균이 순위 3위까지를 검색한다.

(학과, 학년, 평균점수를 검색한다.) // 따로 3개씩 출력하는것 해보기



5. 기말고사 성적이 높은 과목을 담당하는 교수 3인을 검색한다.

(교수 이름, 과목명, 평균점수를 검색한다.)



6. 교수가 강의하는 수업별로 현재 수강중인 학생의 수를 검색한다.

+ 교수별로 현재 수강중인 학생의 수를 검색한다.



//DISTINCT는 적혀진 모든 컬럼에서 중복값을 제거한다.

 

시퀀스

보통 PK값은 값의 의미가 없고 단지 구별만 되는 값이 많다. 따라서 시퀀스는 값의 의미는 없지만 중복되면 안되는 데이터에 사용한다. 저장순서와 작성순서는 일치하지 않는다. 사용자가 동시에 작성시 문제가 될수있기때문이다. 따라서 시퀀스 값은 사용자가 주는 것이 아니라 자동적으로 부여되는 값이다.

 

사용 방식은 TABLE생성 방식과 유사하다.

CREATESEQUENCE 시퀀스 이름

[ STRAT WITH 시작값 // 시퀀스의 시작값을 설정한다.

INCREMENT BY 증가값 // 시퀀스의 간격을 설정한다.

MAXVALUE [상한값|NOMAXVALUE] // 상한값과 하한값을 설정한다.DEFAULT값은 NOMAXVALUE/NOMINVALUE다. NOMAXVALUE/NOMINVALUE가 무한대는 아니지만 충분히 큰 값이기 때문에 무한대로 생각한다.

MINVALUE [하한값|NOMINVALUE]

CYCLE | NOCYCLE // 순환주기를 설정한다.

CACHE [cache개수|NOCACHE]]; //캐시의 개수를 지정한다.

 

하지만 보통은 'CREATESEQUENCE 시퀀스 이름;'으로만 사용한다. 왜냐하면 어차피 시퀀스 값의 범위는 무한대에 가까울 정도로 크고 그 값은 의미를 가지지 않고 단순히 구별만 해주기 위한 값이기 때문이다.

 

시퀀스의 내용을 파악하는 방식보다는 시퀀스를 구성하는 방식이 중요하다. 시퀀스는 값의 의미를 가지지 않고 단순히 구별만 해주기 위한 값이기 때문에 전체 DB안에서 각각 테이블 별로 시퀀스를 사용할 수 도 있지만, 하나의 시퀀스만을 사용할수도 있다.

 

시퀀스 값을 할당하는 지시어는 'INSERT INTO 테이블 (컬럼) VALUES (시퀀스명.nextval,'데이터');'이다. 시퀀스 값을 확인하는 지시어는 'SELECT 시퀀스명.currval FROM dual;'로 확인할수있다. 이때 중요한 점은 새로 생성한 시퀀스라 할지라도 할당 받는 숫자는 1이 아니다. 또한 그 값들이 순차적이 아니라 랜덤하게 발생한다. 왜냐하면 그 숫자들에 의미가 있는 것이 아니라 단순히 중복만 되지 않으면 되기 때문이다. 

 

sequence예제

 

 

예제를 보면 데이터를 저장하지 않아도 시퀀스가 부여되면 사용했던 시퀀스 번호는 다시 사용하지 않는다.

 

시퀀스를 구별하는 SELECT문은 다음과 같다.

SELECT sequence_name, max_value, min_value, increment_by, cache_size, last_number, cycle_flag

FROM user_sequences;

 

구문을 실행해보면 다음과 같다.

 

user_sequences사진

 

MAX_VALUE가 10^28로서 어마어마하게 큰 값임을 알수있다.  LAST_NUMBER는 어디까지 메모리에서 할당받았는지를 출력한다. 이 값은 현재 작업하는 순간에 할당받을 수 있는 값들 중 가장 마지막 값을 보여준다. 따라서 사용할때마다 계속 변화한다.

 


 

SQL 중요포인트

조인(rdbms의 핵심)

TO_CHAR/TO_DATE // 출력 서식을 맞추기 위해서 주로 날짜나 숫자 / 우리가 입력한 문자열을 오라클에 날짜로 인식시키는것.//주로 SELECT / 주로 WHERE INSERT

그룹함수 => 없어도 사용은 가능하나 몸이 고생

 

ERD 테이블 상세도표 표현

ERD 테이블 상세도표를 SQL문으로 변환

//uk나 check는 업무규칙에 따라 달라짐 but NOT NULL은 NUMBER타입은 무조건 지정



반응형

'교육 > SQL' 카테고리의 다른 글

Day 23 (SQL)  (0) 2019.12.18
Day 22 (SQL)  (0) 2019.12.17
Day 21 (SQL)  (0) 2019.12.16
Day 20 (SQL)  (0) 2019.12.13
Day 19 (SQL)  (0) 2019.12.13