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지원 사업 - 3] 본문

ESG

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

Allyes_99 2022. 9. 7. 17:48

일시 : 2022.09.07

시간 : 9:00 ~ 18:00


오전 : Database 

점심시간

오후 : Java


오전 [Database] : 실습


여러개의 테이블 검색 : 조인

 

SELECT (select_list절) 

보고자 하는 data를 소유한 컬럼 이름을 출력

명시가 된 컬럼의 데이터가 결과로 출력이 됨

 

FROM 절

테이블의 이름을 기록하는 절

 

SELECT FROM => 테이블로 부터 컬럼에 있는 데이터를 검색을 하겠다


  • SELECT * FROM departments;
    • * : 테이블의 모든 컬럼 출력
    • 맨 상단에 컬럼 이름이 출력이 됨 : department_id, department_name, manager_id, location_id
    • 출력이 된 컬럼의 이름 : 열 머릿글 이라는 형태로 출력

 

departments 테이블의 컬럼들의 일부

 


 

SQL PLUS 명령어 

  • 화면을 변경해주는 편집 명령어 : column
  • a : 문자/날짜 만 변경 가능
  • 위 결과와 다르게 정리된 결과


변경 했던 값을 다시 취소 하고 싶을 경우

column department_name clear


숫자를 변경을 하고 싶을 경우

column department_id format 999999999

9 : 숫자 변경


SELECT 코드 작성 할 경우 진행과정

1. coad 작성 (실행X)

2. coad 해석

3. 결과 예측

4. 코드 실행

5. 결과 비교/분석


데이터베이스에서 DATA의 의미 : 행 단위

27 rows selected

departments 테이블의 부서의 갯수는 27개의 부서를 가지고 있다.



명시된 순서대로 출력됨


프로젝션의 기능 : 특정 컬럼의 결과만 출력

select department_id, location_id

from departments;


언어

  • 절차적 언어 : java, c 
    • 모든 과정을 기술을 해야함
  • 비절차적 언어 : sql, python  
    • 절차를 기술 하지 않음

select name from emp;

enter 후

오라클 서버 내에서 컴파일 과정이 진행됨 : parse(파싱)

 

parse

1. 검증 - 테이블, 컬럼 등 무결성 검사

2. 실행계획 수립 - 테이블로부터 데이터를 가져오는 방법 

3. 실행 결과 출력

 

데이터 딕셔너리(DD)

parse을 하기 전에 DD에 검색을 먼저 함

meta data : 데이터의 데이터, 데이터를 표현 해놓은 데이터

 

sql 문장이 실행이 되면 DD안에 공유공간에 parse결과 text를 저장 해둠 => 처리 속도 향상


  • 공부꿀팁!
    • 코드 마다 주석을 달아서 복습 할 것
    • 에러 메시지도 따로 정리해두면 좋음

  • select last_name, hire_date, salary from employees;

 

  • 출력이 되는 열 머릿글은 default 값으로 대문자로 표기
  • 날짜와 문자는 왼쪽 정렬 (last_name, hire_date)
  • 숫자는 오른쪽 정렬 (salary)
  • 27개의 부서와 107명의 사원이 있습니다.(departments, employees)

문제 : 근무하는 사원의 이름과 급여와 연봉을 출력

select last_name, salary, salary*12

from employees;


select 문은 산술연산이 가능!!

  • 산술연산
    • column과 숫자 
    • column과 column
      • 숫자 데이터에 관해서 연산이 가능
      • 문자 데이터에 관해서 연산이 불가능
      • 날짜 데이터에 관해서는 일수에 + , - 만 가능

select last_name, job_id, salary, commission_pct
from employees;


문제 : 근무하는 사원의 이름과 연봉을 출력. 단, 보너스를 받는 사원은 보너스를 곱한 값을 출력 하시오

select last_name, salary*12*commission_pct
from employees;

!! 보너스를 받지 못한 사람은 null값으로 출력됨 !!


그렇다면 이 결과를 어떻게 변경해야할까?

select last_name, salary*12*nvl(commission_pct,1)
from employees

  • nvl함수(null value language)
  • commission_pct,1 : commission_pct가 null이 있으면 1로 대체

열머릿글이 annsal로 이름이 바뀜

