오늘보다 더 나은 내일의 나에게_

비전공자의 IoT 국비 교육 수강일지 Day_10 본문

비전공자의 코딩일지

비전공자의 IoT 국비 교육 수강일지 Day_10

chan_96 2021. 12. 31. 21:36
728x90

논리적으로 하나 이상의 테이블에 있는 데이터의 부분 집합 / 액세스 제한

사용목적
-데이터 액세스를 제한하기 위해
-복잡한 질의를 쉽게 작성하기 위해
-데이터 독립성을 제공하기 위해
-동일한 데이터로부터 다양한 결과를 얻기 위해

특징 단순 뷰 복합 뷰
테이블 수 하나 하나 이상
함수 포함 아니오
데이터 그룹 포함 아니오
뷰를 통한 DML 작업 불가능한 경우도 있음

단순 뷰 - 테이블의 원본 데이터를 보여줌
복합 뷰 - 테이블의 변형된 데이터를 보여줌

 

CREATE VIEW 문에 서브 쿼리를 포함

CREATE VIEW 테이블 명
(AS명)
AS 서브 쿼리

 

 

TABLE VIEW
물리적 구조 물리적 구조 X(가짜/논리 TABLE)
저장 구조 할당해 데이터를 저장 데이터 자체 X
데이터 딕셔너리에 구조정보, 저장공간에 데이터를 저장 데이터 딕셔너리에 서브쿼리 문장의 텍스트를 저장
(문장을 재실행해서 테이블인 것 처럼 보이게한다)
SELECT 문장을 잘 사용해야 VIEW를 잘 사용할 수 있다

테이블과 뷰와 JOIN 가능 / 뷰와 뷰와 조인 가능
뷰를 가상 테이블처럼 사용하기 때문에 테이블처럼 사용 가능

뷰의 장점
원본 테이블 변경 시 뷰의 값도 변경됨!!

뷰 수정
CREATE OR REPLACE VIEW
테이블명

 

복합 뷰 생성

뷰에 DML 작업을 수행하면 TABLE에 반영이 된다 => 단 뷰가 단순 뷰 상태일 때만 가능!

 

뷰 제거

DROP VIEW 뷰명;
=> 뷰는 하나의 독립된 객체이다( 뷰를 삭제해도 원본 테이블은 그대로 유지된다!)

 

인라인 뷰

FROM절에 서브 쿼리를 넣고 이름을 부여

SELECT문에 인라인 뷰를 넣을 수 있기 때문에 뷰를 새로 만들지 않아도 된다

서브 쿼리의 결과를 가상의 테이블 결과로 사용 가능


TOP-N 분석

ROWNUM - 출력이 된 행의 번호를 반환

주의사항

출력이 된 행에게 번호가 부여된다!

ROWNUM은 행보다 큰 항목은 출력할 수 없다

급여를 적게 받는 하위 3명의 사원의 이름과 급여를 출력
더보기

FROM절에서 인라인 뷰를 사용해야 정렬된 후의 값으로 ROWNUM을 가져온다
**FROM, WHERE 실행 순서 주의**
=> SELECT절의 LAST_NAME과 SALARY는 FROM절의 서브 쿼리 절에서 가져온다!

평균 급여가 많은 상위 3개 부서의 부서 번호와 평균 급여를 출력
더보기

=> 인라인 뷰에서 가져온 데이터에 네이밍 규칙이 적용이 된다! / 별칭 사용!


기타 데이터베이스 객체

인덱스

- 테이블에서 데이터를 검색할 때 검색 속도를 향상해주기 위해 만들어진 객체(전체 데이터의 5%~10% 사이의 양의 데이터를 탐색할 때 적절)

- 테이블의 컬럼 단위로 설치
- 데이터를 정렬해서 저장
- 데이터와 포인터(행의 주소 정보를 저장함)를 같이 저장
- BETWEEN A AND B를 사용할 때 탁월한 성능을 보여준다(이미 정렬이 되어있어서)
- PK, UK 설치하면 자동으로 인덱스가 설정된다!(중복된 데이터가 있을 때 인덱스는 비효율적)
- 데이터가 변경이 자주 일어나지 않은 곳에 설치하는 게 좋음
  EX_책의 목차(내용,,, PAGE)

 

시퀀스

중복이 되지 않은 고유한 번호를 생성기, 공유 가능한 객체, PK값에 사용(PK값이 숫자일 때만 사용 가능)

시퀀스 값 사이의 차이 값이 생길 수 있다.

EX) COMMIT, ROLLBACK현상 / 시퀀스는 공유가 되기 때문에 다른 유저가 사용 시 발생

*한번 추출된 값은 다시 추출하지 않음*

 

 

CREATE SEQUENCE

-INCREMENT BY => 증가 값

-START WITH => 첫 번째 생성이 되는 시퀀스 넘버

-MAXVALUE => 가장 마지막에 생성된 시퀀스 넘버

-NOCACHE(기본값) 생략 가능

-NOCYCLE(기본값) 생략 가능/ CYCLE 옵션 사용 시 9999 번호 도달했을 때 다시 120부터 시작

 

 

시퀀스 생성

NEXTVAL - 시퀀스에서 값을 추출

CURRVAL - 추출된 값을 저장

 

 

시퀀스 수정

=> START WITH값은 절대로 변경 불가

 


DCL

 

보안

1. 권한이 없는 사람이 DB에 접근 방지(외부)

