ALLYES
[2022년 청년친화형 기업 ESG지원 사업 - 10] 본문
일시 : 2022.09.19
시간 : 9:00 ~ 18:00
오전 : Database
오후 : Java
DDL
테이블과 같은 것들을 구조를 관리하고 생성
데이터베이스 객체
- 테이블
- 기본 저장 단위며 행과 열로 구성
- 뷰
- 논리적으로 하나 이상의 테이블에 있는 데이터의 부분집합을 나타냄
- 데이터에 대한 엑세스 제한
- 테이블의 일부 데이터를 볼 수 있음
- 보안과도 관련이 있음
- 시퀀스
- 숫자 값 생성기
- 고유한 번호 생성
- 인덱스
- 질의의 성능을 향상
- 동의어
- 객체에 다른 이름을 제공

테이블 이름 및 열 이름
- 문자로 시작해야함
- 1 ~ 30자까지 가능
- A-Z, a-z, 0-9, _, $, #만 포함
- 동일한 사용자가 소유한 다른 객체의 이름과 중복되지 않게 해야함
- Oracle server의 예약어가 아니어야함
Create문 : 테이블 생성
- 테이블 이름 지정
- 열의 이름, 데이터 유형 및 크기 지정
create table dept
( deptno number(2),
dname varchar2(14),
loc varchar2(13));

안에 데이터가 없기 때문에 삽입으로 데이터 삽입

DB구현 3단계
1. create table 생성
2. Insert data 삽입
3. commit 저장
사용자 테이블
- 사용자가 생성 및 유지 관리하는 테이블의 collection
- 사용자 정보 포함
데이터 딕셔너리
- oracle server가 생성 및 유지 관리하는 테이블의 collection
- 데이터베이스 정보 포함 : meta data
- DBMS가 자동 생성
Truncate
truncate table dept90;
// dept90 행 전체 삭제
텍스트 data : 문자, 숫자, 날짜
멀티 미디어 data : 이미지, 영상, 음성

문자 데이터 타입
| 데이터 유형 | 길이 | IF) aaa 데이터 | 성능 | 공간활용도 |
| char | 고정길이 | O | X | |
| varchar | 가변길이 | ![]() |
X | O |

숫자 데이터 타입
- number
- - 0 + : 최대 129자까지 가능
- 최악의 데이터 타입
- 가변성이 너무 커 성능을 떨어뜨림
- number(p)
- 정수만 사용 가능
- number(p,5)
- p : 십진 자릿수
- 5 : 소숫점 표기 가능한 데이터
날짜 데이터 타입
- Date
- 저장되는 데이터 타입에 의해 형식이 지정이 됨
- 년, 월, 일 표기
- TIMESTAMP
- 시간, 분, 초, am/pm까지 표기 가능
- 구조 : hire_date timestamp
테이블 생성, 삽입, 저장 단계
문제 : 90번 부서에 근무하는 사원의 이름과 급여를 저장하는 dept90 테이블을 생성하시오.
1. create table dept90
(did number(4), last_name ...)
2. select last_name, salary
from employees where did=90
3. insert into dept90
values( , , ...)
4. commit;
이를 한번에 해결 할 수 있는 방법
create table
as
(서브쿼리)
create table dept90
as
select last_name, salary
from employees
where department_id = 90;
alter table
- 새 열 추가
- 기존 열 수정
- 새 열의 기본값 정의
- 열 삭제
- ADD
- col 추가
- MODIFY
- data 변경, 크기 변경
- DROP
- 테이블 데이터 삭제
ADD
alter table dept
add(job_id, varchar2(9));

job_id = null값이 존재
값을 넣어주려면 insert 사용?

행 단위로 삽입이 되기 때문에 X
update를 사용하여 삽입

MODIFY
alter table dept
modify(dname varchar2(10));

DROP
실행 시키기 전에 고민해봐야할 것


이를 대체 하기 위해
SET UNUSED
alter table dept
set unused(loc);
// unused를 쓴다면 사용불가능 상태로 바꿈
alter table dept
drop unused col;
// unused 사용 후 drop을 하면 동시성에는 이상 없이 삭제가능
삭제 명령어 모음


