애너테이션
- 주석처럼 프로그래밍 언어에 영향을 미치지 않으면서 다른 프로그램에게 유용한 정보를 제공하는 것
→ 컴파일러에게 유용한 정보를 제공하는 것
표준 애너테이션
- 자바에서 기본적으로 제공하는 애너테이션
@override
- 조상의 메서드를 오버라이딩한다는 것을 컴파일러에게 알려주는 역할
- 메서드의 이름을 잘못 입력했을 때 컴파일러가 알려준다. ex ) parentMethod(); 를 parentmethod(); //에러발생
@Deprecated
- 더 이상 사용되지 않는 필드나 메서드에 붙힌다.
ex) Date메서드로 구현한 것을 Calender메서드로 새롭게 구현했을 때 Date메서드는 필요없게된다.
그럴 때 @Deprecated를 이용해서 더 이상 이 메서드를 사용하지말라고 경고를 준다.
@FunctionalInterface
- 함수형 인터페이스를 올바르게 선언했는지 확인해준다. (추상메서드가 하나인지 확인)→ 함수형 인터페이스의 규칙
@SuppressWarnings
- 경고메세지를 억제해준다. (경고메세지가 날 것을 알지만 묵인해야 할 경우)
- 대표적으로 억제할 수 있는 경고메세지의 종류
① Deprecated : '@Deprecated' 가 붙은 대상을 사용해서 발생하는 경고
② Unchecked : 지네릭스로 타입을 지정하지 않았을 때 발생하는 경고
③ rawtype : 지네릭스를 사용하지 않아서 발생하는 경고
④ 가변변인자의 타입이 지네릭 타입일때 발생하는 경고
@SafeVarargs (p.709 참고) (설명하기 어렵다..)
- 가변인자의 타입이 *non-reifiable 타입일 경우 .... 해당코드에 문제가 없을 때 경고를 억제하기 위해서 사용한다.
- ex ) 메서드의 매개변수가 가변인자인 동시에 지네릭스 타입, 그런데 코드에는 문제가 없으나 경고가 나오는 경우
→ *@SafeVarargs와 @SuppressWarnings("varargs") 를 같이 써야한다.
*non-reifiable : 컴파일 후 제거되는 타입(지네릭스) / @SafeVaarargs는 Unchecked도 같이 억제해준다.
메타 애너테이션
- 애너테이션을 위한 애너테이션
- 애너테이션을 정의할 때 애너테이션의 적용대상(target)이나 유지기간(retention) 등을 지정할 때 사용한다.
@Target (p.711)
- 애너테이션이 적용가능 한 대상을 지정하는데 사용된다.
@Reention
- 애너테이션이 유지되는 기간을 지정하는데 사용된다.
- 유지정책으로는 Source , Runtime, Class가 있다.
① Source : '컴파일러'가 사용하는 애너테이션의 유지정책 , @override, @SupressWarnings 이 있다.
② Run : 실행시 '리플렉션(reflection)을 통해 클래스 파일에 저장된 애너테이션 정보를 읽어서 처리할 수 있다.
→ 실행시 사용가능한 애너테이션 정책
③ Class : 컴파일러가 애너테이션의 정보를 클래스 파일에 저장할 수 있게 한다.
그러나, 클래스파일이 JVM에 로딩될때는 애너테이션의 정보가 무시되어 실행시 애너테이션의 정보를
얻을 수 없다.
----------------------------------------------------------------------------------------------------------------------------
Database
select * --name,title,salary,start_date
from student.s_emp
where title='사원'and
salary between 1000 and 2000 and --비트윈 사이값 1000(포함) 2000(포함)
start_date < '16/12/31' and
dept_id IN (110,113); --둘 중 포함된값
select name, salary, dept_id
from student.s_emp
where (dept_id=110 or dept_id= 113) --우선순위 : 1, 비교연산자, 2. and 3. or
and salary >= 2000;
--SQL에서 사용되는 함수는 2가지 형태
--1) 단일 행 함수 2) 다중 행 함수 : GROUP
--단일) 문자형 함수
select upper('ORACLE Server') from dual; --문자값을 대문자로
select lower('ORACLE Server') from dual; --문자값을 소문자로
select initcap('ORACLE Server') from dual; --문자값의 첫 문자를 대문자, 나머지 소문자로 (공백기준)
select concat('ORACLE','Server') from dual; --문자값을 연결
select substr('강남구 대치동',5,2)from dual; --문자열 추출 문자값에서 공백포함 5번째 자리부터 2글자
select substr('강남구 대치동',-6,2)from dual; --우측부터 추출하고싶은경우
select length('홍길동') from dual; --문자열의 길이
select LPAD('홍길동',10,'*') from dual; --좌측의 자리수 만큼 채워주는 함수
select ltrim('XXAXBA','X') from dual; -- 왼쪽부터 해당 철자인경우 지우는 함수 rtrim은 오른쪽부터
select translate('AABBA','B','X') from dual; --해당 문자열의 해당문자를 해당문자2로 변경
select replace('JACK and JUE','J','BL') from dual; -- translate는 문자만 가능, replace는 문자,문자열가능
--단일) 숫자형 함수
select round(35.735,2) from dual; --소수 2(n)번째 자리 반올림(버림) n이 양수면 소수n번째 이하자리, 음수면 정수부분 자리, 생략하면 0
select mod(7,4) from dual; -- 나머지 구하는 함수
select power(3,2) from dual; -- (a,b) a의b제곱
select sqrt(25) from dual; -- 루트a
select sign(-15) from dual; --숫자값이 양수면 1, 음수면-1, 0이면 0
select chr(65) from dual; --숫자값을 해당하는 아스키코드로
select name from student.s_emp
where name between nchr(44032) and nchr(50499) --ㄱ부터 ㅅ까지
order by 1 asc;
--날짜형함수
select sysdate from dual; -- 현재날짜
select last_day(sysdate) from dual; -- 이번달 마지막날
select last_day('17/02/01') from dual; --지정한 날짜의 해당월 마지막 날짜
select months_between('17/01/01','17/03/01') from dual; --두 날짜사이의 개월수를 구함
select add_months('17/01/01', 2) from dual; --지정한 날자로부터 몇개월 후의 날짜를 구함
select round(sysdate,'month') from dual; --날짜를 반올림, 15일 이후이면 다음달로 출력
select trunc(sysdate,'year') from dual; --
-- Q : 이번달 마지막날까지 몇일 남았는지 계산하시오
select last_day(sysdate) -sysdate from dual;
--변환형함수
select to_char(350000,'$999,999') from dual;--숫자를 문자로 변환
select to_char(sysdate,'yyyy/mm/dd') from dual; --날짜를 문자로 변환
select to_number('1234') from dual; --문자를 숫자로 변환
select to_date('19951024','yyyy/mm/dd')from dual; --문자를 날짜로변환 (형식에 맞아야함)
--그룹함수
--count,avg,sum,min,max,stddev,variance ...
----김씨만 카운트
select count(name)
from student.s_emp
where name like('김%')
order by 1 asc;
select dept_id,avg(salary) --SALARY
from student.s_emp
where title = '사원'
group by dept_id
order by dept_id;
----Q : 각 부서별 평균 급여율을 보이시오 . (그룹 : 부서)
select dept_id, avg(salary) as 평균급여율
from student.s_emp
group by dept_id
order by 2 asc; --평균급여율 내림차순
--Q : 직책이 사원인 직원들의 평균 급여를 계산해서 보여주시오
select dept_id as 부서, title, avg(salary)
from student.s_emp
where title ='사원'
group by dept_id,title
order by 3 asc;
----Q : 각 부서별로 평균 급여를 구하되 평균 급여가 2000이상인 부서만 나타내시오
select dept_id as 부서, avg(salary) as 평균급여
from student.s_emp
GROUP by dept_id
having avg(salary) > 2000 --그룹의 조건.
order by 2 asc;
select title, avg(salary), count(*) -- 직책, 직책의 평균, 직책의 개수
from student.s_emp
group by title
having count(*) > 2;
--일반) 직책별 급여의 총합
select title, sum(salary)
from student.s_emp
group by title;
--각 직책별로 급여의 총합을 구하되 직책이 부장인 사람은 제외,
--단, 급여 총합이 8000만원 이상인 직책만 나타내며, 급여 총합에 대한 오름차순으로 정렬
select title, sum(salary)
from student.s_emp
where title not in('부장')
group by title
having sum(salary)>8000
order by 2 asc;
--각 부셔별로 직책이 사원인 직원들에 대해서만 평균 급여를 구하시오.
select dept_id,title,avg(salary)
from student.s_emp
where title='사원'
group by dept_id, title
order by 3 asc;
--각 부서내에서 각 직책별로 몇 명의 인원이 있는지 나타내시오
select dept_id as 부서, title as 직책 ,count(title)
from student.s_emp
group by dept_id,title;
--각 부서내 몇 명의 직원이 근무하는지를 나타내시오
select dept_id,count(*)
from student.s_emp
group by dept_id;
--각 부서별로 급여의 최소값과 최대값을 나타내시오. 단, 최소값과 최대값이 같은 부서는 출력하지 마시오
select dept_id, min(salary), max(salary)
from student.s_emp
group by dept_id
having min(salary)<> max(salary);
'study' 카테고리의 다른 글
2018년 5월 15일 (0) | 2018.05.15 |
---|---|
2018년 5월 14일 (0) | 2018.05.14 |
2018년 5월 11일 (0) | 2018.05.13 |
2018년 5월 10일 (0) | 2018.05.10 |
2018년 5월 8일 (0) | 2018.05.09 |