본문 바로가기

오답노트/DBMS

MySQL 연습문제(WHERE)

[WHERE]

 

문1. 사원 테이블의 모든 레코드를 조회하시오.
select *
from emp 

 

 

문2. 사원명과 입사일을 조회하시오.
select ENAME,HIREDATE
from emp 

 

 

문3. 사원번호와 이름을 조회하시오.
select DEPTNO , ENAME
from emp e

 

 

문4. 사원테이블에 있는 직책의 목록을 조회하시오.
SELECT DISTINCT JOB
FROM EMP

 

=> DISTINCT: 중복제거 

 

 

문5. 총 사원수를 구하시오 
SELECT COUNT(EMPNO)
FROM EMP

 

=> COUNT(컬럼명): 중복없는 NULL이 아닌 레코드수/ COUNT(*): 중복없는 NULL을 포함한 레코드 수 

 

 

문7. 부서번호가 10인 사원을 구하시오 
select *
from emp e
where DEPTNO = 10 

 

 

문8. 월급여가 2500이상 되는 사원을 조회하시오.
select *
from emp e
where SAL >= 2500 

 

 

문9. 이름이 'KING'인 사원을 조회하시오. 
select *
from emp e
where ENAME = 'KING' 

 

=> ORACLE과는 달리 MYSQL은 대소문자를 구별한다. 그래서 'king'이라고 입력하면 오류가 발생한다.

 

 

문10. 사원들 중 이름이 S로 시작하는 사원의 사원번호와 이름을 조회하시오. 
select DEPTNO, ENAME
from emp e
where ENAME like 'S%' 

 

 

문11. 커미션이 300, 500, 1400인 사원의 사번, 이름, 커미션을 조회하시오.
select EMPNO , ENAME , COMM
from emp e
where COMM IN(300,500,1400) 

 

 

문12. 월급여가 1200에서 3500 사이의 사원의 사번, 이름, 월급여를 조회하시오 .
select EMPNO , ENAME , SAL
from emp e
where SAL between 1200 and 3500 

 

 

문13. 직급이 매니저이고 부서번호가 30번인 사원의 이름, 사번, 직급, 부서번호를 조회하시오. 
select ENAME , EMPNO , JOB , DEPTNO
from emp e
where JOB = 'MANAGER'
and DEPTNO = 30 

 

 

문14. 부서번호가 30이 아닌 사원의 사번,이름,부서번호를 조회하시오.
select EMPNO , ENAME, DEPTNO
from emp e
where not DEPTNO = 30 

 

=> WHERE NOT 컬럼 = 값 // WHERE 컬럼 != 값 // WHERE 컬럼 <> 값 모두 가능하다.

 

 

문15. 커미션이 300, 500, 1400이 모두 아닌 사원의 사번, 이름, 커미션을 조회하시오.

 

select EMPNO, ENAME, COMM
from emp e
where not COMM IN(300,500,1400) 

 

 

문16. 이름에 S가 포함되지 않는 사원의 사번, 이름을 조회하시오. 
select EMPNO , ENAME
from emp e
where not ENAME LIKE '%S%' 

 

 

문17. 이름에 S가 포함되지 않는 사원의 사번, 이름을 조회하시오. 
select EMPNO , ENAME
from emp e
where not ENAME LIKE '%S%' 

 

 

문18. 급여가 1200보다 미만이거나 3700 초과하는 사원의 사번, 이름, 월급여를 조회하시오. 
select EMPNO , ENAME , SAL
from emp e
where not SAL between 1200 and 3700 

 

 

문19. 직속상사가 NULL인 사원의 이름과 직급을 조회하시오. 
select ENAME, JOB
from emp e
where MGR is null 

 

=> IS NULL, IS NOT NULL 을 사용한다.

 

 

[GROUP BY]

 

문1. 부서별 평균 월 급여를 구하라.
select DEPTNO, AVG(SAL)
from emp e
group by DEPTNO 

 

 

문2. 부서별 전체 사원수와 커미션을 받는 사원들의 수를 구하시오. 
select DEPTNO , COUNT(*), COUNT(COMM)
from EMP
group by DEPTNO 

 

 

문3. 부서별 최대 급여와 최소 급여를 구하는 쿼리
select DEPTNO , MAX(SAL), MIN(SAL)
from emp e
group by DEPTNO 

 

 

문4. 부서별로 급여 평균을 구하라. (단, 부서별 급여 평균이 2000이상만)
select DEPTNO , AVG(SAL)
from EMP
group by DEPTNO
having AVG(SAL) >= 2000 

 

=> GROUP BY의 조건을 HAVING으로 처리해준다.

 

 

문5. 월급여가 1000이상인 사원만을 대상으로 부서별로 월급여 평균을 구하라.
      단, 평균값이 2000이상인 레코드만 구하라.
select DEPTNO, AVG(SAL)
from EMP
where SAL >=1000
group by DEPTNO
having AVG(SAL) >= 2000 

 

=> WHERE: 테이블에서 데이터를 가져올 때 특정 조건에 부합하는 레코드만 가져올 때 

     HAVING: GROUP BY 구문을 사용하여 구한 레코드 중 원하는 조건에 맞는 레코드만 가져올 때 

 

 

[ORDER BY]

 

문1. 급여가 높은 순으로 조회하되 급여가 같을 경우 이름의 철자가 빠른 사원순으로 사번, 이름, 월급여를 조회하시오.
select EMPNO,ENAME, SAL
from emp e
order by SAL desc, ENAME asc 

 

=> ASC: 오름차순(생략가능) / DESC: 내림차순

 

 

 

*Reference

 

https://junetudie.tistory.com/11

 

mysql 샘플 테이블 + 쿼리 연습 문제

http://java-school.net/jdbc/SQL-SELECT-Statement CREATE TABLE DEPT (     DEPTNO DECIMAL(2),     DNAME VARCHAR(14),     LOC VARCHAR(13),     CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO) );..

junetudie.tistory.com