백업 이글루

codememo.egloos.com

포토로그



mysql 예제 쿼리 풀이 코드메모

/*사원 테이블의 모든 레코드 조회*/
select * from emp;


/*사원 이름과 입사일 조회*/
select ename, hiredate from emp;

/*
부서 번호와 사원 이름을 조회*/
select ename, deptno from emp;
/*
직책(Job) 목록*/
select DISTINCT job from emp;

/*
총 사원수 */
select count(*) from emp;



/*WHERE 조건
부서 번호가 10인 부서에 근무하는 사원*/
select * from emp where deptno =10;
/*
급여가 2500이상 되는 사원*/
select ename, sal from emp where sal >= 2500;

/*
이름이 'KING'인 사원*/
select * from emp where ename = 'KING';

/*
사원 이름이 'S'로 시작하는 사원의 사원 번호와 이름*/
select ename, empno from emp where ename like 'S%'; 

/*
사원 이름에 T가 포함된 사원의 사원 번호와 이름*/
select ename, empno from emp where ename like '%T%';

/*
커미션이 300, 500, 1400인 사원의 사원 번호, 이름, 커미션 */
select empno, ename, comm from emp where comm = 300 or comm = 500 or comm =1400; 
/*
급여가 1200에서 3500 사이인 사원의 사원 번호, 이름, 급여*/
select empno, ename, sal from emp where 1200 <= sal and sal <=3500; 
SELECT EMPNO,ENAME,SAL
FROM EMP
WHERE SAL BETWEEN 1200 AND 3500;

/*
직급이 매니저이고 부서 번호가 30번인 부서에 근무하는 사원의 이름, 사원 번호, 직급, 부서 번호*/
select ename, deptno, empno, job from emp
where job = 'manager'
and deptno = 30;

/*
부서 번호가 30인 부서에 근무하지 않는 사원의 사원 번호, 이름, 부서 번호 */
select empno, ename, deptno 
from emp
where deptno !=30;

SELECT EMPNO,ENAME,DEPTNO
FROM EMP
WHERE NOT DEPTNO = 30;
/*
커미션이 300, 500, 1400이 모두 아닌 사원의 사원 번호, 이름, 커미션*/
select empno, ename, comm from emp where comm != 300 and comm !=500 and comm !=1400;


/*
이름에 'S'가 포함되지 않는 사원의 사원 번호, 이름*/
select ename, empno from emp where not ename like '%S%';

/*
급여가 1200 미만이거나 3700을 초과하는 사원의 사원 번호, 이름, 급여*/
select empno, ename, sal from emp where sal <1200 or 3700<sal;

/*
매니저가 NULL인 사원의 이름과 직급*/
select ename, job from emp where mgr IS NULL;
/*
GROUP BY 구문
부서별 평균 급여*/
select deptno, avg(sal) 
from emp 
group by deptno;

/*
부서별 총 사원 수와 커미션을 받는 사원들의 총수*/
select count(*), count(comm), deptno from emp group by deptno;

/*
부서별 최대 급여와 최소 급여*/
select min(sal), max(sal), deptno from emp group by deptno;
/*
부서별로 평균 급여 (단, 평균 급여가 2000 미만인 부서는 제외)*/
select avg(sal), deptno from emp  group by deptno having 2000 <= avg(sal);
/*GROUP BY 구문을 사용하면서 조건을 주기 위해서는 대신 HAVING 구문을 사용한다. HAVING 구문에서는 그룹화의 기준이 되는 칼럼과 그룹함수만이 사용 할 수 있다는 점에 주의한다.*/
/*
급여가 1000 이상인 사원을 대상으로 부서별 평균 급여(단, 평균 급여가 2000 이만인 부서는 제외)*/
select avg(sal), deptno from emp where sal> 1000 group by deptno having 2000<avg(sal);
/*
ORDER BY 구문
ORDER BY 정렬의 기준이 되는 칼럼 ASC 또는 DESC;

/*사원 번호, 이름, 급여를 급여가 높은 순으로 정렬(단, 급여가 같을 경우 이름 철자가 빠른 사원이 먼저 나오도록 한다)*/
select empno, ename, sal from emp order by sal desc, ENAME ASC;
/*
조인
카테시안 곱*/
SELECT EMP.ENAME,DEPT.DNAME
FROM EMP,DEPT;

