지방선거 덕분에 이번주를 굉장히 호화롭게 보낼 수 있습니다!
선거 하고 하루 쉴수 있어서 정말 좋은데요 쉬는날 전에 수업은 언제나 싱글벙글입니다.
모두들 선거하고 원기 회복하고 돌아 올 수 있으면 좋겠습니다.
오늘은 오전 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 |