Q.각 직업별, 최대 급여, 최소급여, 급여 총 합 및 평균 급여를 출력하시오. 단, 최대 급여는 MAX MIN SUM AVG로 출력하고, 직업을 오름차순으로 정렬하시오.
Q.동일한 직업을 가진 사원들의 총 수를 출력하시오.
Q.매니저로 근무하는 사원들의 총 수를 출력하시오.
Q.사내의 최대 급여 및 최소 급여의 차이를 출력하시오.
Q.매니저의 사번 및 그 매니저 밑 사원들 중 최소 급여를 받는 사원의 급여를 출력하시오.
-매니저가 없는 사람들은 제외한다. -> manager_id is not null
Q. Zlotkey와 동일한 부서에 근무하는 다른 모든 사원들의 사번 및 고용날짜를 출력하시오.
select employee_id, hire_date
from employees
where department_id in
(select department_id
from employees
where last_name = 'Zlotkey')
and last_name!='Zlotkey';
괄호 안에 있는 게 서브쿼리. -> 질로키라는 이름을 가진 사원의 부서이름을 찾음.
중복이 있을 수도 있으니까 in써야함!!!!
Q.회사 전체 평균 급여보다 더 급여를 많이 받는 사원들의 사번 및 이름을 출력하시오.
select employee_id, last_name
from employees
where salary >
(select avg(salary)
from employees);
Q.이름에 u가 포함되는 사원들과 동일 부서에 근무하는 사원들의 사번 및 이름을 출력하시오.
select employee_id, last_name
from employees
group by department_id in
(select department_id
from employees
where last_name like '%u%');
// ★ 일부찾는 건 like
Q. 시애틀에 근무하는 사람 중 커미션을 받지않는 모든 사람들의 이름, 부서명, 지역아이디를 출력하시오.
서브쿼리 : 특정 값을 모를 때 사용.
서브쿼리가 먼저 실행. 메인 쿼리가 받아주는 역할.
select last_name
from employees
where salary >
(select salary
from employees
where last_name - 'Abel')
=> 'Abel'이라는 사원의 급여보다 많이 받는 사원의 이름 출력.
서브쿼리의 결과와 메인쿼리의 받는 컬럼의 데이터타입은 반드시 동일해야함.
컬럼 이름은 달라도 무방하지만 대부분 동일한 경우가 많음.
서브쿼리는 연산자 다음에 오고, 서브쿼리는 괄호로 묶임.
오더바이절은 서브쿼리 안에 쓰지 않는 걸 권장. -> 서브쿼리의 결과가 출력되지는 않으니 정렬의 기능을 하는 오더바이절은 굳이.. 성능이 떨어짐.
서브쿼리는 갯수 제한 X
★ 단일 행 서브쿼리(=,>,<)에는 단일 행 연산자를 사용하고 다중 행 서브쿼리(IN)에는 다중 행 연산자를 사용한다.
★ 서브쿼리의 결과가 복수일 때는 "=" 말고 "in".
IN (30,40) -> 30, 40 의 결과값 출력
AND 모두(최댓값 40) 보다 큰 값 -> 50,60
<ALL 모두(최솟값 30)보다 작은 값 -> 10,20
ANY 최소값 30보다 큰 값 -> 40,50,60
<ANY 최대값 40보다 작은 값 -> 10,20,30**
널값 출력 X 따로 써줘야함.
int num;
자료형:변수가 담을 자료(데이터)의 형태.
ex.정수형, 실수형, 문자형, 논리형 ect.
primitive type : 기본타입. 자바언어에 내장된 기본유형.
ex. 숫자형, 논리형 boolean-ture/false (switch), 문자형 (문자 하나를 표현) - 문자, 유니코드, 아스키코드 표현가능.
정수형 - byte, short, int(기본타입), long
실수형 - float, double(기본타입).
reference type : 기본타입 외 모든 타입.
상수:데이터를 담을 수 있는 공간.(값 변경 불가) ->final 키워드 사용.
변수명은 대소문자 구분. 같은 클래스 내에서 같은 변수명 선언(재선언)불가.
기본타입으로는 같은 하나의 문자열을 표현할 수 없음.
타입변환(형변환) : 변수나 상수 타입을 다른 타입으로 바꾸는 것.
String s = "Hello World!";
System.out.println(s.substring(0,5)); -> 0번째부터 5번째까지 문자열 출력
=> Hello
int num = 1;
int money = 20000;
System.out.printf("%d. 오늘 점심값 : %d원", num, money); -> %d는 정수형 자리.
=> 1. 오늘 점심값 : 20000원
int num = 1;
int money = 20000;
String won = "원";
System.out.printf("%d. 오늘 점심값 : %d%s", num, money, won); ->%s는 문자형 자리.
=> 1. 오늘 점심값 : 20000원
//읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴하는 클래스.
Scanner s = new Scanner(System.in); -> 스캐너 도구 생성 (메모리상의 주소)
->Scanner: 입력받은 값을 사용할 수 있도록 해주는 도구.
->(System.in)은 키보드로 입력할 수 있도록 해주는 도구.
//입력한 값을 돌려줌.
String s = s.next() -> 다음 토큰을 문자열로 리턴 (공백을 기준으로 분리됨)
int s = s.nextIn() -> 다음 토큰은 INT 타입으로 리턴
s.nextLine() -> 공백이 낀 문자열을 리턴.
★ 리턴하는 값이랑 도구 꼭 일치해야함!
주석처리 단축키 ctrl /
여러줄 주석처리 ctrl shift /
실행 단축키 ctrl F11
변수이름 일괄변경 alt shift r
코드 옮기기 alt 방향키
코드 복사 ctrl alt 방향키
코드 정리 ctrl shift f
자동 완성 ctrl space bar
system.out.println->syso ctrl space bar