250111 - 기본 문제 풀이

김소희·2025년 1월 11일

MySQL

목록 보기
14/17
#1. 사원 테이블의 모든 레코드를 조회하시오.
SHOW TABLES;

SELECT * FROM dept;
SELECT * FROM emp;
SELECT * FROM salgrade;

#2. 사원명과 입사일을 조회하시오.
SELECT ENAME, HIREDATE FROM emp;

#3. 사원번호와 이름을 조회하시오.
SELECT EMPNO, ENAME FROM emp;

#4. 사원테이블에 있는 직책의 목록을 조회하시오. (hint : distinct, group by)
SELECT DISTINCT JOB FROM emp;

#5. 총 사원수를 구하시오. (hint : count)
SELECT COUNT(*) AS '사원수' FROM emp ;

#6. 부서번호가 10인 사원을 조회하시오.
SELECT *
FROM emp
WHERE DEPTNO = 10;

#7. 월급여가 2500이상 되는 사원을 조회하시오.
SELECT *
FROM emp
WHERE SAL >= 2500;

#8. 이름이 'KING'인 사원을 조회하시오.
SELECT *
FROM EMP
WHERE ENAME = 'KING'; 

#9. 사원들 중 이름이 S로 시작하는 사원의 사원번호와 이름을 조회하시오. (hint : like)
SELECT EMPNO, ENAME
FROM emp
WHERE ENAME LIKE 's%';

#10. 사원 이름에 T가 포함된 사원의 사원번호와 이름을 조회하시오. (hint : like)
SELECT EMPNO, ENAME
FROM emp
WHERE ENAME LIKE '%T%';

#11. 커미션이 300, 500, 1400 인 사원의 사번,이름,커미션을 조회하시오. (hint : OR, in )
SELECT EMPNO, ENAME, COMM
FROM emp
WHERE COMM = 300 OR COMM = 500 OR COMM = 1400;

#12. 월급여가 1200 에서 3500 사이의 사원의 사번,이름,월급여를 조회하시오. (hint : AND, between)
SELECT EMPNO, ENAME, sal
FROM emp
WHERE sal BETWEEN 1200 AND 3500;

#13. 직급이 매니저이고 부서번호가 30번인 사원의 이름,사번,직급,부서번호를 조회하시오. 
SELECT ename, empno, job, deptno
FROM emp
WHERE job = 'manager' AND deptno = 30;

#14. 부서번호가 30인 아닌 사원의 사번,이름,부서번호를 조회하시오. (not)
SELECT empno, ename, deptno
FROM emp
WHERE NOT deptno =  30;

#15. 커미션이 300, 500, 1400 이 모두 아닌 사원의 사번,이름,커미션을 조회하시오. (hint : not in)
SELECT EMPNO, ENAME, COMM
FROM emp
WHERE comm NOT IN (300, 500, 1400);

#16. 이름에 S가 포함되지 않는 사원의 사번,이름을 조회하시오. (hint : not like)
SELECT EMPNO, ENAME
FROM emp
WHERE ename NOT LIKE '%s%';

#17. 급여가 1200보다 미만이거나 3700 초과하는 사원의 사번,이름,월급여를 조회하시오. (hint : not, between)
SELECT empno, ename, sal
FROM emp
WHERE sal < 1200 OR sal > 3700;

#18. 직속상사가 NULL 인 사원의 이름과 직급을 조회하시오. (hint : is null, is not null)
SELECT ename, job
FROM emp
WHERE mgr IS NULL;

#19. 부서별 평균월급여를 구하는 쿼리 (hint : group by, avg())
SELECT deptno,ROUND(AVG(sal)) AS '부서별 평균월급여'
FROM emp
GROUP BY deptno;

SELECT *
FROM EMP

SELECT IFNULL(comm, '없다')
FROM emp;

#20. 부서별 전체 사원수와 커미션을 받는 사원들의 수를 구하는 쿼리 (hint : group by, count())
SELECT COUNT(*) AS '부서별 사원수', COUNT(comm) AS '커미션 받는 사원수'
FROM emp
GROUP BY deptno;

#21. 부서별 최대 급여와 최소 급여를 구하는 쿼리 (hint : group by, min(), max())
SELECT MAX(sal), MIN(sal)
FROM emp
GROUP BY deptno;

#22. 부서별로 급여 평균 (단, 부서별 급여 평균이 2000 이상만) (hint : group by, having)
SELECT deptno,ROUND(AVG(sal)) AS '급여 평균'
FROM emp
GROUP BY deptno
HAVING AVG(sal) >= 2000;

#23. 월급여가 1000 이상인 사원만을 대상으로 부서별로 월급여 평균을 구하라.
#단, 평균값이 2000 이상인 레코드만 구하라. (hint : group by, having)
SELECT deptno,ROUND(AVG(sal)) AS '급여 평균'
FROM emp
WHERE sal >= 1000
GROUP BY deptno
HAVING ROUND(AVG(sal)) >= 2000;

#24. 사원명과 부서명을 조회하시오. (hint : inner join)
SELECT * FROM dept;
SELECT * FROM emp;
SELECT * FROM salgrade;

SELECT ename, dname
FROM emp AS e
JOIN dept AS d
ON e.deptno = d.deptno;


#25. 이름,월급여,월급여등급을 조회하시오. (hint : inner join, between)
SELECT ename, sal, grade
FROM emp AS e
JOIN salgrade AS s
ON e.sal BETWEEN s.losal AND s.hisal;

#26. 이름,부서명,월급여등급을 조회하시오. 
SELECT ename, dname, grade
FROM emp AS e
JOIN salgrade AS s
ON e.sal BETWEEN s.losal AND s.hisal
JOIN dept AS d
ON e.deptno = d.deptno;

#27. 이름,직속상사이름을 조회하시오. (hint : self join
SELECT e1.ename AS '이름' , e2.ename AS '직속상사이름'
FROM emp e1
JOIN emp e2
ON e2.empno = e1.mgr;

#28. 이름,직속상사이름을 조회하시오.
#(단 직속 상사가 없는 사람도 직속상사 결과가 null값으로 나와야 함) (hint : outer join)
## 외부OUTER 조인. A LEFT JOIN B는 조인 조건에 만족하지 못하더라도
## 왼쪽 테이블 A의 행을 나타내고 싶을 때 사용한다.
## 반대로 A RIGHT JOIN B는 조인 조건에 만족하지 못하더라도
## 오른쪽 테이블 B의 행을 나타내고 싶을 때
SELECT e1.ename AS '이름' , e2.ename AS '직속상사이름'
FROM emp e1
LEFT OUTER JOIN emp e2
ON e2.empno = e1.mgr;

0개의 댓글