[광주직업학교] 데이터베이스 서브쿼리 - 복습3-2
ㅇ 본 수업은 "스마트인재개발원"에서 진행되었습니다.
#스마트인재개발원 #국비지원코딩교육 #데이터베이스 #실습문제 #27번~31번 #조인조건 #그룹함수 #서브쿼리 #데이터베이스끝
<목차>
ㅇ 본 문제는 [광주직업학교] "스마트인재개발원"에서 제공되었습니다.(1)
ㅇ 실습문제 27
ㅇ 실습문제 28
ㅇ 실습문제 29
ㅇ 실습문제 30
ㅇ 실습문제 31
- 안 좋은 습관 : 에러 메세지 그냥 넘기는 것
- 에러 메세지에 답이 있어!! (자바 디버깅 할 때 처럼)
- 공통적인 에러메세지가 싱글로우 어쩌고~ 서브쿼리에 더 많은 행이 떨어진다 ㅋㅋ
ㅇ 실습문제 27
SELECT employee_id, last_name FROM employees WHERE department_id IN ( SELECT department_id FROM employees WHERE last_name LIKE '%u%' )
-
정답은 소문자만 찾음 : 90명
-
알파벳 u로 치면 대문자도 넣어야 할 듯 해서 나는 이렇게 찾음
SELECT employee_id, last_name FROM employees WHERE department_id IN ( SELECT department_id FROM employees WHERE last_name LIKE '%U%' OR last_name LIKE '%u%' )
- 첫 글자가 U인 사람도 찾아짐: 96명
ㅇ 본 문제는 [광주직업학교] "스마트인재개발원"에서 제공되었습니다.(2)
ㅇ 실습문제 28
- Locations라는 테이블에 city라는 컬럼 존재, 그 안에 seattle이라는 데이터 존재
- e테이블의 d_id는 d테이블의 d_id
d테이블의 location_id는 locations테이블의 location_id - 1 보고싶은 것 : 셀렉트절에 사원이름 디파트먼트네임 로케이션 아이디
2 라스트네임은 임플로이, 디파트먼트네임과 로케이션 아이디 는 디파트먼트테이블
로케이션스테이블 찾아와도 돼 - 이러면 코드 더 쉽게 이해될 수 있긴 해 - 조인으로 풀면
SELECT last_name, department_name, location_id FROM employees e, department d, location l WHERE e.department_id=d.department_id AND d.location_id=l.location_id AND l.city='Seattle' AND e.commission_pct IS NULL
- 우리는 서브쿼리 배웠으니까 서브쿼리 써보자. 굳이 로케이션까지 가진 말자
- 서브퀴리 : 시애틀의 도시번호를 알아내기
SELECT location_id FROM locations WHERE city='Seattle'
SELECT last_name, department_name, location_id FROM employees e, department d WHERE e.department_id=d.department_id AND d.location_id = ( SELECT location_id FROM locations WHERE city='Seattle') AND e.commission_pct IS NULL
- 서브쿼리에 있는 시에틀은 매인쿼리의 테이블에서 가져온 것이 아니니까
조인 접두어 쓸 필요 없어
ㅇ 본 문제는 [광주직업학교] "스마트인재개발원"에서 제공되었습니다.(3)
ㅇ 실습문제 29
SELECT last_name, hire_date FROM employees WHERE hire_date >ALL (SELECT hire_date FROM employees WHERE last_name = 'Davies' ) ORDER BY hire_date DESC
- WHERE절 쓸 때 지켜야 할 조건
- 문자와 날짜는 작은 따옴표 붙여라
- 테이블의 데이터의 포맷을 그대로 따라가라 : D만 대문자. Davies
- 1 현재 찾아야 할 값 : 사원의 이름 입사일 => 매인쿼리 셀렉트
2 모르는 것 : 데이비스 입사일
3 사원들의 입사일과 비교 - 그냥 > 이거쓰면 단항연산자야 >all을 써야 해
- 이름에서 = 안쓰고 like 써도 되긴 한데,
굳이 이미 풀 네임을 아는데 데이비스 들어가 있는지 다 검색할 필요 없지
ㅇ 본 문제는 [광주직업학교] "스마트인재개발원"에서 제공되었습니다.(4)
ㅇ 실습문제 30
SELECT last_name, salary FROM employees WHERE manager_id IN (SELECT employee_id FROM employees WHERE last_name = 'King' )
- =를 쓰면
- 서브쿼리 결과가 한 행 이상일 수 있으니 IN을 사용해야 함
- King을 매니저로 두고 있는 = 킹의 사원번호를 매니저 아이디로 두고 있는
- 매니저아아디와 임플로이 아이디는 컬럼이름은 달라.
하지만 데이터 타입이 같아서 서브쿼리로 연산자 사용 가능
ㅇ 본 문제는 [광주직업학교] "스마트인재개발원"에서 제공되었습니다.(5)
ㅇ 실습문제 31
SELECT EMPLOYEE_ID, LAST_NAME, SALARY FROM EMPLOYEES WHERE DEPARTMENT_ID IN ( SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE LAST_NAME LIKE '%u%' AND SALARY >= ( SELECT AVG(SALARY) FROM EMPLOYEES));
- 1 회사평균보다 많은 사원 -> 2 그 사원들 중에 이름에 u가 있는 사원 -> 3 그 사원들이 근무하는 부서 -> 4 그 부서에 근무하는 부서의 사원들의 사번, 이름, 급여 찾기
- 1 평균보다 많은 사원
salary > (SELECT AVG(salary) FROM employees)
- 1 평균보다 많고, 2 이름에 u 있는 사원들, 3 근무하는 부서
SELECT department_id FROM employees WHERE last_name LIKE '%u%' AND salary > (SELECT AVG(salary) FROM employees)
- 코드 해석할 때 안쪽의 서브쿼리를 먼저 읽는다고 생각해
서브쿼리는 값의 역할을 하는거니까, 그 값을 근거로 웨어절이 실행되는 거니까. - 디스팅트를쓰면 성능이 떨어져
멀티플 컬럼... 그룹화 작업이 발생해서
테이블의 원래 데이터 값이 아니라 변경시키는 거니까
(뭔가 변경되는 작업들이 성능이 떨어뜨린다)
ㅇ 본 문제는 [광주직업학교] "스마트인재개발원"에서 제공되었습니다.(6)
Author And Source
이 문제에 관하여([광주직업학교] 데이터베이스 서브쿼리 - 복습3-2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@data_sy/blogsupporters3-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)