개인 공부/TIL

TIL #220531 #DB # JAVA

kaleb 2022. 5. 31. 21:30
728x90

지방선거 덕분에 이번주를 굉장히 호화롭게 보낼 수 있습니다!

선거 하고 하루 쉴수 있어서 정말 좋은데요 쉬는날 전에 수업은 언제나 싱글벙글입니다.

모두들 선거하고 원기 회복하고 돌아 올 수 있으면 좋겠습니다.

 

오늘은 오전 DB 오후 JAVA 수업으로 비교적 쉬울줄? 알았으나 생각보다 공부한 내용이 꽤 있는 것 같습니다.

 

오전 DB

 

그룹 함수(여러행 함수)

 

: 그룹 단위로 연산하는 함수, 그룹의 수만큼 연산 결과가 출력됩니다.

그룹을 묶지 않는 경우 테이블의 모든 행이 하나의 그룹으로 취급되어 연산됩니다.

숫자를 연산하는 그룹 함수 (데이터 타입으로 숫자만 받습니다!)

  • 평균 AVG : 선택된 컬럼의 평균 값을 반환합니다.
  • 표준 편차 STDDEV : 선택된 컬럼의 표준 편차 값을 반환합니다.
  • 합계 SUM : 선택된 컬럼의 합을 반환합니다.
  • 분산 VARIANCE : 선택된 컬럼의 분산 값을 반환합니다.
SELECT AVG(salary), STDDEV(salary)
FROM employees;
/*
AVG(SALARY)                              |STDDEV(SALARY)                           |
-----------------------------------------+-----------------------------------------+
6461.831775700934579439252336448598130841|3909.579730552481921059198878167256201202|
*/

모든 사원의 그룹의 평균값, 표준 편차 값을 출력해줍니다.

 

 

모든 데이터 값을 연산하는 그룹 함수

(다양한 데이터 타입의 값을 연산할 수 있습니다!)

  • 값의 수를 세는 함수 COUNT : 검색되는 데이터의 수를 반환합니다.
  • 최대값 MAX : 선택된 컬럼의 최대값을 반환합니다.
  • 최소값 MIN : 선택된 컬럼의 최소 값을 반환합니다.
SELECT COUNT(last_name), MAX(hire_date), MIN(salary)
FROM employees;
/*
COUNT(LAST_NAME)|MAX(HIRE_DATE)         |MIN(SALARY)|
----------------+-----------------------+-----------+
             107|2008-04-21 00:00:00.000|       2100|
*/

 

그룹함수에서는 기본적으로 NULl 값을 연산에서 제외하여 출력해줍니다.!!

 

 


count함수의 경우는 ‘*’를 카운팅하여 행의 수를 직접 셀 수 있습니다.

SELECT COUNT(*)
FROM employees;
/*
COUNT(*)|
--------+
     107|
*/

 

 

그 외 NULL 값을 포함한 연산을 해야할 필요가 있을 경우에는 NULL을 처리할 수 있는 함수를 적용하여 연산할 수 있습니다.

SELECT AVG(commission_pct), AVG(NVL(commission_pct, 0))
FROM employees;
/*
AVG(COMMISSION_PCT)                       |AVG(NVL(COMMISSION_PCT,0))               |
------------------------------------------+-----------------------------------------+
0.2228571428571428571428571428571428571429|0.072897196261682242990654205607476635514|
*/

 

DISTINCT

: 중복값을 제거해주는 키워드 입니다. 그룹함수에서도 활용이 가능합니다.

 

GROUP BY 절

: 테이블의 행을 그룹으로 묶는데 사용하는 기준을 설정하는 절입니다. GROUP BY절의 컬럼의 값들 중 동일한 값을 가진 행들은 하나의 그룹으로 묶이게 됩니다.

기준을 설정!!

 

 

GROUP BY절에서 여러 기준이 입력된 경우

기준 컬럼이 여러 개 인 경우 모든 기준 컬럼의 값이 동일해야 동일한 그룹으로 묶이게 됩니다.

4 SELECT department_id, job, SUM(salary)
1 FROM employees
2 WHERE department_id > 40
3 GROUP BY department_id, job_id
5 ORDER BY department_id;