select last_name,  salary*12, salary*12 as annsal
from employees


alias 

  • 열 머리글의 이름을 변경 해줌
  • 계산식에 대한 열머리를 지정할 때 유용
  • 1개의 column당 1개의 alias 명만 지정 가능

last_name : name

commission_pct : comm

두 가지의 코드는 똑같은 결과를 나타냄

select last_name as name, commission_pct comm
from employees;

as - 단문 출력,  대문자 출력 : NAME 

- 검증 절차를 거치치 않음(가독성과 성능적으로 좋음)

-  as를 추천

space  - 단문 출력, 대문자 출력 : COMM

- 검증 절차를 거쳐야함


위 결과와 달리 소문자가 출력됨

select last_name "Name", salary*12 "Annual Salary"
from employees;


select를 이용하여 column 열머리글 출력

alias를 이용하여 열머리글 변경 가능

 

[변경 방법]

1. as - 단일 문자, 대문자

2. space - 단일 문자, 대문자

3. " " - 복수 문자, 쓰여진 형식 그대로 출력(대소문자 구분)

 

!! [좋지않은 변경방법] !!

"NAME" : 대문자를 또 대문자로 재검증

as "Name" : " " 이 자체로도 기능이 있는데 as를 써서 코드량을 늘려서 좋지 않음


문제 : 회사에 근무하는 사원의 이름과 연봉을 구하시오. 단, 이름은 NAME으로 연봉은 AnnSal로 출력하시오.

select last_name as name, salary*12 "AnnSal"
from employees;


select salary*12 as annsal from employees;

 

select from : 명령어

salary : 컬럼 이름

emp : 테이블 이름

* : 연산자

as annsal : alias

12 : 리터럴 문자

 

[ 리터럴 문자 ]

  • 저장되어 있지 않은 문자, 날짜, 숫자
  • 날짜 및 문자 리터럴 값은 작은 따옴표로 묶어야함
    • 테이블과 컬럼을 구분하기 위해 사용

select department_id
from employees;
  • 현재 사원이 근무하고 있는 부서 번호가 저장되어 있는 것
  • departments 테이블의 department_id는 모든 부서의 번호
  • 부서가 107개가 아닌 107명의 사원이 들어가있는 각 부서의 번호


distinct : 중복 제거

11개의 부서에 사원이 근무하고 있다.

=> 중간에 null 값이 있기 때문

select distinct department_id
from employees;


[ 27 - 11 = 16 ]

27 : 전체 부서의 개수

11 : 현재 사원이 근무하고 있는 부서

16 : 현재 사원이 없는 부서


select distinct department_id, job_id
from employees
order by 1;

  • 그룹화 현상
    • 똑같은 값들 끼리 모아두는 현상
    • 중복 제거를 위해 똑같은 값들을 모으는 그룹화 현상이 나옴
  • 멀티플 중복 제거 현상
    • 실행이 되면 그룹 내에서 그룹이 생성이 되어 중복 제거 현상이 실행이 됨
    • 행과 행에서 중복 제거 현상이 일어남

select distinct * column alias
from table_name

select : 데이터의 결과를 활용하기 위해 select 사용

  • select_list절
    • 보고자 하는 data를 알기 위해 
    • 보고자 하는 data를 소유한 column_name을 명시하기 위해 사용 => 출력 관련
    • 명시된 column_data 가 데이터로 결과가 출력이 됨

distinct

  • 중복을 제거하기 위해
  • 전체 문장에서 한번만 사용 가능
  • select 다음에 위치 

*

  • 모든 컬럼을 알기 위해 사용
  • 특정 컬럼을 알기 위해서는 특정 컬럼 이름을 적어야함

 

alias

  • column 다음에 위치
  • 1개 col 1개 alias 명
  • as , space : 단일 문장, 대문자 출력
  • " " : 복수 문장, 쓰여진 형식 그대로 출력(대소문자 구분)

 

산술 연산

  • col + 산수
  • col + col
    • 숫자 데이터 대해서 산술연산 가능
    • 문자 데이터 대해서 산술연산 불가능
    • 날짜 데이터 대해서 일수  +, - 만 가능

null -> null => nvl(컬럼, 대체값)

  • 컬럼에 null값이 있다면 명시가 된 대체값을 이용하여 출력함

 

