# 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