/*
DEPARTMENT_ID|JOB_ID    |SUM(SALARY)|
-------------+----------+-----------+
           50|SH_CLERK  |      64300|
           50|ST_CLERK  |      55700|
           50|ST_MAN    |      36400|
           60|IT_PROG   |      28800|
           70|PR_REP    |      10000|
*/

 

에러가 뜰 경우에는 에러 코드 읽고 답을 찾거나 검색해봅시다!

 

 

Having절

그룹별 집계된 결과 중 원하는 조건의 결과만 필터링하기 위해 필터 조건으로 사용 합니다.

WHERE 절과 다른 점은 HAVING 절은 GROUP BY 절과 함께 사용해야 합니다.

 

 

예제 1
employees 테이블로부터 매니저를 알 수 없는 사원은 제외하고 매니저별로 그룹화하여 매니저별 최소 급여를 출력하되 최소 급여가 $6000 이상인 그룹만 출력하시오. 또한 최소 급여를 기준으로 내림차순으로 정렬하여 출력하시오.

 

문제를 받았을 때 분리하는게 좋습니다.

employees 테이블로부터 (FROM employees) 매니저를 알수 없는 사원은 제외 (manger_id is NOT NULL) 매니저별로 그룹화 하여 (GROUP BY manger_id) 매니저별 최소급여를 출력하되 SELECT manager_id, MIN(salary) 최소 급여가 $6000 이상인 그룹만 출력하시오. HAVING MIN(salary) > 6000 최소 급여를 기준으로 내림차순 정렬하시오 (ORDER BY MIN(salary) DESC

 

이제 바로 코드 작성!

SELECT manager_id, MIN(salary) MIN
FROM employees
WHERE manager_is is NOT NULL
GROUP BY manger_id
HAVING MIN(salary) > 6000
ORDER BY MIN(salary) DESC;
/*
MANAGER_ID	  MIN
---------- ----------
       102	 9000
       205	 8300
       145	 7000
       146	 7000
       108	 6900
       147	 6200
       149	 6200
       148	 6100
*/

 

 

Join 함수

두 개 이상의 테이블을 조회한 결과를 결합하여 하나의 결과를 얻고자 할 때 사용하는 구문입니다.

 

외부조인 (LEFT JOIN)

: 테이블 A를 기준으로 조인하는 방법입니다.

FROM 절에는 기준이 되는 테이블을 입력하고, LEFT JOIN절에는 조인되는 테이블을 입력합니다.

그리고 ON절에는 일치 조건을 입력하여 두 테이블 값이 일치하는 행만 조회하도록 합니다.

 

외부조인(RIGHT JOIN)

: 오른쪽에 있는 테이블을 기준으로 조인하는 방법입니다. 조회결과는 LEFT JOIN과 같지만 조회 순서는 다릅니다.

 

CROSS JOIN

: 테이블 A에서 조회되는 하나의 행에 테이블 B에서 조회되는 모든 행을 연결하여 조인하는 방법입니다.

 

ON 절을 사용한 Join

  • 필요 요소 : 연결 할 테이블, 연결 조건
  • Join절 : FROM 절의 테이블과 연결하여 조회할 테이블 명시합니다.
  • ON 절 : 조회할 테이블간의 행에 대한 연결 조건을 설정하는 조건절입니다.

필요한 테이블들은 FROM절과 JOIN 절에 작성합니다.

연결 조건은 ON 절에 작성해줍니다.

테이블 명은 table alias 문법으로 대신 하여 사용 할 수 있으며 구문이 실행 되는 동안에만 유지 됩니다.

조인문을 사용할 때 on 절을 이용하여 해당 조건으로 테이블 조인을 하게 됩니다.

SELECT employee_id, last_name, salary,
dept.department_id, department_name
FROM employees emp JOIN departments dept
ON emp.department_id = dept.department_id
WHERE salary > 15000;

/*
EMPLOYEE_ID|LAST_NAME|SALARY|DEPARTMENT_ID|DEPARTMENT_NAME|
-----------+---------+------+-------------+---------------+
        100|King     | 24000|           90|Executive      |
        102|De Haan  | 17000|           90|Executive      |
        101|Kochhar  | 17000|           90|Executive      |
*/

 

오후 JAVA

 

상속에서의 생성자

: 부모 클래스의 생성자는 상속되지 않습니다.

부모 클래스로부터 상속받은 메소드 및 필드는 부모 클래스에서 정의된 것입니다. 부모클래스의 생성자가 호출되어야 자식 클래스에서 사용이 가능합니다. 따라서 자식클래스에서 인스턴스를 생성할 때 부모클래스의 기본생성자를 자동으로 호출합니다.

 

부모클래스에서 매개변수를 갖는 생성자의 호출

매개변수를 갖는 부모클래스의 생성자는 자동으로 호출되지 않습니다.

super(매개변수 값); 을 통해서 부모 생성자를 호출한 후 자식클래스에서 사용이 가능합니다.

super() 는 반드시 자식 클래스 생성자의 첫 줄에 위치해야하고 부모 생성자의 매개변수와 동일한 타입으로 작성되어야 합니다.

 

 

생성자 super();

부모클래스의 생성자를 명시적으로 호출할 때 사용합니다.

생성자 this() 와 사용방법 및 목적은 동일합니다.

  • 부모클래스 생성자 중 특정 생성자를 명시적으로 호출할 경우
  • 부모클래스의 생성자에서 멤버변수 초기화 코드가 존재할 경우
    서브클래스 생성자에서 슈퍼클래스의 멤버까지 초기화 한다면 초기화 중복이 발생할 수 있습니다. 부모클래스의 멤버는 부모클래스 생성자에서, 자식클래스의 멤버는 자식클래스의 생성자에서 초기화하여 중복을 제거하기 위해서 사용합니다.

Final 키워드(상수)

: 대상의 변경이 불가능하도록(변경의 최종) 지정해줍니다.

  • 변수에 final이 붙은 경우 : 변수 값을 변경할 수 없습니다.
    저장되어 있는 값만 사용 가능합니다 = 상수
    일반 변수와 구별하기 위해 보통 대문자로 사용하며, 단어 사이의 구분은 언더 스코어(_) 를 사용합니다.
    ex) MAX_NUM 반드시 초기화가 필요하며, 초기화하지 않은 상수는 생성자를 통해서 초기화하면 사용 가능합니다.
  • 메서드에 final이 붙은 경우 : 메서드 변경이 불가능합니다
    오버라이딩을 할 수 없습니다.
  • 클래스에 final이 붙은 경우 : 클래스 변경이 불가능합니다
    상속을 할 수 없습니다.
    final 변수의 대표적인 예 Math 클래스의 PI 상수


