본문 바로가기

Programming/Database

데이터베이스 3강

# NOT은 앞에 붙여 씀
  외워야하는 예외 : WHERE commission_pct IS NOT NULL

# 칸 맞춰쓰기 : column 속성명 format a16

# ORDER BY : ASC은 생략 가능한 기본 값
   NULL 값 - 오름차순 : 마지막 표시
                내림차순 : 처음 표시
   ORDER BY 절 : 마지막 실행
                     alias 사용 가능
   WHERE절 : alias 사용 불가

# SELECT절의 2번째를 기준으로 오름차순
   SELECT last_name, 12 * salary annsal
   FROM employees
   ORDER BY 2;

# ORDER BY는 각 속성 별 오름차순, 내림차순을 다르게 할 수 있음
   SELECT last_name, department_id, salary
   FROM employees
   ORDER BY department_id, salary DESC;

# 예제 : 연봉이 120000 이상되는 사원들의 이름 및 연봉을 출력하시오. 
   SELECT last_name, salary * 12
   FROM employees
   WHERE salary * 12 >= 120000;

# 예제 : 사원번호가 176인 사원의 이름과 부서 번호를 출력하시오.
   SELECT last_name, department_id
   FROM employees
   WHERE employee_id = 176;

# 예제 : 연봉이 200000에서 250000의 범위 이외인 사원들의 이름 및 연봉을 출력하시오. 단, 연봉은 AnnSal로 출력하시오.
   SELECT employee_id, 12 * salary "AnnSall"
   FROM employees
   WHERE 12 * salary NOT BETWEEN 200000 AND 250000;

# 예제 : 2003/01/01부터 2005/05/30 사이에 고용된 사원들의 이름, 사번, 고용일자를 출력하시오. 고용일자 순으로 정렬하시오.
   SELECT last_name, employee_id, hire_date
   FROM employees
   WHERE hire_date BETWEEN '03/01/01' AND '05/05/30'
   ORDER BY hire_date DESC;

# 예제 : 20번 및 50번 부서에서 근무하는 모든 사원들의 이름 및 부서 번호를 알파벳순으로 출력하시오.
   SELECT last_name, department_id
   FROM employees
   WHERE department_id IN (20, 50)
   ORDER BY last_name, department_id;

# 예제 : 20번 및 50번 부서에 근무하며, 연봉이 200000 ~ 250000 사이인 사원들의 이름 및 연봉을 출력하시오.
   SELECT last_name, 12 * salary
   FROM employees
   WHERE department_id IN (20, 50) AND 12 * salary BETWEEN 200000 AND 250000;

# 예제 : 2006년에 고용된 모든 사람들의 이름 및 고용일을 조회한다.
   SELECT last_name, hire_date
   FROM employees
   WHERE hire_date LIKE '06%';

# 예제 : 매니저가 없는 사람들의 이름 및 업무를 출력하시오.
   SELECT last_name, job_id
   FROM employees
   WHERE manager_id IS NULL;

# 예제 : 매니저가 있는 사람들의 이름 및 업무, 매니저 번호를 조회한다.
   SELECT last_name, job_id, manager_id
   FROM employees
   WHERE manager_id IS NOT NULL;

# 예제 : 커미션을 받는 모든 사원들의 이름, 연봉 및 커미션을 출력하시오.
   - 연봉을 역순으로 정렬하고, 연봉은 ANNSAL로 출력하시오.
   SELECT last_name, 12 * salary AS ANNSAL, commission_pct
   FROM employees
   WHERE commission_pct IS NOT NULL
   ORDER BY ANNSAL DESC;

# 예제 : 이름의 네 번째 글자가 a인 사원의 이름을 조회하시오.
   SELECT last_name
   FROM employees
   WHERE last_name LIKE '___a%';

# 예제 : 이름에 a 및 e 글자가 있는 사원의 이름을 조회하시오.
   SELECT last_name
   FROM employees
   WHERE last_name LIKE '%a%' AND last_name LIKE '%e%'

# 예제 : 급여가 2500, 3500, 7000이 아니며, 직업이 SA_REP나 ST_CLERK인 사원의 이름과 급여, 직업을 출력하십시오.
   SELECT last_name, 12*salary AS ANNSAL, job_id
   FROM employees
   WHERE 12*salary NOT IN (2000, 3500, 7000) AND job_id IN ('SA_REP', 'ST_CLERK')

# Cartesian Product(카티션 곱)
   사원의 이름과 부서의 이름을 출력하시오.
   SELECT last_name, department_name, employees.department_id
   FROM employees, departments
   WHERE employees.department_id = departments.department_id;

   너무 많은 행을 생성하므로 결과가 유용하지 않음
   조인 : 두 개의 테이블을 합침 (역정규화)

   SELECT list 절 : 테이블 모두 가진 속성은 .으로 반드시 테이블명을 명시해야함.

   (테이블 수 - 1) 개 만큼의 조인조건이 WHERE 절에 작성되어야 함

# 등가 조인 : Primary Key =(참조) Foreign Key
   현업에서 Primary Key, Foreign Key는 동일한 이름으로 설정함

# 현업에서는 FROM절에 alias를 주어 조인시 접두어를 요약해서 작성함.
   Full name과 alias 중 하나만 섞지 않고 작성

   SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id
   FROM employees e, departments d
   WHERE e.department_id = d.department_id

# 예제 : 모든 사원들의 이름, 부서 이름 및 부서 번호를 출력하시오.
   SELECT e.last_name, d.department_name, e.department_id
   FROM employees e, departments d
   WHERE e.department_id = d.department_id;

# 예제 : 30번 부서 내의 모든 직업들을 유일한 값으로 출력하시오.
   90번 부서 또한 포함이고, 직업을 오름차순으로 출력하시오.
   SELECT DISTINCT department_id,  job_id
   FROM employees
   WHERE department_id IN (30, 90)
   ORDER BY job_id

# 예제 : 커미션을 받는 모든 사람들의 이름, 부서명, 지역ID 및 도시 명을 출력하시오.
   SELECT e.last_name, d.department_name, l.location_id, l.city
   FROM employees e, departments d, locations l
   WHERE commission_pct IS NOT NULL
   AND e.department_id = d.department_id
   AND d.location_id = l.location_id;

'Programming > Database' 카테고리의 다른 글

데이터베이스 6강  (0) 2020.03.10
데이터베이스 5강  (0) 2020.03.10
데이터베이스 4강  (0) 2020.03.10
데이터베이스 2강  (0) 2020.03.10
데이터베이스 1강  (0) 2020.03.10