2. 권한이 있는 사람이 불법 행위 방지(내부) => DCL언어를 통해 권한 부여/회수

 

DB 사용자

일반 사용자(응용프로그램을 통해)

개발자(DML)

DBA(모니터링) => DCL사용 가능

 

권한

시스템 권한
:데이터베이스를 액세스
-100가지 이상의 권한
새 사용자 생성, 사용자 제거, 테이블 제거, 테이블 백업

명령어
더보기

유저 생성


계정 잠금

계정 잠금해제


권한 부여
부여, 권한 이름, 부여 사용자

**CONNECT, RESOURCE**

권한 회수

 

-권한을 모아놓은 집합(롤 생성 -> 롤 권한 부여 -> 사용자에게 롤을 부여)

 

객체 권한 - 데이터베이스 객체의 내용 관련
- 객체를 만든 소유주는 모든 객체에 대한 권한을 가지고 있음
- 내가 소유한 객체를 다른 유저에게 접근할 수 있도록 권한을 주는 것

GRANT 권한명
ON TABLE명
TO 사용자 계정명

WITH GRANT OPTION => 다른 사용자에게 받은 객체 권한을 또 다른 사용자에게 권한 이행을 할 수 있음

다중 if~else문

:if~else문이 연속되는 모양, 조건은 n개(2개 이상)
*조건 중 하나라도 일치하는(true) 조건을 만나면 더 이상 조건을 확인하지 않음
if(조건식 1){
       실행 문장 1
} else if(조건식 2){
       실행 문장 2
} else if(조건식 3){
       실행 문장 3
} else {
       실행 문장 4
}
예제 1 정수형 변수 score를 선언하고 키보드로 값을 입력받은 후 값을 할당. 입력받은 값이 90점 이상이면 "A학점입니다", 80점 이상 90점 미만인 경우는 "B학점입니다.", 70점 이상 80점 미만인 경우는 "C학점입니다."를 출력하고 70점 미만인 경우는 "F학점입니다"를 출력
예제 2 알파벳 하나를 입력받은 후 A를 입력한 경우는 "A입력", B를 입력한 경우는 "B입력", C를 입력한 경우는 "C입력"을 출력하고 그 외의 알파벳을 입력한 경우는 "A, B, C 외 입력"을 출력
더보기

문자열 비교 시 equals메서드 사용

예제 3 버스 단말기에 버스카드를 태그 하려고 합니다. 현재 카드 잔액과 탑승자가 성인/청소년/어린이 인지 입력한 후 잔액이 충분한 경우에는 인사말을 출력하고 부족한 경우에는 "잔액이 부족합니다"를 출력
(성인 -감사합니다(1800원) / 청년 - 반갑습니다(1500원) / 어린이 - 안녕하세요(1000원))

switch문

: 값에 따라 여러 방향으로 분기하는 경우, '식'을 계산한 후 그 결과 값과 일치하는 case로 분기

switch(식){
     case 값 1 :
            실행 문장 1
            break;
     case 값 2 :
            실행 문장 2
            break;
     case 값 3 :
            .............
     defalut :
            실행 문장.
}

 

예제 1 String 형 변수 data를 선언하고 키보드로 값을 입력받고. switch~case 문을 사용하여 입력받은 값이 "한국어" 이면 "안녕하세요", "영어"이면 "헬로", "중국어" 이면 "니하오", "일본어"이면 "곤니찌와"를 출력하고 그 외에 단어를 입력할 경우에는 "다른 값 입력"을 출력
예제 2 월(1~12)을 입력받아 해당 월이 봄, 여름, 가을, 겨울 중 어느 계절인지 출력
(1,2,12월 -> 겨울 / 3,4,5월 -> 봄/ 6,7,8월 -> 여름 / 9,10,11월 -> 가을)
더보기

case 1, 2, 12:
      실행 문장
case 3, 4, 5: 
        ......
=>이렇게도 가능하지만 자바 구버전에서는 사용 불가능

예제 3 자판기 프로그램을 만들어 봅시다. 넣을 금액을 입력하고 메뉴를 고른 뒤 잔돈을 출력.
예제 4 입력한 금액이 선택한 메뉴의 가격보다 적으면 "돈이 부족해요"를 출력
예제 5 잔돈을 출력할 때 천 원/오백 원/백 원을 몇 개 줘야 하는지 계산하여 출력

반복문

:어떤 조건에 만족할 때까지 또는 특정 횟수만큼 같은 처리를 반복하여 실행하는 구조

 

while문

:정확하게 몇 번 반복해야 할지 정해지지 않은 경우에 사용

:몇 번 반복해야 하는지 정해져 있지 않기 때문에 반복문을 수행할 조건을 지정해줘야 함(조건은 항상 논리형)

while(조건식) {
        실행 문장
}
다음 문장

 

do~while문

:while문과 동일하지만 지정된 명령 실행 후 조건 확인 시 true인 경우 다시 지정된 명령 실행 , false가 되는 순간 다음 명령 실행(조건을 확인하지 않고 먼저 실행 문장을 실행함)

do {
       실행 문장
} while(조건)

 

예제 1 키보드로부터 입력받은 수가 10보다 작은 때만 계속 숫자를 입력할 수 있는 프로그램을 작성(while문 / do-while문 모두 작성)
더보기

while문 1번


while문 2번




do-while문

 

 

 

728x90
Comments