from

  • select_list에 명시된 컬럼이 속한 table_name을 적음

문제 : 90번 부서에 근무하는 사원의 이름과 급여를 출력하시오.

select last_name, salary
from employees
where department_id = 90;


where 

  • 행을 제한하기 위한 조건절
  • from절 다음에 위치 (from - where 절 사이에는 아무것도 올 수 없음)
    • 조건식 명시(조건문) 
      • 구성 : department_id(column) =(연산자) 90(값)
    • 값을 명시 할 때 : 문자/날짜 => ' ' 표기
    • 값을 명시 할 때 : 반드시 table에 저장된 형식 그대로 사용

'whalen'으로 검색한 경우 검색 출력이 없음 'Whalen'으로 검색한 경우 값이 출력됨

select last_name, job_id, department_id
from employees
where department_id = '90';

이 경우 결과 값이 출력이 되나 성능이 떨어짐


 

단일 비교 조건

  • 값을 하나만 비교 가능함
  • # <> 보다는 !=을 씁니다.


실행 순서

1. from 절

2. where절

3. select 절


select last_name, salary*12 as annsal
from employees
where annsal > 150000;

실행 순서로 인하여 에러 발생!!


[오후] Java

지난 시간 Java 복습


프로젝트 생성


class 생성


public class Ex01_복습 { // class 생성 부분

	// main 메소드 -> 프로그램 실제 실행시킬수 있는 기능!
	public static void main(String[] args) {
		
		// 컴퓨터에게 데이터 값이 5인 숫자를 저장하기!
		
		// 데이터를 담을 수 있는 공간 -> 변수!
		// 변할 수 있는 수를 관리하는 공간
		// int num = 5;
		// 데이터 타입, 변수명, 값
		
		int num = 1;
		
		// 출력을 위한 명령어
		System.out.println(num);	// 결과 : 1
				
		num = 8;	
		System.out.println(num);	// 결과 : 8

	}

}// class 종료 부분

 


public class Ex02_자료형 {

	public static void main(String[] args) {
		// 1. 논리형 -> boolean
		boolean a = true;
		boolean b = false;
		
		// 2. 문자형(문자 1개) -> char
		char c = 'a';
		
		// 여러개의 문자를 담기 위한 상태 -> String
		// 참조형(레퍼런스형)에 담아주어야 한다!
		String d = "banana"; 
		
		// 3. 정수형
		int e = 5;
		short f = 3;
		byte g = 1;
		long h = 10;
		
		// 4. 실수형 -> float, double
		double i = 3.14;
		double j = 1; // 정수형을 저장하게 될 경우 자동으로 소수점 생성
		
		System.out.println(j);
		
		float l = 1.2f;
		
	}

}

public class Ex03_형변환 {

	public static void main(String[] args) {
		// 형 변환(Casting) : 데이터의 형태를 다른 형태로 저장하는 기법
		// ex) 실수형 2.1 -> 정수형 2
		// ex) 정수형 1 -> 실수형 1.0
		
		// 형변환의 형태!
		// 1. 자동 형변환 : 손실되는 데이터가 없을 경우 사용!
		//					작은 용량에서 -> 큰 용량 이전!
		// = 묵시적 형 변환
		
		int num1 = 3;
		double num2 = 5.4;
		
		num2 = num1;
		
		// 2. 강제 형변환 : 손실되는 데이터가 있는 경우 사용!
		//					큰 용량에서 -> 작은 용량 이전!
		// = 명시적 형 변환
		
		double num3 = 1.2;
		int num4 = 1;
		num4 = (int) num3;
		
	}

}

연산자란?

연산 - 정해진 규칙에 따라 데이터를 처리하여 결과를 산출하는 것


  • 연산자의 종류
    • 이항연산자 : 항이 2개 있을 때 사용
      • 산술연산자
      • 대입연산자
      • 비교연산자
      • 논리연산자
    • 단항 연산자 : 항이 1개 존재할 때 사용
      • 증감연산자
    • 삼항연산자 : 항이 3개 존재할 때 사용 
      • 삼항연산자

1. 산술연산자 : 숫자연산

+ : 더하기 - : 빼기 * : 곱하기 / : 몫 % : 나머지

