211231

조영혜·2022년 1월 2일
0

SQL

VIEW

  • 하나 이상의 테이블에 있는 데이터의 부분집합
    전체가 아닌 내가 원하는 일부의 데이터 엑세스(접근) 제한해서 보기 위함.
    복잡한 질의를 쉽게 작성하기 위함
    데이터의 독립성을 제공하기 위함
    동일한 데이터로부터 다양한 결과를 얻기 위함.

사용도 높음.
뷰 자체가 테이블에 있는 데이터를 뷰를 통해 일부 볼 수 있음.
뷰를 통해 있는 데이터는 원본 테이블에 있는 데이터를 그대로 보여줌. -> 단순뷰
변형해서 보여줌 ex salary*12 -> 복합뷰

create view empvo80 
as select employee_id, last_name, salary // as뒤부터 서브쿼리. 서브쿼리의 결과만을 (일부) 볼 수 있음. 
from employees
where department_id = 80; 

테이블과 뷰의 차이

  • 테이블은 물리적인 구조를 가지고 있음. (저장구조 할당->데이터 저장)
    dd에는 데이터 구조 저장, 저장 공간에 데이터 저장.
  • 뷰(=가짜/논리 테이블)는 테이블과 달리 물리적인 구조가 없음. (저장공간 없음) 데이터 자체를 가지고 있지 않음. dd에 서브쿼리 텍스트만 저장. -> 서브쿼리를 재실행 시켜서 데이터를 보여주는 것 뿐임.

뷰 수정 : create or replace dd에 저장돼있는 셀렉트 문장을 변경해서 저장.
알리아스 쓸 때는 쭉 알리아스 쓰기. 첫문장에 먼저 알리아스 명시 해도 됨.

단순뷰 일때만 dml연산 가능.

뷰 제거 DROP VIEW
논리적인 독립성 : 뷰 지워져도 원본 데이터는 변경/삭제 안됨.

  • 인라인 뷰 : 서브쿼리에 알리아스를 줘서 이름을 지정하는 것 ex. FROM절에 사용되는 서브쿼리
    굳이 뷰 따로 설정 안해도됨. 셀렉트문장 하나로 포함시켜버리는 것. 서브쿼리의 결과를 가상의 테이블로 사용할 수 있음.

이름, 셀러리 부서이름 그 부서의 최대급여 출력
최대급여보다 더 적은 급여를 받는 사람을 출력하시오.

SELECT e.last_name, e.salary, e.department_id, d.max(salary)
FROM (select department_id, max(salary)
from employees 
group by department_id) d
WHERE e.department_id = d.department_id
AND a.salary < d.max(salary) 
  • ROWNUM - 출력이 된 행의 번호를 돌려줌.
rownum > 4
결과로 출력이 되고 나서 행의 번호를 돌려 주니까 값을 할당하지 못함 
  • TOP N 분석
SELECT column_namem ROWUNM
FROM (select column_name
      from table
      order by TOP-N column_name)
WHERE rownum <= N

* 프롬절에 있는 서브쿼리에서 가져옴. 
* ROWUNM:서브쿼리에서 반환되는 각 행의 1부터 시작하는 순차값. 
* WHERE:반환될 N개의 행 지정. <, <= 연산자 사용해야함. 
* 최대값 출력 = desc 사용 

테이블에서 데이터 검색 방법
실행계획 -> 테이블 풀스캔 : 전체 데이터를 메모리로 불러들이고 데이터를 순차적으로 검색해서 찾아가는 방식. (기본 방식)
사잇값 찾을 때 인덱스 아주좋음
pk와uk 설치하면 자동으로 인덱스 저장. -> 중복이 없으니까.

  • 시퀀스: 자동번호생성기. 공유 가능 객체. pk설치할 때 가장 많이 사용함. 문자, 날짜값을 pk로 지정했을 땐 시퀀스 사용 불가. (타입이 같아야 하니까)
    필요할 때 마다 발생.

fifo:first in first out
캐시의 기능: 메모리의 기능을 나만 사용할 수 있도록 고정공간을 만듦.

CREATE SEQUENCE
nocache 디폴트.
nocycle 반복. pk설치할 때 사이클 옵션 안주는 게 좋음.
시퀀스는 값을 저장하는 거 아님. 음료수 자판기.
시퀀스는 추출을 해버린 값은 롤백해도 안돌아옴. -> 갭 발생할 수 있음.
시퀀스는 공용객체. 데이터가 있는 게 아니라 보안적으로 중요하지 않아서 공용객체. -> 갭 발생 할 수 있음.

  • 보안
    접근성이 없는 사람의 DB 접근 방지 -> 외부
    권한이 있는 유저들의 불법 행위를 방지 -> 내부 =>DCL로 권한 부여/회수

  • 롤 = 권한을 모아놓은 집합.
    CONNECT RESOURCE

JAVA

연산자 한꺼번에 못씀!

(80<a>=70) 안되고 (80>a && 70>=a) 이렇게 써야함.  

switch문

Scanner s = new Scanner(System.in);

System.out.prin("월 입력");
int month = s.nextInt();

switch(month){
case 1:
case 2:
case 12:
System.out.println(month+"월은 겨울입니다.")
break; 
//case 12, 1, 2 : <- 이클립스 구버전은 지원 안됨. 
  • 지역변수 : {}안에서 변수 선언하면 {}안에서만 쓸 수 있음.
int a = 0; 
String b = "" 
정수형, 문자형 기본 초기화. 문제마다 달라질 수는 있음. 

0개의 댓글