오전에는 데이터 베이스 공부를 시작하였는데 어느 순간 영타 속도를 못따라가는 것 같고
나만 뒤쳐지는 것 같은 기분이 들었다 특히 타자를 치다가 수업을 종종 놓치기 일수 이고 3전에 배웠던 내용들이
기억속에서 살아져 가는 기분과 문제를 못푼다는 스트레스가 합쳐진다.
지난번에는 문제를 모르면 검색해서 이용하면 생각이 많이들었는반면 그런식으로 복습을 하고
이번 수업을 들으닌깐 그 기억은 더 빨리 잊혀져 가는 생각이 들었다 .
오늘은 함수에 관하여 공부를 했는데
--다일행 함수
--함수의 분류 : 내장함수, 사용자 정의함수
--내장함수 종류 : 단일행 함수, 다중행 함수의
--단일행 함수 : 문자, 숫자, 날짜
--문자 관련 함수 :Lower, Upper, Initcap, Concat
--: Substr, length, instr, replace, trIM
--: round, trunc, mod
--: sysdate, months_between, add_months, last_day
--: nvl,CASE
--문자 관련함수
select lower('SINHINHO') FROM dual;>>대문자 >>소문자로
select LENGTH('SINHINHO') FROM dual;>>A문자열
select INSTR('SINHINHO', 'I') FROM dual;>>A문자열 몇번째 찾기
select SUBSTR('SINHINHO', 5,4) FROM dual;>>A문자열 최소 두개이상 글자 찾기
select REPLACE('SINHINHO','H','*') FROM dual;>>A문자열 단어 바꾸기
--->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>CL SCREEN; 화면 지우기
ex)SELECT LAST_NAME, SUBSTR(LAST_NAME,2,3) EXIRUM
from employees;
SELECT LAST_NAME,
REPLACE(LAST_NAME,'s','*') EXIRUM,
LENGTH(LAST_NAME) len_irum
from employees;
숫자 관련함수>>> 10:32 자료 비교 찾기
--- 숫자 관련 함수
select round(12.34564643,2) as ron2 from dual;
select trunc(12.34564643,2) as trun2 from dual;
select mod(10,3) as mod2 from dual;
select mod(10,3) as mod2,
round(10/3.2) as rnd2
from dual;
-- 날짜 관련함수
select SYSDATE FROM dual;
select MONTHs_between ('2022-12-31',SYSDATE) FROM dual;
select add_MONTHs (SYSDATE,2) FROM dual;
SELECT LAST_DAY(sysdate) FROM dual;
SELECT LAST_DAY('2022-05-10') FROM dual;
--자료의 형변화 : 묵시적(암시적), 명시적 형변환
--묵시적 형변환
SELECT'5' to NUMBER('5') from dual;
SELECT '100'+'200', '200'as two from dual;
SELECT 100+'200','200' as two from dual;
SELECT 100||200,'200' as two from dual;
SELECT 100||200, (100||200)+100 from dual;
SELECT 100||200, 100||(200+100) from dual;
--명시적 형변화
--to_char,to_number,to_date
SELECT TO_CHAR(12345) char1 FROM dual;
SELECT TO_NUMBER('12345') num1 ,FROM dual;
SELECT TO_DATE('2022.11.04') dat1 FROM dual; >>(. , / , - 상관없음)
SELECT TO_DATE('2022.11.31') dat1 FROM dual; >>없는 날짜는 오류라고 나옴
SELECT TO_CHAR(to_date('2022.2.28'),'yyyy-mm') dat1 FROM dual; >>to_date 만든후 헤야됨
SELECT TO_CHAR(hire_date,'yyyy-mm') dat1 FROM employees;
SELECT TO_CHAR(salary,'99,999')salary
FROM employees;
-- 일반 함수 : nvl, case, DECODE
-- nvl(값, 기본값)
SELECT last_name, salary* nvl(commission_pct,0)
from employees;
-- CASE
-- 직종 IT_PROG : 10%, ST_CLERK:15%, SA_REP:20% 보너스를 지급하고
--이름, 직종 급여, 보ㅓ스 금액을 조회하시오..
SELECT LAST_NAME, JOB_id, salary,
(case job_id
when 'IT_PROG' THEN salary * 1.10
when 'ST_CLERK' THEN salary * 1.10
when 'SA_REP' THEN salary * 1.10
ELSE salary
end) as bonsal
FROM employees;
SELECT to_char (salary * nvl(commission_pct,0),'99,999') as salary
from employees
또 얼마 기억할지 , 또 얼마나 복습을 해야할지 막막하지만 새로운 지식이
쌓여 어느순간 자유자제로 함수 다룰 날을 기다린다.
--처음 환경 설정
sqplus/ as sys dba;
-- 아이디접속
sqlplus hr/hr
--매니저가 없는 사람들의 이름 및 직종을출력하시오
select last_name,job_id
from employees
where manager_id is null;
--매니저가 있는 사람들의 이름 및 직종,매니저 번호를 조회한다.
select last_name,job_id,manager_id
from employees
where manager_id is not null;
-- 커미션을 받는 모든 사원들의 이름,연봉 및 커미션을 출력하시오.
--연봉을 역순으로 정렬하고 연봉은 annsal로 출력하시오
SELECT last_name, salary*12* commission_pct+ salary*12as"annsal", commission_pct
from employees
where commission_pct is not null
order by "annsal" desc;
-- 이름의 네번째 글자가 H인 사원의 이름을 조회하시오
SELECT last_name
FROM employees
where last_name like '---h%';
-- 이름에 a와e글자가 있는 사원의 이름을 조회하시오
select last_name
from employees
where last_name like'%a%'
and last_name like '%e%';
--급여가 2500,3500,7000이 아니며 직업이 SA_REP나 ST_CLERK인 사원의
--이름과,급여,직업을 출력하시오.
SELECT last_name,salary*12,employee_id
from employees
where salary*12 not in (2500,3500,7000)
AND job_id in('SA_REP','ST_CLERK');
select last_name,salary,employee_id
from employees
where salary not in(2500,3500,7000)
and job_id in ('SA_REP','ST_CLERK');
--직원들의 이름에서 3번째 부터 2자를 추출(substr)하여 열명을
--sub_irun으로 하고, 이름과 같이 조회하시오.
select SUBSTR(last_name,3,2) as substr,last_name
from employees;
--직원들의 이름중에 's' 가 포함되어 있는 직원의 이름, 직종, 급여을 조회하시오(단일행 함수(INSTR)를 사용하시오.)
select last_name,job_id,salary
from employees
where INSTR(last_name,'s')>0;
--직원들의 전화번호에"."를'-'로 변경하고,열명을 re_phone으로 하고,이름과 함께 조회하시오.
SELECT last_name,REPLACE(phone_number,'.','-')"re_phone"
from employees;
-- 직원들의 이름(last_name)이 5자 이상인 직원의 부서 ID,이름,직종,급여를 조회하시오.
select department_id,last_name,job_id,salary
FROM employees
where length (last_name)>=5;
-- 직원들의 이름,급여,보너수(bonus),보너스를 포함한 연봉
-- (annsal)을 조회하시오.(단 모든 금액은 3자리마다","로 구분하여 조회한다.)
select last_name,
TO_CHAR (salary,'99,999') as salary,
to_char (salary *commission_pct,'99,999') as bonus,
to_char (salary*(1+nvl(commission_pct,0))*12,'9,999,999') "annsal"
from employees;
신기하게도 시험문제를 풀때마다 느끼는거지만 내가 기억했던것들을 제데로 기억했는지 ? 또 얼마나 기억했는지는 시험만큼 좋은게 없는것 같다.
그렇게 오전 수업이 끝나고 가져온 도시락을 챙겨먹은 뒤 남는 시간에 타자연습을 하면 다음 수업을 기다려 본다
import java.util.Scanner;
import org.w3c.dom.DOMStringList;
public class Ex01 {
public static void main(String[] args) {
// 입력한 변수의 총합과 평균을 구해보세요
Scanner sc = new Scanner(System.in);
int[] array = new int[5];
for (int i = 0; i < array.length; i++) {
System.out.print(i + 1 + "번째 입력 : ");
array[i] = sc.nextInt();
}
System.out.print("입력된 점수 : ");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
// 최고점수 출력
System.out.println();
System.out.print("최고점수는 : ");
int max = array[0];
for (int i = 0; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
}
System.out.println(max);
// 최저점수 출력
System.out.println();
System.out.print("최저점수는 : ");
int min = array[0];
for (int i = 0; i < array.length; i++) {
if (min > array[i]) {
min = array[i];
}
}
System.out.print(min);
// 점수총합 출력
System.out.println();
System.out.print("점수 총합 : ");
int sum = array[0];
for (int i = 0; i < array.length; i++) {
sum = sum + array[i];
}
System.out.print(sum);
// 평균점수 출력
System.out.println();
System.out.print("평균점수는 : " + (double) sum / array.length);
}
}
for문은 신기하게도 원리를 이해하면 새로운 함수가 들어오는순간 머리가 멍해지는것같다
package 최종테스트;
import java.util.Scanner;
public class Ex02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//Sting 형태의 team배열을 만들어 팀원의 이름으로 초기화하세요.
//이름을 입력받아 몇 번째에 위치하는지 출력하세요.
String[] team = { "이주희", "윤효창", "임소완", "김경진", "이로운" };
System.out.print("이름 : ");
String name = sc.next();
for (int i = 0; i < team.length; i++) {
if (name.equals(team[i])) {
name = team[i];
System.out.print(name + "님은" + i + "번째 인덱스에 있습니다.");
}
}
}
}
for 팁을 한가지 공유 하자면 어떻게 풀지 생각이 않나면 일단 계산을 무작정 처보고 숫자가 바뀌는 부분만 for문 형식으로
바꾸면 정리가 빨라지는것같다.
package 최종테스트;
public class Ex03 {
public static void main(String[] args) {
//학생들의 성적 정보가 문자열로 선언되어 있을 때 각 성적 별 학생 수를 출력하시오.
String name = "A,A,B,C,D,A,C,D,D,D,F";
String[] score = name.split(",");
int Acnt = 0;
int Bcnt = 0;
int Ccnt = 0;
int Dcnt = 0;
int Fcnt = 0;
for (int i = 0; i < score.length; i++) {
if (score[i].equals("A")) {
Acnt++;
} else if (score[i].equals("B")) {
Bcnt++;
} else if (score[i].equals("C")) {
Ccnt++;
} else if (score[i].equals("D")) {
Dcnt++;
} else if (score[i].equals("F")) {
Fcnt++;
}
}
System.out.println("A : " + Acnt);
System.out.println("B : " + Bcnt);
System.out.println("C : " + Ccnt);
System.out.println("D : " + Dcnt);
System.out.println("F : " + Fcnt);
}
}
오늘은 스플릿을 구글링을 통하여 스스로 찾아보고 적용하는 시간까지 마쳤다.
요즘에는 인공지능을 통해 개발 함수또한 자동적을 완성 한다지만 아직까지는 디테일문제를 해결하는 부분은 많이 부족한듯하다 지금 이런 함수들을 배워놓지 않으면 나중에 디테일 계산할때 많은 어려움이 겪지 않을까라는 생각으로
언젠가 사용할 날을 기대하면 집에 도착하여 복습을하고 하루를 마무리를 지어본다.
아 조만간 또 자바페스티벌진행 한다고 문제 30개를 내주셔서 주말또 빠르게 지나가지 않을까 생각해본다.