
COUNT
SELECT COUNT(department_id)
FROM employees;
DISTINCT
SELECT count(DISTINCT department_id)
FROM employees;
is NULL
SELECT last_name, department_id
FROM employees
WHERE department_id is NULL;
LIKE
SELECT last_name, department_id, salary
FROM employees
WHERE job_id like '%REP%';
GROUP
SELECT job_id,sum(salary), trunc(sum(salary)/count(last_name))
FROM employees
WHERE job_id like '%REP%'
GROUP by job_id;
SELECT job_id, sum(salary), AVG(salary)
FROM employees
WHERE job_id like '%REP%'
GROUP by job_id;
HAVING
SELECT job_id, sum(salary), AVG(salary)
FROM employees
WHERE job_id like '%REP%'
GROUP by job_id
HAVING sum(salary) > 7000;
ROWNUM
SELECT ROWNUM, salary
FROM employees;
ORDER BY
SELECT ROWNUM, salary
FROM employees
WHERE ROWNUM < 5
ORDER BY salary;
ORDER BY ASC
SELECT employee_id, last_name, salary*12 as "ANNSAL"
FROM employees
WHERE department_id = 60
ORDER BY ANNSAL DESC;
ORDER BY DESC
SELECT employee_id, last_name, salary*12 as "ANNSAL"
FROM employees
WHERE department_id = 60
ORDER BY ANNSAL DESC;
하나의 SQL문안에 포함되어 있는 또 다른 SQL문
서브 쿼리
SELECT last_name, hire_date
FROM employees
WHERE hire_date = (SELECT MIN(hire_date) FROM employees);
WHERE 서브쿼리
SELECT employee_id, last_name, salary
FROM employees
WHERE salary > (SELECT salary
FROM employees
WHERE last_name = 'Abel');
FROM 서브쿼리
<부서별로 가장 적은 임금>
SELECT department_id, Min(salary)
FROM employees
GROUP BY department_id;
ORDER BY랑 ROWNUM
SELECT last_name, salary
FROM (SELECT last_name, salary
FROM employees
ORDER BY salary ASC)
WHERE ROWNUM < 2;
IN
SELECT employee_id, last_name, salary
FROM employees
WHERE salary IN (SELECT salary
FROM employees
WHERE last_name = 'King');
ANY
SELECT employee_id, last_name, salary
FROM employees
WHERE salary > ANY(SELECT salary
FROM employees
WHERE last_name = 'King');
ALL
SELECT employee_id, last_name, salary
FROM employees
WHERE salary > ALL(SELECT salary
FROM employees
WHERE last_name = 'King');
ORDER BY HAVING
SELECT department_id, min(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) > (SELECT MIN(salary)
FROM employees
where department_id = 50);
SELECT job_id, AVG(salary)
FROM employees
GROUP BY job_id
HAVING AVG(salary) = (SELECT MIN(AVG(salary))
FROM employees
GROUP BY job_id);
ASC and DESC
SELECT employee_id, last_name, salary
FROM employees
WHERE department_id = 60
ORDER BY salary ASC, employee_id desc;
2개 이상의 테이블을 열결 또는 결합하여 데이터를 출력하는 것
( 2개 이상의 테이블을 하나의 테이블처럼 보이게 출력하기 위해 사용 )
NATURAL JOIN
SELECT department_id, department_name, Location_id, city
FROM departments
NATURAL JOIN locations;
SELECT department_id, department_name, Location_id, city
FROM departments
NATURAL JOIN locations
WHERE department_id IN (20,50);
USING
SELECT employee_id, last_name, location_id, department_id
FROM employees
JOIN departments
USING(department_id);
SELECT city, department_name
FROM locations
JOIN departments
USING (location_id);
ALIAS
<알리아스로 주고 조건을 쓸떄 알리아스를 쓰면 안된다>
SELECT L.city, D.department_name
FROM locations L
JOIN departments D
USING (location_id)
WHERE location_id=1400;
(X) WHERE L.location_id=1400;
SELECT first_name, department_name, E.manager_id
FROM employees E
JOIN departments D
USING (department_id)
WHERE department_id = 50;
ON
SELECT employee_id, E.department_id, location_id
FROM employees E
JOIN departments D
ON E.department_id = D.department_id;
3-way JOIN
SELECT employee_id, city, department_name
FROM employees E
JOIN departments D
ON E.department_id = D.department_id
JOIN locations L
ON D.location_id = L.location_id;
INNER JOIN + ON + WHERE
SELECT E.employee_id, E.last_name, E.department_id, D.location_id
FROM employees E
JOIN departments D
ON E.department_id = D.department_id
WHERE E.employee_id = D.manager_id;
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
JOIN departments d
ON E.department_id = D.department_id
WHERE e.last_name = 'Matos';
ON 대신 WHERE 추가 조건은 AND
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
JOIN departments d
ON E.department_id = D.department_id
WHERE e.last_name = 'Matos';
==============같은 의미 ============================
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND e.last_name = 'Matos';
(3-way-join)ON 대신 WHERE 추가 조건은 AND
SELECT e.last_name, d.department_name, l.city
FROM employees e
JOIN departments d
ON e.department_id = d.department_id
JOIN locations l
ON d.location_id = l.location_id;
==============================================
SELECT e.last_name, d.department_name, l.city
FROM employees e, departments d, locations l
WHERE e.department_id = d.department_id
AND d.location_id = l.location_id;