Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ALLYES

[2022년 청년친화형 기업 ESG지원 사업 - 10] 본문

ESG

[2022년 청년친화형 기업 ESG지원 사업 - 10]

Allyes_99 2022. 9. 19. 18:04

일시 : 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

  • 스크립트 파일 생성
  • 파일 생성
    • 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;
	}

}