[광주직업학교] 스마트인재개발원에서 배운 데이터베이스 - 복습3-1
ㅇ 본 수업은 "스마트인재개발원"에서 진행되었습니다.
#스마트인재개발원 #국비지원코딩교육 #데이터베이스 #실습문제 #23번~26번 #조인조건 #그룹함수 #카운트 #서브쿼리
<목차>
ㅇ 본 문제는 [광주직업학교] "스마트인재개발원"에서 제공되었습니다.(1)
ㅇ 실습문제 23
ㅇ 실습문제 24
ㅇ 실습문제 25
ㅇ 실습문제 26
ㅇ 실습문제 23
SELECT manager_id, MIN(salary) FROM employees WHERE manager_id IS NOT NULL GROUP BY manager_id HAVING MIN(salary)>=5000 ORDER BY MIN(salary) DESC
-
결과
-
각 조건 파악
- 매니저 없는 사람 제외 -> 일반조건
- 최소 급여 5000미만 제외 -> 그룹조건
- 급여 기준 역순으로 조회
-
매니저의 사원 부분 예시를 들어 확인 : 103번에게 관리받는 사원
- 최소 급여는 4200
- 즉, 이 경우는 제외
-
where절에 salary가 5000보다 크다 쓴 사람 있어
- 먼저 웨어절에서 급여 5000 미만인 애들 다 제외시켜 버리는 sql문이 되어, 결괏값이 달라질 수 있음
- 두 번째 최소 급여가 5000을 넘기는 애들은 살아남아! (5000미만인 사람을 먼저 제외했으므로)
-
오더바이에 샐러리 내림차순 쓴 사람 있어 - 나 ㅋㅋㅋ
- select 리스트절에 명시가 된 애들을 정렬하는 거야
- 이미 min(salary)로 값 변형시키니까 salary라는 컬럼은 나오지 않아.
- 즉 order by 절에는 salary 쓸 수 없어.
ㅇ 본 문제는 [광주직업학교] "스마트인재개발원"에서 제공되었습니다.(2)
ㅇ 실습문제 24
SELECT d.department_name, d.location_id, COUNT(employee_id), AVG(salary) FROM departments d, employees e WHERE d.department_id=e.department_id GROUP BY department_name, location_id ORDER BY location_id
- 결과
- 각 조건 파악
- 각 부서별 사원 총 수 -> 카운트
- 각 부서별 평균 급여 -> 에버리지샐러리
- 부서명은 d테이블, 사원수나 평균급여는 e테이블 -> 조인
- 항상 조인조건 까먹지 말 것!
- WHERE d.department_id=e.department_id
- 안 쓰면 카테시간 곱으로 만들어져
- 질문 : 조인 쓰고 나서 그룹함수 사용할 때 어떤 테이블 사용할 건지 생각할 필요 없나??
- 답변 : employee랑 salary는 e테이블에만 있으니까 지금은 괜찮아
만약 양쪽 테이블에 다 있다면 꼭 명시해줘야겠지?!!
- 답변 : employee랑 salary는 e테이블에만 있으니까 지금은 괜찮아
- 만드는 순서 다시 한번 정리하면
1 셀렉트 리스트 : 부서이름, 부서위치, 사원의 총 수-카운트임플로이, 평균급어-에버리지샐러리
2 프럼절 : 앞의 2개는 디파트먼트테이블 , 뒤의 2개는 임플로이테이블이 필요해 => 조인
조인을 쓰니까 조인조건이 필요해
3 웨어절 : 이큐조인
4 셀렉트리스트절에 그룹함수가 사용되었으니까 그룹화 시켜줘야지
그룹화가 사용되지 않은 모든 컬럼들은 그룹화 해주기 - 프럼절에서 알리아스 썼으면 다른 곳에 다
사용할 수 있어
ㅇ 본 문제는 [광주직업학교] "스마트인재개발원"에서 제공되었습니다.(3)
ㅇ 이제부터는 서브쿼리 문제
ㅇ 서브쿼리 때 고려해야 할 점
- 1 내가 뭘 모르는지
- 2 누가 받는지
- 3 어떤 연산자를 사용할지
ㅇ 실습문제 25
: Zlotkey와 동일한 부서에 근무하는 다른 모든 사원들의 사번 및 고용번호 날짜 출력
오답 : '다른' 모든 사원들이니까 질로키를 제외하는 조건절 필요
SELECT employee_id, hire_date FROM employees WHERE department_id = ( SELECT department_id FROM employees WHERE last_name = 'Zlotkey' )
정답
SELECT employee_id, hire_date FROM employees WHERE department_id IN ( SELECT department_id FROM employees WHERE last_name = 'Zlotkey' ) AND last_name != 'Zlotkey'
정답 수정
SELECT employee_id, hire_date FROM employees WHERE department_id IN ( SELECT department_id FROM employees WHERE last_name = 'Zlotkey' ) AND last_name not in 'Zlotkey'
- 질로키가 여러 명일 수 있으니 단항연산자인 = 가 아니라 IN을 써줘야 해
(여기서는 우연히 1명이라서, 오류가 나지 않았어)
ㅇ 본 문제는 [광주직업학교] "스마트인재개발원"에서 제공되었습니다.(4)
ㅇ 실습문제 26
SELECT employee_id, last_name FROM employees WHERE salary > ( SELECT AVG(salary) FROM employees )
- 각 조건 파악
- 출력하고 싶은 것 : 사번, 이름 => 메인쿼리 셀렉트 절
- 모르는 것 : 평균 급여 => 서브쿼리
- 비교 : 급여 > 평균 급여
- ALL 쓰신 분들 있어 - 그룹바이절이 없으니까 필요 없어~
ㅇ 본 문제는 [광주직업학교] "스마트인재개발원"에서 제공되었습니다.(5)
Author And Source
이 문제에 관하여([광주직업학교] 스마트인재개발원에서 배운 데이터베이스 - 복습3-1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@data_sy/blogsupporters3-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)