제약 조건 포함
- PK, FK 와 같은 특정 조건들이 반드시 설치가 되어 있어야 무결성이 보장이 됨
- column별로 설치
- 한개의 col => 여러개의 제약조건 부여 가능
- 테이블 레벨로 규칙 적용
- 종속된 테이블의 삭제 방지(FK)
- 유효한 제약 조건 유형
- NOT NULL : 값이 있어야함
- UNIQUE : 중복 허용 X, NULL은 가능
- PRIMARY KEY : NOTNULL + UNIQUE => (최소성, 유일성 만족), 테이블의 대표 COL
- FOREIGN KEY : 관계 설정, 종속된 테이블의 삭제 방지
- CHECK : 사용자 정의 제약조건
제약 조건 지침
- 제약 조건에 이름을 지정하지 않으면 oracle server가 sys_col 형식의 이름을 생성
- 제약 조건 생성 시기
- 테이블이 생성될 때 : create table
- 테이블이 생성된 후에 : alter table
- 열 레벨 또는 테이블 레벨로 제약 조건 정의
- 데이터 딕셔너리에서 제약조건을 봄
col구조 선언
create table dept
(dno number(3)
dname char(5),
loc char(5);
)
제약 조건 선언
constraint : 제약 조건 선언 명령어
constraint 제약조건이름 제약조건유형(설치할 컬럼이름)
(선언) table_col_제약어
- 테이블에서의 제약조건
create table dept
(dno number(3)
dname char(5),
loc char(5)
constraint dept_dno_pk primary key(dno)
);
or
- 컬럼에서의 제약조건
create table dept
(dno number(3) constraint dept_dno_pk primary key,
dname char(5),
loc char(5)
);
not null 제약조건 : 컬럼에만 입력 가능
create table dept
(dno number(3),
dname char(5) not null,
loc char(5),
constraint dept_dno_pk primary key
);

복합키
여러개의 컬럼에 하나의 pk를 지정
유일성 O
최소성 X
슈퍼키
기본키 : PK
후보키
대체키 : 후보기 -> 기본키 = 나머지
외래키 : FK
FK

references
부모 테이블 및 부모테이블에서의 해당 되는 어쩌고 저쩌고....
- 종속적인 삭제를 가능하게 해주는 명령어
- on delete cascade
- cascade : 부모테이블에서 삭제하는 행과 그 행이 참조된 테이블의 행까지 까지 전부 삭제
- on delete set null
- on delete cascade
- 스크립트 파일 생성
- 파일 생성
- save 이름.sql
- 경로 확인 후
- 다시 사용 하려면
- @이름.sql

예제 실습
create table test
( a number(3),
b number(3) not null,
c number(3),
constraint test_a_pk primary key(a),
constraint test_c_ck check(c in (0,1))
// check 제약 조건문
);
drop table test cascade constraints;
create table test
( a number(3),
b number(3) not null,
c number(3),
constraint test_a_pk primary key(a),
constraint test_c_ck check(c in (0,1))
//check 제약 조건문
);
create table test1
( d number(3),
e number(3) not null,
f number(3),
a number(3),
constraint test1_d_pk primary key(d),
constraint test1_a_fk foreign key(a) references test(a)
// foreign key 제약조건문
);
예제


drop table dept cascade constraints;
drop table emp cascade constraints;
//dept 테이블 생성
create table dept
( deptno number(2),
dname varchar2(14) not null, // not null 제약 조건
loc varchar2(13) not null, // not null 제약 조건
constraint empdept_dept_pk primary key(deptno)
// primary key 제약 조건
);
// emp 테이블 생성
create table emp
( empno number(4),
ename varchar2(10) not null, // not null 제약 조건
gender char(10) not null, // not null 제약 조건
job varchar2(9) not null, // not null 제약 조건
mrg number(4),
hiredate date not null, // not null 제약 조건
sal number(7,2) not null, // not null 제약 조건
comm number(7,2),
deptno number(2),
constraint empdept_empno_pk primary key(empno), // primary key 제약 조건
constraint empdept_gender_ck check(gender in ('man', 'woman')), // check 제약 조건
constraint empdept_deptno_fk foreign key(deptno) references dept(deptno) // foreign key 제약 조건
);
// dept 데이터 삽입
insert into dept values(10, 'Adminstration', 1700);
insert into dept values(20, 'Marketing', 1800);
insert into dept values(30, 'Purchasing', 1700);
insert into dept values(40, 'Human', 2400);
insert into dept values(50, 'Shipping', 1500);
// emp 데이터 삽입
// check 제약 조건에서 man, woman으로 하여 MAN은 에러발생함
insert into emp values(100, 'King', 'man', 'AD_PRES', null, '1987-01-17', 24000, null, 10);
insert into emp values(101, 'Kochar', 'man', 'AD_VP', 100, '1989-09-21', 17000, null, 50);
insert into emp values(102, 'DE Haen', 'woman', 'AD_VP', 101, '1993-01-13', 17000, null, 50);
insert into emp values(103, 'Hunold', 'man', 'IT_PROG', 102, '1990-07-03', 9000,null, 40);
insert into emp values(104, 'Ernst', 'woman', 'IT_PROG', 103, '1997-07-25', 4800, null, 40);
commit;

