오늘보다 더 나은 내일의 나에게_
비전공자의 IoT 국비 교육 수강일지 Day_10 본문
뷰
논리적으로 하나 이상의 테이블에 있는 데이터의 부분 집합 / 액세스 제한
사용목적
-데이터 액세스를 제한하기 위해
-복잡한 질의를 쉽게 작성하기 위해
-데이터 독립성을 제공하기 위해
-동일한 데이터로부터 다양한 결과를 얻기 위해
특징 | 단순 뷰 | 복합 뷰 |
테이블 수 | 하나 | 하나 이상 |
함수 포함 | 아니오 | 예 |
데이터 그룹 포함 | 아니오 | 예 |
뷰를 통한 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문
'비전공자의 코딩일지' 카테고리의 다른 글
비전공자의 IoT 국비 교육 수강일지 Day_12 (0) | 2022.01.04 |
---|---|
비전공자의 IoT 국비 교육 수강일지 Day_11 (0) | 2022.01.03 |
비전공자의 IoT 국비 교육 수강일지 Day_09 (0) | 2021.12.30 |
비전공자의 IoT 국비 교육 수강일지 Day_08 (0) | 2021.12.29 |
비전공자의 IoT 국비 교육 수강일지 Day_07 (0) | 2021.12.28 |