변수에 final 키워드를 사용할 경우 fianl 상수는 반드시 초기화가 필요하는데

초기화 하지 않은 상수의 경우 생성자를 통해서 초기화가 가능합니다. 

class FinalMember {
	final int finalMember = 10;
	
	final int blankFinaMember;
	
	public FinalMember(int blankFinalMember) {
		super();
		this.blankFinaMember = blankFinalMember;
	}
}


래퍼런스 형변환(참조형변환)

: 클래스 간의 형변환, 상속관계에서만 가능한 변환입니다.

 

캐스팅(Up casting)

: 서브클래스 인스턴스를 슈퍼클래스 타입으로 변환 하는 것을 말합니다.

슈퍼 클래스 타입으로 서브클래스의 인스턴스를 참조!

“부모 클래스 타입 변수명 = 자식클래스 인스턴스” 의 형태입니다.

  • 컴파일러에 의해 자동 형변환이 일어납니다.
    묵시적 형변환
  • 참조 가능한 영역이 축소됩니다.
    슈퍼 클래스 타입에서 선언된 변수, 메서드에만 접근이 가능합니다. = 상속 받은 멤버만 참조 가능합니다.

 

자바의 경우 개념적인 내용이 많았던 것 같습니다. 다음 시간이되면 좀더 이해가 잘되지 않을까? 생각합니다. !!

 

반응형

'개인 공부 > TIL' 카테고리의 다른 글

TIL #220603 #JSP  (0) 2022.06.03
TIL #220602 #DB #WEB  (0) 2022.06.02
TIL #220530 #JSP #JAVA  (0) 2022.05.30
TIL #220527 #JSP  (0) 2022.05.27
TIL #220526 #JSP #WEB  (0) 2022.05.26