select * from s_emp
select * from s_emp
문자 출력select chr(65) from dual; // 영어 'A' 날짜 출력SELECT SYSDATE FROM DUAL; // 오늘 날짜 말일 구하기SELECT TO_DATE('19/05/01')-1 FROM DUAL; // 익월에서 하루 빼면 월 반올림SELECT ROUND(SYSDATE,'MONTH') FROM DUAL; (오늘 4/16일 때) SELECT ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'),1)-1 FROM DUAL; TRUNC - 버림 4/1
날짜-> 문자SELECT TO_CHAR(SYSDATE, 'yyyy/MM/dd') FROM DUAL; update시 select 먼저!!!퀴즈 ) 박구곤이라는 사람의 mailid를 null로 변경하시오--update s_emp set mailid = null count(*) vs count(컬럼)시 - null값 고려select count(*) from s_emp; --e_emp 테이블의 행의 개수 : 25 GROUP BY - 부서별로 그룹화직책이 사원인 사람들의 평균연봉을 부서별로 구하고 연봉이 높은 순으로 정렬합니다!!!!!!!
sql 할때 꼭 한두개 정도 평균 확인 해 볼 필요가 있다! Q. 각 부서별 평균 급여를 계산해서 보여주시오
Q. 각 부서별로 직책이 사원인 직원들의 평균 급여를 계산해서 보여주시오
그룹화 한 경우에는 그룹함수와 group by 에 지정된 컬럼만 사용가능
Q. 각 지역 별(region_id)로 몇개의 부서가 있는지를 나타내시오
Q. 각 부서별(dept_id)로 평균 급여(avg(salary))를 구하되 평균 급여가 2000 이상(avg(salary)>=2000)인 부서만 나타내시오
직책을 두개 이상 가지고 있는 그룹 평균 연봉을 보여줌
Q. 각 직책별(title)로 급여의 총합(sum(salary))을 구하되 직책이 부장인 사람은 제외하시오,-- 단, 급여 총합이 8000만원 이상인 직책만 나타내며, 급여 총합에 대한 오름차순으로 정렬하시오
Q. 각 부서별로 직책이 사원인 직원들에 대해서만 평균 급여를 구하시오
Q. 각 부서내에서(dept_id) 각 직책별(title)로 몇명의 인원(count(*))이 있는지 나타내시오
Q. 각 부서내(dept_id)에서 몇명(count(*))의 직원이 근무하는지를 나타내시오
Q. 각 부서별(dept_id)로 급여의 최소값(min(salary))과 최대값(max(salary))을 나타내시오-- 단, 최소값과 최대값이 같은 부서((min(salary))=(max(salary))는 출력하지 마시오. GROUP BY & HAVING ※ 작성 순서(숫자: 실행순서) 5: SELECT 컬럼명, AS 별칭, 계산식, 함수식 - 원하는 컬럼 값만 가져옴 1: FROM 참조할 테이블명 2: WHERE 컬럼명 | 함수식 비교 연산자 비교값 3: GROUP BY 그룹을 묶을 컬럼명 4: HAVING 그룹 함수식 비교 연산자 비교값 5: ORDER BY 컬럼명 | 별칭 | 컬럼순법 정렬방식 [NULLS FIRSH | LAST]; [GROUP BY 컬럼명 | 함수식] 여러개의 값을 묶어서 하나로 처리할 목적으로 사용함 그룹으로 묶은 값에 대해서 SELECT절에서 그룹 함수를 사용함 SELECT DEPT_CODE, SUM(SALARY) FROM EMPLOYEE; >> 에러 발생 그룹 함수는 단 한개의 결과 값만 산출하므로 그룹이 여러개일 경우 오류 발생 - 여러개의 결과 값을 산출하기 위해 그룹 함수가 적용된 그룹의 기준을 GROUP BY절에 기술하여 사용
부서코드, 그룹별 급여 합계, 그룹별 급여 평균(정수처리), 인원 수 조회 후 부서코드 순으로 정렬 SELECT DEPT_CODE 부서코드, SUM(SALARY) 합계, FLOOR(AVG(SALARY)) 평균, COUNT(*) 인원 수 GROUP BY DEPT_CODE >> 그룹처리 ORDER BY DEPT_CODE; >> 부서코드 순으로 정렬 - 부서코드와 부서별 보너스 받는 사원 수 조회 후 부서코드 순으로 정렬
- 직원 테이블에서 직급 코드별, 보너스를 받는 사원의 수를 조회하여 직급 코드순 오름차순 정렬 단, 보너스 받는 사원이 해당 직급코드에 없다면 조회하지 X
- 성별과 성별별 급여 평균(정수 처리), 급여 합계, 인원 수 조회 후 인원 수 내림차순 정렬
- 부서별로 같은 직급인 사원의 급여 합계를 조회하고 부서 코드 순으로 정렬
[HAVING] HAVING절: 그룹 함수로 구해올 그룹에 대해 조건을 설정할 때 사용 HAVING 컬럼명 | 함수식 비교 연산자 비교값 - 급여 3,000,000 이상인 직원들의 부서 그룹별 급여 평균 조회(부서 코드 순 정렬)
- 부서 그룹별 급여 평균이 3,000,000 이상인 그룹 조회(부서 코드순 정렬) ;
- 부서별 그룹의 급여 합계가 9백만원을 초과하는 부서코드와 급여 합계 조회(부서 코드순 정렬)
※참고 - 급여 합계가 가장 많은 부서의 부서 코드와 부서 합계를 구하세요. (서브쿼리 이용)
[집계함수 (ROLLUP, CUBE] 그룹별 산출한 결과 값의 집계를 계산하는 함수 - 직급 코드별 급여 합계와 마지막 행에 전체 급여 총합 조회 (직급 코드순 정렬)
ROLLUP과 CUBE를 사용했을 때 같은 결과가 출력된다. ROLLUP과 CUBE의 차이점은? ROLLUP 함수 - 그룹별로 중간 집계 처리를 하는 함수 - GROUP BY절에서만 사용하는 함수 - 그룹별로 묶여진 값에 대한 중간 집계와 총 집계를 구할 때 사용 - 그룹 함수로 계산된 결과 값들에 대한 총 집계가 자동으로 추가 * 인자로 전달받은 그룹 중 '가장 먼저' 지정한 그룹별 합계와 총 합계를 구하는 함수 - 부서 코드마다 직급 코드별 급여의 합, 부서별 급여의 합, 총합 조회(부서 코드순 정렬)
CUBE 함수 * 그룹으로 지정된 모든 그룹에 대한 집계와 총 합계를 구하는 함수
GROUPING 함수 - ROLLUP이나 CUBE에 의한 산출물이 인자로 전달 받은 컬럼 집합의 산출물이면 0을 반환하고 아니면 1을 반환하는 함수
SET OPERATION - 여러가지 조건이 있을 때 그에 해당하는 여러개의 결과 값을 결합시키고 싶을 때 사용 UNION은 OR 같은 개념(합집합) INTERSECT는 AND 같은 개념(교집합) UNION ALL은 OR 결과 값에서 AND 결과값이 더해진 것 (합집함 + 교집함) MINUS는 차집함 UNION - 여러개의 쿼리 결과를 하나로 합치는 연산자. 중복된 영역을 제외하여 하나로 합친다.
INTERSECT - 여러개의 SELECT한 결과에서 공통 부분만 결과로 추출(교집합)
UNION ALL - 여러개의 쿼리 결과를 하나로 합치는 연산자 - UINON과의 차이점은 중복 영역을 모두 포함시키는 것(합집함 + 교집함)
MINUS - 선행 SELECT 결과에서 다음 SELECT 결과와 겹치는 부분을 제외한 나머지 부분만 추출(차집합) - 부서 코드 D5 중 급여가 300만을 초과하는 직원 제외
GROUPING SETS - 그룹별로 처리된 여러개 SELECT문을 하나로 합칠 때 사용 - SET OPERATION를 사용한 결과와 동일 |