23.01.16

이동욱·2023년 8월 6일
0

NaverCloudCamp

목록 보기
12/42

학습내용

  1. 지난 과제 확인
  2. sql문 종류
  3. VARCHAR, CHAR 차이
  4. []
  5. DUAL
  6. COMMIT, ROLLBACK(추후 더 배움)
  7. NULL
  8. NVL(), NVL2()
  9. sql 실습

과제

  • reference 값을 System.out.print()로 호출하면 해당 reference의 toString() 메서드를 호출한다.
    DataType마다 다르게 찍히는것은 내부적으로 overriding된 toString()가 다르기 때문이다.

  • 메서드 시그니처는 구체적인것보다 인터페이스로 해라(유지, 보수에 편함)

	/*
	 * moveVector() 메서드는 Vector이라는 구체적인 DataType을 반환한다.
	 * 나중에 v에 vector 대신 ArrayList를 사용한다면 코드를 일일히 바꿔주어야하는 번거로움이 생긴다.
	*/
	public static Vector<String> moveVector(String datas[]) {
		Vector<String> v = new Vector<>();
		
		for(int i = (datas.length-1); i >= 0; i--) {
			v.add(datas[i]);
		}
		return v;
	}
	
	/*
	 * Vector대신 더 일반적인 List를 DataType으로 선언한다면 나중에 Vector대신 ArrayList로 변경되어도 코드를 수정 할 필요가 없다.
	 *  
	*/
	public static List<String> moveVector(String datas[]) {
		List<String> l = new Vector<>();
		
		for(int i = (datas.length-1); i >= 0; i--) {
			l.add(datas[i]);
		}
		return l;
	}

sql문 종류

  1. 조회/검색 SELECT
  2. 입력/수정/삭제 INSERT/UPDATE/DELETE 테이블 안의 데이터를 생성수정삭제(DML, select를 DML로 보는 사람들도있다)
  3. 생성/수정/삭제 CREATE/ALTER/DROP 테이블을 생성수정삭제(DDL)
  4. 저장 COMMIT/ROLLBACK 저장, 취소(TCL)
  5. 권한 GRANT/REVOKE DB 사용자 권한 제어(DCL)

VARCHAR, CHAR 차이

  • VHARCHAR() 실제 넣어준 값들의 개수만큼만 공간을 유지한다.
  • CHAR() 초기에 설정한 크기만큼 공간을 유지한다.

[]

  • o ~ more을 나타내는 표현이며 생략가능하다는 뜻이다.
create table [schema.] table_name
(
	column datatype
	[, column datatype ...]
)

DUAL

  • sql은 항상 테이블 구조로 데이터를 보여주기 위해 DUAL이라는 가상의 TABLE을 통해 데이터를 보여준다.
SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
--------
23/01/16

COMMIT, ROLLBACK(추후 더 배움)

  • COMMIT전까지는 아직 메모리에서만 변경내용이 반영되고 실제 DB에는 반영되지 않은 상태이기에 COMMIT을 통해 DB에 변경내용을 반영한다.
  • ROLLBACK COMMIT전까지 변경되었던 수정내용을 되돌린다.

NULL

  • NULL도 연산이 가능하며 사칙연산에서 NULL이 들어가면 결과는 항상 NULL이다.(NULL도 연산 포함)
  • NULL 비교관계 항상 false이다.
  • SQL에서 NULL을 검색하는 방법은 아래와 같다.
SELECT * FROM emp_test WHERE salary IS NULL;
SELECT * FROM emp_test WHERE salary IS NOT NULL;

NVL(), NVL2()

  • TABLE안 NULL값을 처리하는 함수이이며 NVL()과 NVL2()가 존재한다.
SELECT name, NVL(salary,0) FROM emp_test; // salary NULL이 존재하면 0으로 대체
SELECT name, NVL2(salary,salary,0) FROM emp_test; // salary가 NULL이 아니라면 salary 반환, NULL이라면 0으로 대체

sql 실습

  1. salary가 null 이고 title가 null인 직원 검색

    select * from emp_test where salary IS NULL AND title IS NULL;

  2. title이 null인 직원 title 계약직 변경

    update emp_test set title = '계약직' WHERE title IS NULL;

  3. 월급 2000 이상인 직원 '특판팀' 변경 및 현 월급에서 무조건 1000 차감 변경

    update emp_test set dept_name='특판팀', salary = salary - 1000 where salary >= 2000;

  4. 2005년 01월01일 이후 입사자 검색

    select * from emp_test where in_date >= '05-01-01';

  5. 2005년 01월01일 이후 입사자 이고 월급이 6000원 이하인 직원 검색

select * from emp_test where in_date >= '05-01-01' and salary <= 6000;

  1. 이름,부서,직책,입사일 조회(ALIAS 사용)

select name as 이름, dept_name as 부서, title as 직책, in_date 입사일 from emp_test;

  1. 이름,직책,연봉,특별 상여금 조회(ALIAS 사용, 상여금은 연봉의 15%로 계산), NULL은 연산에서 제외(?) NULL은 어떻게 추출되는지 확인

select name as 이름, title as 직책, salary*12 as 연봉, salary * 0.15 as "특별 상여금" from emp_test;

  • 직책 NULL 인 경우 ==> 인사발령전, 연봉 NULL 인경우 ==> 0, 상여금 NULL 인경우 ==> 0

select name 이름, NVL(title, '인사발령전') 직책 , NVL(salary*12, 0) 연봉 , NVL(salary*0.15 , 0) "특별 상여금" from emp_test;

  1. 이름,월급,일당,시급을 조회(ALIAS 사용)/ (일당 :30일, 시급 : 8시간 기준)

select name 이름, salary 월급, salary /30 일당, salary / 30 / 8 시급 from emp_test;

  1. 위의 QUERY문을 아래의 함수를 사용하여 정리 추출(ALIAS 사용, ROUND(), TRUNC () 사용)

select name 이름, salary 월급, ROUND(salary / 30, 0) 일당, TRUNC(salary / 30 / 8 , 0) 시급 from emp_test;

  1. 위의 QUERY문(ROUND,TRUNC 사용한 것) 월급,일당,시급 NULL은 0 추출

select name 이름,NVL(salary, 0) 월급, NVL(ROUND(salary / 30, 0), 0) 일당, NVL(TRUNC(salary / 30 / 8 , 0), 0) 시급 from emp_test;

profile
Backend Developer

0개의 댓글