ALLYES
[2022년 청년친화형 기업 ESG지원 사업 - 11] 본문
일시 : 2022.09.20
시간 : 9:00 ~ 18:00
오전 : Database
오후 : Java
뷰
- 개념
- 논리적으로 하나 이상의 테이블에 있는 데이터의 부분 집합을 나타냄
- 목적
- 데이터 액세스 제한
- 복잡한 질의 쉽게 작성
- 데이터 독립성 제공
- 동일한 데이터로부터 다양한 결과를 얻기 위해
- 단순 뷰 및 복합 뷰
- 단순 뷰 : 테이블의 원본데이터를 그대로 보여줌
- 복합 뷰 : 테이블의 데이터가 아닌 변형된 데이터를 보여줌
- 뷰 생성문
create view empvu80
as
select employee_id, last_name, salary
from employees
where department_id = 80;


create view salvu50
as
select employee_id id_number, last_name name, salary*12 and_salary
from employees
where department_id=50;


- 테이블 vs 뷰

- 뷰 수정
- create 명령문
- replace 명령문
- 복합 뷰 생성
create view dept_sum_vu
as
select department_id, min(salary) minsal, max(salary) maxsal, avg(salary) avgsal
from employees
group by department_id;

- 예제 : 부서별 최저 급여를 받는 사원의 이름과 급여와 최저급여를 출력하시오.
- 서브 쿼리 사용
select last_name, salary
from employees
where (department_id, salary) in (select department_id, min(salary)
from employees
group by department_id)
- 뷰 사용
select e.last_name, e.salary, d.minsal
from employees e, dept_sum_vu d
where e.department_id = d.department_id
and e.salary = d.minsal;
- 뷰 제거
- 데이터베이스의 기본 테이블을 기반으로 하므로 데이터 손실 없이 뷰를 제거 가능
- 독립성 보장
drop view empvu80;
- 인라인뷰
- 개념
- 정렬된 data를 가진 가상 테이블
- SQL문에서 사용 가능한 별칭을 사용하는 서브쿼리
- from절에 있는 명명된 서브쿼리
- 개념
인라인뷰는 어려울 수 있음
이를 쉽게 해결하는 방법 : rownum
- rownum : 행이 출력이 되고나서 출력된 임의의 행의 번호
- rownum 예시
select rownum, last_name, salary
from employees;

● rownum < 4
select rownum, last_name, salary
from employees
where rownum < 4;

● rownum > 4
select rownum, last_name, salary
from employees
where rownum > 4;

Why?
출력이 되지 않은 행의 번호는 출력이 되지 않음 == 결과 값이 없다고 나옴
● rownum < 4 , oreder by salary asc
select rownum, last_name, salary
from employees
where rownum < 4
order by salary asc;

Why?
where절부터 실행이 되기 때문에 결과가 이상하게 나옴
이를 해결하기 위해 Top-N분석 사용
- Top-N 분석
- 열에서 가장 큰 n개의 값 또는 가장 작은 n개의 값을 요청
- 인라인 뷰 사용
select last_name, salary
from (select last_name, salary
from employees
order by salary asc)
where rownum < 4

- Top-N분석 예제
- 부서별 평균급여가 많은 상위 3개의 부서번호와 평균급여를 출력하시오.
- avg : 그룹함수로 인식, avg(salary)는 네이밍 규칙에 의하여 에러 발생
- 이를 해결하기 위해 alias를 사용하여 avgsal로 변경
select department_id, avgsal
from ( select department_id, avg(salary) as avgsal
from employees
group by department_id
order by avg(salary) desc)
where rownum < 4

