본문 바로가기

분류 전체보기

(518)
work 03 -- 문제1) EMPLOYEES 테이블과 DEPARTMENTS 테이블을 -- Cartesian Product(모든 가능한 행들의 Join)하여 Cross Join -- 사원번호,이름,업무,부서번호,부서명,근무지를 출력하여라. SELECT e.employee_id, e.first_name, e.department_id, d.department_id, d.department_name, d.location_id FROM employees e, departments d; SELECT e.employee_id, e.first_name, e.department_id, d.department_id, d.department_name, d.location_id FROM employees e CROSS JOIN depar..
work 02 -- 문제1) EMPLOYEES 테이블에서 King의 정보를 소문자로 검색하고 -- 사원번호, 성명, 담당업무(소문자로),부서번호를 출력하라. SELECT employee_id, last_name, lower(job_id), job_id, department_id FROM employees WHERE LOWER(last_name) = 'king'; -- 문제2) EMPLOYEES 테이블에서 King의 정보를 대문자로 검색하고 -- 사원번호, 성명, 담당업무(대문자로),부서번호를 출력하라. SELECT employee_id, last_name, UPPER(job_id), job_id, department_id FROM employees WHERE upper(last_name) = 'KING'; -- 문제3..
work 01 -- 문제1) EMPLOYEES 테이블에서 급여가 3000이상인 -- 사원의 정보를 사원번호, 이름, 담당업무, 급여를 출력하라. SELECT employee_id, first_name, job_id, salary FROM employees WHERE salary >= 3000; -- 문제2) EMPLOYEES 테이블에서 담당 (업무가 Manager)인 -- 사원의 정보를 사원번호, 성명, 담당업무, 급여, 부서번호를 출력하라. (Manager == ST_MAN) SELECT employee_id, first_name, job_id, salary, department_id FROM employees WHERE job_id = 'ST_MAN' AND salary >= 7000; SELECT employee..
헷깔리는 함수문제~ --문제3) EMPLOYEES 테이블에서 100번 부서의 최소 급여보다 최소 급여가 --많은 다른 모든 부서를 출력하라 ->>부서출력 : 먼저 부서를 그룹으로 묶어주고 HAVING절에 서브쿼리 추가 그룹명과 그룹함수만 출력 가능, WHERE절 추가하여 IS NOT NULL 추가가능 SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 100); --문제4) 업무별로 최소 급여를 받는 사원의 정보를 사원번호,이름,업무,부서번호 --를 출력하여라. 단 업무별로 정렬하여라. ->> '업무별로 최소급..
순위함수 SELECT 절 SELECT 컬럼, 함수, 그룹함수, SUB QUERY, OVER() PARTITION BY FROM 테이블, SUB QUERY [ WHERE ] 조건 IN AND ALL ANY LIKE 123456 순서 매겨짐 (코드) SELECT first_name, salary, RANK()OVER(ORDER BY salary DESC) AS RANK, DENSE_RANK()OVER(ORDER BY salary DESC) AS DENSE_RANK, ROW_NUMBER()OVER(ORDER BY salary DESC) AS ROW_NUMBER FROM employees; --ROWNUM (1,2,3,4,5,6,7,.... ) SELECT ROWNUM, employee_id, first_name FRO..
OVER(), PARTITION BY --COUNT(*)OVER() : 전체 행수를 반환 --COUNT(*)OVER(PARTITION BY 컬럼): 컬럼을 그룹으로 나누어 ROW의 수를 반환한다 --OVER() 함수 SELECT 절에서만 사용 GROUP BY를 보강하기 위해 사용 SELECT department_id, COUNT(*)OVER() FROM employees; SELECT department_id, COUNT(DISTINCT department_id)OVER() FROM employees; --PARTITION BY == GROUP BY 파티션으로 묶어 그룹함수로 확인할 수 있게 만듬 SELECT department_id, first_name, salary, COUNT(*)OVER(PARTITION BY department_id..
집합 합집합 : UNION 교집합 : INTERSECT 차집합 : MINUS 합집합 : UNION -- UNION SELECT job_id FROM employees WHERE job_id IN('AD_VP','FI_ACCOUNT') UNION --합집합 SELECT job_id FROM jobs WHERE job_id IN('AD_VP', 'FI_ACCOUNT'); 교집합 : INTERSECT --INTERSECT SELECT employee_id FROM employees INTERSECT --교집합 -->매니저ID만 나옴 SELECT manager_id FROM employees; --교집합은 JOIN과 동일 --JOIN SELECT DISTINCT b.employee_id --> DISTINCT로 중복..
특수 Query -- CASE DECODE = SWITCH --1번 SELECT employee_id, first_name, phone_number, CASE SUBSTR(phone_number, 1, 3) WHEN '515' THEN '서울' WHEN '590' THEN '부산' WHEN '659' THEN '광주' WHEN '603' THEN '대전' ELSE '기타' END AS "지역" FROM employees; --2번 SELECT employee_id, first_name, phone_number, CASE WHEN SUBSTR(phone_number,1,3) = '515' THEN '서울' WHEN SUBSTR(phone_number,1,3) = '590' THEN '부산' WHEN SUBSTR(phone..