오후 [Java]
메소드(Method)
- 메소드의 기본 구조
- public : 접근 제한자
- int : 리턴(return) 타입
- addNumber : 메소드 이름
- int num1, int num2 : 매개 변수
- return : 반환 데이터
public int addNumber(int num1, int num2){
int result = num1+ num2
return result;
}
예제1

public class Ex01_메소드1 {
public static void main(String[] args){
getDivisor(10);
getDivisor(16);
getDivisor(24);
}
public static void getDivisor(int a){
System.out.print(a + "의 약수 :");
for (int i = 1; i <= a; i++) {
if ((a % i == 0)) {
System.out.print(i + " ");
}
}
System.out.println();
}
}
예제2

public class Ex01_메소드1 {
public static void main(String[] args) {
// 메소드 출력 조건
int startValue = 10;
int endValue = 36;
getDivisors(startValue, endValue);
}
public static void getDivisor(int a) {
System.out.print(a + "의 약수 :");
for (int i = 1; i <= a; i++) {
if ((a % i == 0)) {
System.out.print(i + " ");
}
}
System.out.println();
}
private static void getDivisors(int start, int end) {
for (int i = start; i < end; i++) {
getDivisor(i);
}
}
// getDivisiors 메소드 생성
// 매개변수 int a, b 선언
// k : 10 ~ 36까지 반복
// k % i == 0 : 약수 구하는 조건
// i : 10 ~ 36까지 약수를 출력
// public static void getDivisors(int a, int b) {
// for (int k = a; k <= b; k++) {
// System.out.print(k + "의 약수 :");
// for (int i = 1; i <= k; i++) {
// if ((k % i == 0)) {
// System.out.print(i + " ");
// }
// }
// System.out.println();
// }
//
//
// }
}
예제3
![]() |
![]() |
import java.util.Random;
import java.util.Scanner;
public class Ex02_야구게임 {
public static void main(String[] args) {
// 1.배열에 들어있는 데이터 출력하기 O
// 2.배열에 들어있는 데이터 중 중복이 있으면 true반환, 없으면 false반환 메소드
// 3.랜덤 숫자 만들기 메소드
// 4.strike, ball 카운팅 메소드
// 5.main메소드에서 게임 플레이 기능 만들기
Scanner sc = new Scanner(System.in);
System.out.println("==GameStart==");
int[] randomarray = createRandomNumber(3);
arrayToString(randomarray);
int[] inputarray = new int[randomarray.length];
while(true) {
for(int i = 0; i<inputarray.length;i++) {
System.out.print(i+ 1+"번째 숫자 입력 : ");
inputarray[i] = sc.nextInt();
}
int[] sb = strikeBallCounting(randomarray, inputarray);
System.out.println("strike : " + sb[0] + ", ball : " + sb[1]);
if(sb[0] == 3)
break;
}
System.out.println("게임종료!!");
// boolean check = isDuplicate(array);
// System.out.println(check);
// arrayToString(randomarray);
}
// 1. 배열에 들어있는 데이터 출력하기
public static void arrayToString(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
// 2.배열에 들어있는 데이터 중 중복이 있으면 true반환, 없으면 false반환 메소드
private static boolean isDuplicate(int[] array) {
boolean result = false;
for (int i = 0; i < array.length - 1; i++) {
for (int k = i + 1; k < array.length; k++) {
if (array[i] == array[k]) {
result = true;
}
}
}
return result;
//else
// return false를 하면 7,2만 검사하고 결과 자체가 false로 나옴
}
// 3.랜덤 숫자 만들기 메소드
private static int[] createRandomNumber(int length) {
Random r = new Random();
int[] array = new int[length];
while (isDuplicate(array)) {
for (int i = 0; i < array.length; i++) {
array[i] = r.nextInt(49) + 1;
}
}
return array;
}
// 4.strike, ball 카운팅 메소드
private static int[] strikeBallCounting(int[] randomarray, int[] inputarray) {
int[] sb = new int[2];
for (int i = 0; i < inputarray.length; i++) {
for (int k = 1; k < inputarray.length; k++) {
if (randomarray[i] == inputarray[i]) {
sb[0]++;
break;
} else if (randomarray[i] == inputarray[k]) {
sb[1]++;
}
}
}
return sb;
}
}
'ESG' 카테고리의 다른 글
| [2022년 청년친화형 기업 ESG지원 사업 - 12] (0) | 2022.09.21 |
|---|---|
| [2022년 청년친화형 기업 ESG지원 사업 - 11] (0) | 2022.09.20 |
| [2022년 청년친화형 기업 ESG지원 사업 - 9] (0) | 2022.09.17 |
| [2022년 청년친화형 기업 ESG지원 사업 - 8] (0) | 2022.09.16 |
| [2022년 청년친화형 기업 ESG지원 사업 - 7] (0) | 2022.09.15 |