- 데이터베이스 객체
- 인덱스
- 테이블의 검색 속도 향상을 위해 만들어짐
- 컬럼에 설치
- create (unique) index empidx on employees(emp_id)
- 유일하다는 단어가 제시가 되어있어야 unique 사용, 그렇지 않다면 표기 금지
- 시퀀스
- 개념
- 고유번호 자동생성
- 공유 가능한 객체
- 일반적으로 기본키 값을 생성하는데 사용
- 응용 프로그램 코드 대체
- 수정
- strat with 변경 x => 굳이 변경 하겠다면 지웠다가 다시 생성
- maxvalue는 크기를 크게 키우기는 가능
- 예제
- 개념
- 인덱스
create sequence dept_deptid_seq
increment by 10 // 증가 값
start with 120 // 첫번째 생성되는 squence number
maxvalue 9999 // 마지막에 생성되는 squence number
nocache // 캐시x
nocycle; // 주기 반복 x
● 시퀀스 확인 : 데이터 딕셔너리
select sequence_name, min_value, max_value, increment_by, last_number
from user_sequences;
- NEXTVAL 및 CURRVAL
- NEXTVAL 개념
- 사용 가능한 다음 시퀀스 값을 반환
- 참조될 때마다 고유한 값을 반환
- CURRVAL 개념
- 현재 시퀀스 값 반환
- NEXTVAL이 실행이 되어야 실행가능
- NEXTVAL 개념
- 사용자 액세스 제어
- 목표
- 사용자 생성
- 보안 모델 설정 및 유지 관리 용이하게 해주는 롤 생성
- GRANT , REVOKE문 사용하여 객체 권한 부여 및 취소
- 데이터 베이스 링크 생성 및 액세스
- 보안
- 권한이 없는 애들이 DB 접근 방지
- 권한이 있는 애들이 DB 불법적인 행위 방지
- 사용자 시스템 권한
- DBA : 생성된 사용자에게 특정 시스템 권한 부여 가능
- 암호 변경
- 롤
- 권한 집합체
- 롤에 권한 부여
- 사용자에게 롤을 부여
- 객체 권한
- 특정 테이블, 뷰, 시퀀스 또는 프로시저에 대해 특정 작업을 수행할 수 있는 권한
- 객체마다 다름
- 소유자는 객체 대한 모든 권한을 갖음
- 소유자는 자신의 객체에 대한 특정 권한을 부여가능
- DBA : 생성된 사용자에게 특정 시스템 권한 부여 가능
- 예제 실습
- 목표
// DBA계정일 경우에만 가능
create user test // id
identified by test; // pw
// 로그인 권한
grant create session to test; // grant : 권한 부여, create session : 권한 이름(DB접속)
// table 생성 권한
grant create table to test;
// 개발권한 부여
grant connect, resource to test;
// 권한 회수
revoke connect, resource from test;
과제 : 14장 연습문제
기간 : 9/25_9:00, 개인톡으로 제출
1.
member : systemdate : sysdate (default)로 지정
title : 확인란에 check 주라는 의미
title_copy : 복합pk 생성
rental : pk가 4개, fk1,fk2(복합 fk), sysdate + 2 => 이틀 뒤 라는 의미
reservation : 복합fk
2. 생략
3. c번 생략
4. insert작업, c번에서 title에 빈칸이 있음고민할것, d : 3 days ago, 1day ago : 계산식을 넣을것(sysdate기준으로)
5. 뷰 생성
6. 업데이트
7. 테이블 구조 변경
8. 생략
오후 [Java]
예제
import java.util.Scanner;
public class Ex01_메소드 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("정수형");
int num1 = sc.nextInt();
int num2 = sc.nextInt();
addInteger(num1, num2);
System.out.println("실수형");
double num3 = sc.nextDouble();
double num4 = sc.nextDouble();
addDouble(num3, num4);
System.out.println("정수+실수형");
int num5 = sc.nextInt();
double num6 = sc.nextDouble();
System.out.println(addIntAndDouble(num5,num6));
}
// 실수형
private static void addDouble(double num3, double num4) {
System.out.println(num3 + num4);
}
// 정수형
private static void addInteger(int num1, int num2) {
System.out.println(num1+num2);
}
// 한 개의 정수, 한 개의 실수를 매개변수로 받아 두 수의 합을 반환하는 addIntAndDouble함수
private static double addIntAndDouble(int num5, double num6) {
return num5+num6;
}
}
- 메소드 오버로딩[MethodOverloading]
- 개념
- 메소드의 이름은 하나만 주고 매개변수를 다르게 함으로써 메소드를 여러 개 만드는 기법
- 구별은 매개변수의 개수 및 매개변수의 데이터 타입으로 구분
- 조건
- 메소드 이름이 같아야함
- 매개변수의 개수 or 타입이 달라야함
- 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 아님
- 장점
- 메소드 이름의 낭비 방지
- 같은 메소드에 여러 종류의 매개변수를 받을 수 있음
- 개념
- 절차적 프로그래밍 (Procedural Programming)
- step by step(Process)
- Data and Logic Mixed
- 단점
- 가독성 ↓
- 유지보수가 힘듬
- 객체 지향 프로그래밍 : Object Oriented Programming(OOP)
- 개념
- 여러 개의 독립된 단위
- 객체들의 모임으로 파악하고자 하는 것
- 각각의 객체는 메시지를 주고 받고 데이터를 처리
- 장점
- 유지보수 편리
- Class
- 개념
- 틀 또는 설계도
- 구조
- Field : 필드
- 해당 클래스 내에 정의된 변수 의미
- 정의된 변수는 객체의 특성을 나타냄
- 이름, 키, 나이, 성별, 머리색
- Method : 메소드
- 객체가 행해야 하는 작업을 기술한 것
- 객체의 기능
- 걷다, 먹다, 자다, 싸우다, 말하다
- Field : 필드
- 개념
- Object
- created from the class
- 클래스의 인스턴스
- 인스턴스 == 객체
- 설계도를 통해 만들어진 것
- 개념