/*조인의 조건이 없는 단순 조인이다. 앞으로 나오는 조인 예제는 이러한 단순 조인 결과를 머릿속에 그리면서 실습해야 한다. 총 56개의 행은 EMP 테이블에 존재하는 14개의 레코드와 DEPT 테이블에 존재하는 4개의 레코드의 곱으로 생성된다. 조회 대상이 되는 각 테이블의 칼럼이 명백히 어느 테이블의 칼럼인지가 확실하다면 EMP.ENAME을 ENAME처럼 테이블 이름을 생략할 수 있다.*/
/*
사원 이름과 부서 이름*/
select ename, dname from emp, dept where emp.deptno = dept.deptno;

SELECT E.ENAME,D.DNAME
FROM EMP E,DEPT D
WHERE E.DEPTNO = D.DEPTNO;
/*
사원 이름과 사원의 관리자 이름*/
SELECT E.ENAME, M.ENAME 
FROM EMP E INNER JOIN EMP M ON E.MGR = M.EMPNO;

/*
이름, 급여, 급여 등급*/
select e.ename, e.sal, s.grade from emp e, salgrade s where e.SAL >= s.LOSAL AND E.SAL <= S.HISAL;
/*
이름, 부서 이름, 급여 등급*/
select e.ename, d.dname, s.grade from emp e, salgrade s, dept d where e.deptno = d.DEPTNO and e.sal >= s.Losal and e.sal <=s.hisal;

/*
사원 이름과 사원의 관리자 이름*/
select e.ename, m.ename from emp e, emp m where e.mgr = m.empno;
/*
이름, 부서 이름(단, 사원 테이블에 부서 번호가 40에 속한 사원이 없지만 부서 번호 40인 부서 이름도 출력되도록 한다)*/
select e.ename, d.dname  FROM DEPT D LEFT JOIN EMP E ON D.DEPTNO = E.DEPTNO;
/*위와 같은 조인을 외부OUTER조인이라 한다. A LEFT JOIN B는 조인 조건에 만족하지 못하더라도 왼쪽 테이블 A의 행을 나타내고 싶을 때 사용한다.*/

/*
이름, 부서 번호, 부서 이름*/
select e.ename, e.deptno, d.dname from emp e, dept d where e.deptno = d.deptno;

/*
부서 번호가 30인 부서에 근무하는 사원의 이름, 직급, 부서 번호, 부서 위치 */
select e.ename, e.job, e.deptno, d.loc from emp e, dept d where e.deptno = d.deptno and e.deptno = 30;
/*
커미션을 받는 사원의 이름, 커미션, 부서 이름, 부서 위치*/
select e.ename, e.comm, d.dname, d.loc from emp e, dept d where e.comm is not null and d.deptno = e.deptno and E.COMM <> 0;

/*
DALLAS에 근무하는 사원의 이름, 직급, 부서 번호, 부서 이름*/
select e.ename, e.job, e.deptno, d.dname from emp e, dept d where d.deptno = e.deptno and d.loc = 'Dallas';

/*
이름에 'A'가 들어가는 사원의 이름, 부서 이름*/
select e.ename, d.dname from emp e, dept d where e.deptno = d.deptno and e.ename like '%A%';

/*
이름, 직급, 급여, 급여 등급*/
select e.ename, e.job, e.sal, s.grade from emp e, salgrade s where e.SAL >= s.LOSAL AND E.SAL <= S.HISAL;
/*
ALLEN과 같은 부서에 근무하는 사원의 이름, 부서 번호*/
SELECT C.ENAME,C.DEPTNO
FROM EMP E INNER JOIN EMP C ON E.DEPTNO = C.DEPTNO 
WHERE E.EMPNO <> C.EMPNO
AND E.ENAME = 'ALLEN'
ORDER BY C.ENAME;
/*쿼리 분석할 것 */

/*


서브쿼리
부서 번호가 10인 부서에서 근무하는 사원의 이름과 부서 이름*/
select e.ename, d.dname from emp e, dept d where d.deptno = e.deptno and e.deptno = 10;


/*
평균 급여보다 더 많은 급여를 받은 사원의 사원 번호, 이름, 급여*/
select empno, ename, sal from emp where sal > (select avg(sal) from emp) order by sal desc;

/*
부서 번호가 10인 부서에 근무하는 사원 중에서 최대 급여를 받는 사원과 동일한 급여를 받는 사원의 사원 번호와 이름*/
select empno, ename from emp where sal = (select max(sal) from emp where deptno =10);

덧글

댓글 입력 영역