본문 바로가기

데이터베이스

(30)
서브쿼리 예제 --부서명이 'IT'인 부서에 근무하는 사원들의 사번, 이름을 출력하시오 결과) 103 Alexander 104 Bruce 105 David 106 Valli 107 Diana --답. 한 테이블에 자료 있으니 굳이 JOIN 안써도 된다 SELECT employee_id, first_name FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name='IT'); --내가 푼 것 SELECT e.employee_id, first_name FROM employees e JOIN departments d ON (e.department_id = d.department_id) WHERE depart..
서브쿼리(SubQuery) (2) --(2) INLINE VIEW : FROM절에서 사용하는 서브쿼리 --사원의 사번, 이름, 급여를 출력하시오. 많은 급여를 받는 사원부터 출력한다. SELECT employee_id, first_name, salary FROM employees ORDER BY salary DESC; --ROWNUM : 행번호, 1부터 시작 가짜컬럼, 오라클에 내장되어있는 컬럼명, 어느 테이블에서든 사용 가능 --사원의 행번호, 사번, 이름, 급여를 출력하시오. SELECT ROWNUM, employee_id, first_name, salary FROM employees; --TOP-N Query --사원의 사번, 이름, 급여를 출력하시오. 많은 급여를 받는 사원 5명만 출력한다. SELECT ROWNUM, employ..
서브쿼리(SubQuery) (1) --SubQuery 절차, 일의 순서 가지고 있음. SELECT SQL 구문에 SELECT 구문이 또 들어가는것 --위치에 따른 분류 (1) SubQuery : WHERE절에서 사용 (2) INLINE VIEW : FROM절에서 사용하는 서브쿼리 (3) Scalar Query : SELECT절에서 사용 --SubQuery 결과행 수에 따른 분류 (1)Single Row SubQuery : main query/OUTER쿼리와 비교 시 일반비교연산자 사용가능(=, ) (서브쿼리 결과가 한개 행만 반환하는 경우) SELECT department_id, MAX(salary), employee_id, first_name FROM employees WHERE salary = (SELECT department_id,..
집합연산자 ※ JOIN은 여러 테이블의 컬럼들을 결합하는 것, 출력할 컬럼의 갯수를 늘릴 수 있음 UNION 합집합과 관련, 여러 테이블의 행들을 결합하는 것, 출력할 행의 갯수를 늘릴 수 있음 ※ 합집합 : UNION, UNION ALL 교집합 : INTERSECT ex) A INTERSECT B 차집합 : MINUS ※ 과거 경력 신입사원은 이거 없을 수도 있다. 직무/부서 변경 시 자료 쌓임 --1 사원의 사번, 이전직무번호를 출력하시오(JOB_HISTROY) --2 사원의 사번, 직무번호를 출력하시오(EMPLOYEES) --1번 SELECT employee_id, job_id FROM job_history --2번 SELECT employee_id, job_id FROM employees --1+2번, SE..
JOIN 예제 1.부서의 부서번호, 부서가 속한 지역의 도시명(city), 국가명(country_name)을 출력하시오 SELECT department_id, city, country_name FROM departments d JOIN locations l ON (d.location_id = l.location_id) JOIN countries c ON (l.country_id = c.country_id); 2. 사원의 사번, 부서번호, 부서명, 직무번호, 직무명을 출력하시오 직무명에 'Manager'를 포함한 사원들만 출력하시오 직무번호순, 부서명으로 오름차순하시오 SELECT employee_id, e.department_id, d.department_name ,e.job_id, job_title FROM empl..
JOIN 조인은 한 테이블의 행을 다른 테이블의 행에 연결하여 두 개 이상의 테이블을 결합하는 연산이다. SELECT employee_id, first_name, department_id FROM employees; --107명 SELECT department_id, department_name FROM departments; --27건 --카티션곱 SELECT * FROM Customer, Orders; 오라클 전용 조인, 우리는 ansi 표준 조인법 쓰는걸 권장 두 테이블을 아무런 조건을 주지 않고 SELECT 시키면 카티션 프로덕트 연산이 나옴. 사번 이름 부서번호 : employees 부서번호, 부서명 : departments 4개의 컬럼이 한 테이블에 존재하는지 다른 테이블에 존재하는지, 다른 테이블에 ..
내장함수(다중행 함수, 그룹화, 정렬하기) 여러 행들을 합쳐서 행수, 합, 평균은 어떠한지 확인, 결과가 한개만 도출됨. --B. 다중행함수(집계함수): COUNT(), SUM(), AVG(), MAX(), MIN() : 테이블의 각 열에 대해 계산을 하는 함수 SELECT COUNT(*) "전체사원수" --107 행수셀 때는 * ,COUNT(commission_pct) "수당받는사원수" --35 ,COUNT(department_id) "부서배치받은사원수" FROM employees; --sum() null을 포함하지 않은 합 null이 아닌 행수를 세고싶으면 null값을 포함하고 있는 컬럼명 쓰기 SELECT SUM(salary) "총급여" --691416 ,AVG(salary) "평균급여" --6461.8317757009345794392523..
내장함수(단일행 함수) ※ 내장함수들 --숫자함수 --문자함수 --날짜함수 --오라클 내장함수 : 오라클은 대소문자 구분안하지만 함수라는걸 보이기 위해 대문자사용 --A. 단일행(SingleRow)함수 : 각 행별로 처리되는 함수 --1. 숫자형함수 : MOD() 나머지값, ROUND() 반올림, TRUNC() 버림(truncate), CEIL() 올림 천장값, FLOOR() 내림/버림 바닥값, ABS 절대값, COS 코싸인값 반환, 특정 컬럼에 대한 반올림이 아니라 1234.567 리터럴에 대한 반올림이 얼마인지 보고싶을 때 SELECT ROUND(1234.567) FROM employees; employees에 나온 사원 수만큼 107번 반복하면서 반올림값 출력(아래 사진) 이건 번거로우니 테스트용도 테이블인 dual 사용..