복수행 함수

고라파덕·2021년 4월 8일
0

SQL

목록 보기
2/2
post-thumbnail

복수행 함수(그룹함수)

복수행 함수(그룹함수) = 행이 여러개일때 행이 하나 나온다.

COUNT(컬럼명) = 행의 갯수

SELECT COUNT(ENAME) FROM EMP;
SELECT COUNT(*) FROM EMP;

SUM(컬럼명) = 해당 컬럼의 합

SELECT SUM(SAL) 급여합 FROM EMP;

AVG(컬럼명) = 해당 컬럼의 평균

SELECT AVG(SAL) 급여평균 FROM EMP;

MIN(컬럼명),MAX(컬럼명) = 해당 컬럼의 최소,최대값

SELECT MIN(SAL) 최소급여, MAX(SAL) 최대급여 FROM EMP;

GROUP BY

GROUP BY = 컬럼을 기준으로 그룹으로 묶음

- 형식                       
	             < 실행순서 >
SELECT 컬럼명,..       --------  5
FROM 테이블명          --------  1
WHERE 조건절           --------  2
GROUP BY 컬럼명        --------  3
HAVING 조건절          --------  4
ORDER BY 기준컬럼      --------  6

서브쿼리

하나의 SQL문장절에 포함된 또 다른 SELECT문장. 두번 질의를 해야 얻을 수 있는 결과를 한번의 질의로 해결이 가능한 쿼리

1.단일행 서브쿼리
서브쿼리의 실행결과가 하나의 행만을 리턴해 주는 쿼리. 즉 하나의 데이터만을 리턴
연산자 : =,<>,>,>=,<,<=

)
사원번호가 7369인 사원과 같은 직업을 갖는 사원들의 사원번호,이름,직업을 출력
SELECT EMPNO,ENAME,JOB FROM EMP
WHERE JOB = (SELECT JOB FROM EMP WHERE EMPNO=7369);2)
사원급여가 평균급여보다 많은 사원들의 사원번호와 급여를 조회
SELECT EMPNO,SAL FROM EMP
WHERE SAL>(SELECT AVG(SAL) FROM EMP);3)
'ALLEN'과 같은 부서에 근무하는 사원들의 모든 정보를 조회
SELECT * FROM EMP
WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME='ALLEN');

복수행 서브쿼리

서브쿼리의 실행결과가 여러개의 행을 리턴
연산자 : IN,ANY,ALL 사용가능하고 =,<>,>,>=,<,<=는 사용할 수 없다.

1)
부서번호가 10번인 사원들의 급여와 같은 급여를 받는 사원들의 이름과 급여를 출력하시오.
SELECT ENAME,SAL FROM EMP
WHERE SAL IN(SELECT SAL FROM EMP WHERE DEPTNO=10);2)
부서번호가 10번인 사원의 급여와 같거나 많은 급여를 받는 사원의 이름과 급여를 출력하시오.
SELECT ENAME,SAL FROM EMP
WHERE SAL >= ANY(SELECT SAL FROM EMP WHERE DEPTNO=10);3) 30번 부서의 가장 많은 급여보다 더 많은 급여를 받는 사원번호,급여를 조회하시오.
SELECT EMPNO,SAL FROM EMP
WHERE SAL > ALL(SELECT SAL FROM EMP WHERE DEPTNO=30);4) 10번 부서사원들중에 20번 부서의 사원과 같은 직업을 갖는 / 사원의 사원번호,직업,입사일을 조회하시오.
SELECT EMPNO,JOB,HIREDATE FROM EMP
WHERE DEPTNO=10 AND JOB IN (SELECT JOB FROM EMP WHERE DEPTNO=20);5) 급여가 30번 부서의 최저급여보다 낮은 사원의 사원번호,이름,급여를 조회하시오.(ALL연산자사용)
--MIN함수쓰는게 더 좋다
SELECT EMPNO,ENAME,SAL FROM EMP
WHERE SAL < ALL(SELECT SAL FROM EMP WHERE DEPTNO=30);

0개의 댓글