package 객체지향프로그래밍;
public class Person {
// 창조주가 되어서 원하는 사람을 만들 수 있는 '설계도'
// 클래스의 구조
// 1. 필드 : 객체의 특징, 속성, 데이터적으로 정의할 수 있는 것
// 나이, 키, 이름, 성별 ....
String name;
int age;
String gender;
// 생성자 메소드 : 객체가 생성되는 순간에 자동으로 호출되는 메소드
// : 생성과 동시에 필드에 값을 적용
// 생성자의 특징
// 1. 리턴타입이 없음(void 자체도 없음)
// 2. 메소드 이름은 클래스와 동일하다
// 3. 생성자는 new 키워드를 통해서만 이루어집니다.
public Person(String name, int age, String gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}
// 기본생성자, default 생성자
// 또 다른 생성자가 없는 경우 클래스 내에 존재하지 X
// 하지만, 하나 이상의 생성자가 존재하면 자동생성X
public Person() {
}
// 2. 메소드 : 객체가 할 수 있는 행위, 기능, 행동
// 먹기, 자기, 달리기 ...
public void eat() {
System.out.println("맛있게 냠냠 먹기");
}
public void sleep() {
System.out.println("쿨쿨 자기!");
}
public void run() {
System.out.println("집으로 달려");
}
}
- 생성자 메소드
- 개념
- 객체가 생성되는 순간에 자동으로 호출되는 메소드
- 생성과 동시에 필드에 값을 적용
- 특징
- 리턴타입이 없음(void 자체도 없음)
- 메소드 이름은 클래스와 동일하다
- 생성자는 new 키워드를 통해서만 이루어집니다.
- 생성자 메소드도 오버로딩 가능
- 기본 생성자
- 또 다른 생성자가 없는 경우 클래스 내에 존재하지 X
- 하지만, 하나 이상의 생성자가 존재하면 자동생성X
- 개념
package 객체지향프로그래밍;
import java.util.Scanner;
public class PersonMain {
public static void main(String[] args) {
// Person 설계도 클래스를 통해서 실제 사람(object)이 만들어지는 클래스
// 1. 객체(사람) 생성하기
// 객체를 생성할 때 - new 키워드 사용해서 생성
// 클래스이름 객체명 = new 클래스이름();
Scanner sc = new Scanner(System.in);
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person("황예진", 20, "여자");
// sc.next();
p1.name = "이주희";
System.out.println(p1.name);
System.out.println(p1.age);
System.out.println(p1.gender);
System.out.println("p1 의 주소값 : " + p1);
p1.age = 20;
p1.gender = "여자";
System.out.println(p1.name);
System.out.println(p1.age);
System.out.println(p1.gender);
p2.name = "이수환";
p2.age = 100;
p2.gender = "남자";
System.out.println(p2.name);
System.out.println(p2.age);
System.out.println(p2.gender);
p1.eat();
p1.sleep();
p1.run();
p2.eat();
p2.sleep();
p2.run();
}
}'ESG' 카테고리의 다른 글
| [2022년 청년친화형 기업 ESG지원 사업 - 13] (0) | 2022.09.22 |
|---|---|
| [2022년 청년친화형 기업 ESG지원 사업 - 12] (0) | 2022.09.21 |
| [2022년 청년친화형 기업 ESG지원 사업 - 10] (0) | 2022.09.19 |
| [2022년 청년친화형 기업 ESG지원 사업 - 9] (0) | 2022.09.17 |
| [2022년 청년친화형 기업 ESG지원 사업 - 8] (0) | 2022.09.16 |