ALLYES
[2022년 청년친화형 기업 ESG지원 사업 - 3] 본문
일시 : 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
- 출력이 된 컬럼의 이름 : 열 머릿글 이라는 형태로 출력

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개 존재할 때 사용
- 삼항연산자
- 이항연산자 : 항이 2개 있을 때 사용
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(참/거짓)
'ESG' 카테고리의 다른 글
| [2022년 청년친화형 기업 ESG지원 사업 - 6] (0) | 2022.09.14 |
|---|---|
| [2022년 청년친화형 기업 ESG지원 사업 - 5] (0) | 2022.09.13 |
| [2022년 청년친화형 기업 ESG지원 사업 - 4] (0) | 2022.09.08 |
| [2022년 청년친화형 기업 ESG지원 사업 - 2] (0) | 2022.09.06 |
| [2022 청년친화형 기업 ESG지원 사업 - 1] (0) | 2022.09.05 |

