# fullstack/database/p240610/quiz-240610.sql
# DB 선택
use employees;
[문제 1] 공백이 있는 부서명 조회
공백을 찾아주는 instr () 함수 사용 !
select dept_name, instr(dept_name, ' ')
from departments;
사진처럼 0이 나왔다는 건 공백이 없다는 뜻 !
근데 공백이 없는 것을 찾고 싶으니까 조건을 주면 된다 !
select dept_name, instr(dept_name, ' ')
from departments
where instr(dept_name, ' ') > 0;
9, 6, 8 은 공백의 위치를 반환한 것 !
근데 그냥 where 절에 컬럼이 오는 것과 함수를 사용하는 것을 생각을 해야되는데
시간이 걸릴 수 있기 때문에 웬만하면 함수를 잘 안쓴다.. !
다른 방법으로 사용하게 된다면 ! like 연산자로 와일드 카드 사용하자
select dept_name, instr(dept_name, ' ')
from departments
where dept_name like '% %';
[과제 1] 남자 사원의 수
# <방법 1> 깔끔 ! 권장 !
select count(emp_no) as '남자 사원 수'
from employees
where gender like 'M';
select gender, count(*)
from employees
group by gender;
# <방법 2> 그룹화하기
select gender, count(*) as '남자 사원 수'
from employees
group by gender
having gender like 'M';
[과제 2] d005 부서의 현재 근무하고 있는 사원 수
select count(emp_no) as 'd005 부서의 사원 수'
from dept_emp
where dept_no like 'd005' and to_date like '9999-01-01';
[과제 3] 부서별 현재 재직자 수
부서별로니까 그룹화 해줘야 함 !
having 으로 to_date 줄 수 없음, 그룹화한 데이터 값이 아니기 때문 !
select dept_no as '부서', count(emp_no) as '재직자 수'
from dept_emp
where to_date = '9999-01-01'
group by dept_no;
[과제 4] 각 부서의 과거 매니저 수
select dept_no as '부서', count(emp_no) as '과거 매니저 수'
from dept_manager
where to_date <> '9999-01-01' # < 도 가능
group by dept_no;
[과제 5] 직책에 공백이 있는 데이터의 길이를 구하시오.
(단, 중복을 제거하여 하나의 데이터만 조회)
# <방법 1>
select distinct title as '직책', length(title) as '직책 문자열 길이'
from titles
where instr(title, ' ');
# <방법 2>
select title, length(title) as '직책 문자열 길이'
from titles
group by title
having title like '% %';
[과제 6] 부서명, 부서번호, 부서 총 (현재) 직원수 조회
select dept_name as '부서명', dept.dept_no as '부서번호', count(emp_no) as '부서 총 직원수'
from departments dt, dept_emp dept
where dt.dept_no = dept.dept_no and dept.to_date = '9999-01-01'
group by dt.dept_no;
[과제 7] 현재 연봉이 전체 현재 평균 연봉 보다 많이 받는 직원들의 사원 번호, 현재 연봉 조회
1) 전체 직원 연봉 평균(현재 연봉)
# 1) 전체 직원 연봉 평균(현재 연봉)
select avg(salary)
from salaries
where to_date like '9999-01-01';
2) 사번, 현재 연봉 조회
# 2) 사번, 현재 연봉 조회
select emp_no, salary
from salaries
where to_date = '9999-01-01';
3) 최종
# 3) 최종
select emp_no, salary
from salaries
where to_date like '9999-01-01'
and salary > (select avg(salary) from salaries where to_date like '9999-01-01');
[과제 8] 1960년 이후 태어난 사원들의 사원 번호, 부서 번호 조회
1) 1960년 이후 태어난 사원들의 사원 번호
# 1) 1960년 이후 태어난 사원들의 사원 번호
select emp_no
from employees
where birth_date > '1960-01-01';
2) 사원 번호, 부서 번호 조회
# 2) 사원 번호, 부서 번호 조회
select emp_no, dept_no
from dept_emp;
'Others > 데이터베이스' 카테고리의 다른 글
006. 관계형 데이터베이스 SQL 및 모델링 - 1편 DB, DBMS, RDBMS (1) | 2024.06.16 |
---|---|
[MySQL] 자료형 CHAR 와 VARCHAR 의 차이점 (0) | 2024.06.13 |
옵티마이저 (0) | 2024.06.12 |
MySQL 설치 방법 (1) | 2024.06.10 |
[MySQL] csv 파일이란 ? (0) | 2024.06.10 |