숫자, 숫자 -> 숫자
정수, 정수 -> 정수
실수, 실수 -> 실수
정수, 실수 -> 실수
문자, 문자 -> 문자(문자끼리의 연결고리)
문자, 숫자 -> 문자(문자와 숫자의 연결고리)

 

String num1 = "10";
String num2= "7";
System.out.println(num1 + num2);
// "107"

위, 아래 코드들은 같은 결과를 출력함

int num1 = 10;
String num2 = "7";
System.out.println(num1 + num2);
// "107"

산술 연산자 예제

String a = 10 + 7 +"";
String b = 8 + "" + 2;
String c ="" + 5 + 2;

System.out.println(a);	// 17
System.out.println(b);	// 82
System.out.println(c);	// 52

 


public class Ex04_연산자실습 {

	public static void main(String[] args) {
		
		int orange = 3729;
		int number = 52;
		
		int sum = orange/number;
		System.out.println("김모씨가 귤 박스를 줄 수 있는 박스의 수는? " + sum + "박스");
        // 71박스
		
		// 남아있는 귤의 갯수 확인하기;
		int sum2 = orange%number;
		System.out.println("남은 귤의 갯수 : " + sum2 + "개");
        // 37개
	}

}


public class Ex05_연산자실습2 {

	public static void main(String[] args) {
		int num = 456;
		int sum = 100 * (num/100);
		
		System.out.println("결과 확인: " + sum);
		
		//System.out.println(num/100+"00");
	}

}
// 결과 : 400

import java.util.Scanner;

public class Ex06_입력실습 {

	public static void main(String[] args) {
		
		//키보드 - > Scanner 기능 활용!
		
		//키보드 입력 기능 불러오기! -> import 과정 필요!
		//ctrl + shift + o
		Scanner sc = new Scanner(System.in);
		
		System.out.print("숫자 입력 >> ");
		
		//입력값 받기
		int num = sc.nextInt(); // 키보드로부터 다음에 정수형 데이터를 입력 받겠다!
		System.out.println("입력된 값 : " + num);
		
		
		// char word1 = 'A';
		System.out.print("이름 입력 >> ");
		
		String word2 = sc.next();
		
		System.out.println("입력된 이름: " + word2);
	}

}


import java.util.Scanner;

public class Ex07_입력실습 {

	public static void main(String[] args) {
		
		// Scanner 기능 불러오기
		// 단축키 : ctrl + shift + 'o'
		Scanner sc = new Scanner(System.in);
		
		System.out.print("Java 점수 입력 :");
		int javaScore = sc.nextInt();
		
		System.out.print("Web 점수 입력 :");
		int WebScore = sc.nextInt();
		
		System.out.print("Android 점수 입력 :");
		int Android = sc.nextInt();
		
		// 3과목의 총 합계
		int sum = javaScore + WebScore + Android;
		
		// 3과목의 평균 -> 합계 / 전체 가지 수
		int avg = sum/3;
		
		System.out.println("합계 : " + sum);		
		System.out.println("평균 : " + avg);
	}

}

2. 대입 연산자 : 연산의 결과를 담을 때

= (대입, 할당연산자) a = b  ,  a = b + 1
+=, -=, *=, /=, %=, &=, ^=, |= (복합대입연산자) a += b => a = a + b

대입 연산자 예제

int num = 29;

num -= 2;
System.out.println(num);

// 27

 

int num = 29;

num -= 2+3*4;
System.out.println(num);

// 15

3. 증감 연산자 : 변수에 저장된 값을 1증가 혹은 감소

 ++(증가연산자) ++ 변수, 변수++
--(감소연산자) --변수,  변수--

증감연산자 예제

int i = 3;

System.out.println(++i);
// 4

System.out.println(i++);
// 4

System.out.pritln(i);
// 5
int opr = 0;
opr += 3;

System.out.println(opr++);
// 3

System.out.println(opr);
// 4

System.out.println(++opr);
// 5

System.out.println(opr);
// 5

System.out.println(opr--);
// 5

System.out.println(opr);
// 4

System.out.println(--opr);
// 3

System.out.println(opr);
// 3

4. 비교연산자 : 부등호 연산, 같다/다르다 연산

< , <= , >, >= a > b , a >= b
==, != a == b, a != b

=> 결과값 Boolean(참/거짓)