22.12.20 데이터조작어 DML
--주석
/*
여러 줄 주석
*/
더미 테이블을 이용하기 위해 hr 계정을 이용하자.
SQL> conn system as sysdba
Enter password:
Connected.
SQL> alter user hr account unlock;
User altered.
alter user hr identified by hr;
SQL developer 에서 계정추가 후 사용 가능.

SELECT 컬럼명 FROM 테이블명;
SELECT employee_id, first_name, last_name
FROM employees;
SELECT employee_id, first_name, salary, salary + salary * 0.1
FROM employees;
SELECT first_name AS 이름
FROM employees;
SELEcT first_name "이름"
FROM employees;
SELECT first_name || ' ' || last_name || '''s salary is &' || salary AS 급여내역
FROM employees;
결과
Steven King's salary is &24000
SELECT DISTINCT department_id
FROM employees;
SELECT ROWNUM, employee_id
FROM employees;
결과
SELECT ROWID, employee_id
FROM employees;
결과
SELECT first_name, last_name, job_id
FROM employees
WHERE job_id = 'IT_PROG';
SELECT * FROM employees
WHERE department_id = 90;
SELECT * FROM employees
WHERE salary >= 15000 AND salary <= 20000;
SELECT * FROM employees
WHERE hire_date = '04/01/20';
SELECT * FROM employees
WHERE salary BETWEEN 15000 AND 20000;
SELECT * FROM employees
WHERE hire_date BETWEEN '03/01/01' AND '03/12/31';
SELECT * FROM employees
WHERE manager_id IN (100,101);
SELECT first_name, hire_date
FROM employees
WHERE hire_date LIKE '%03';
//03 앞에 아무거나
SELECT first_name, hire_date
FROM employees
WHERE hire_date LIKE '___03%';
//자릿수 앞에 3개 다음 03으로 시작하고 뒤에는 아무거나
SELECT * FROM employees
WHERE manager_id IS NULL;
SELECT * FROM employees
WHERE manager_id IS NOT NULL;
SELECT * FROM employees
WHERE job_id = 'IT_PROG' OR job_id = 'FI_MGR' AND salary >= 6000;

AND 연산자가 OR보다 연산순서가 빠르기 때문에
salary가 6000이하인 사람들도 출력된다.
이럴때는 ( )를 활용하여 연산순서를 지정해준다.
SELECT * FROM employees
WHERE (job_id = 'IT_PROG' OR job_id = 'FI_MGR') AND salary >= 6000;
원하는 결과 정상 출력.
데이터의 정렬
SELECT 구문의 가장 마지막에 배치된다.
ORDER BY 컬럼명 ASC/DESC
ASC : ascending 오름차순
DESC : descending 내림차순
ASC가 기본이라 생략이 가능하다.
SELECT * FROM employees
WHERE employee_id >= 103
ORDER BY employee_id ASC;

SELECT * FROM employees
WHERE employee_id >= 103
ORDER BY employee_id DESC;

ORDER BY는 별칭사용이 가능하다.
SELECT - 3
FROM - 1
WHERE - 2
ORDER BY - 4
순으로 실행되기 때문에 SELECT 에서 사용한 AS를 ORDER BY에서도 사용가능하다.
SELECT first_name AS 이름 FROM employees
WHERE employee_id >= 103
ORDER BY 이름 ASC;
-- 모든 사원의 사원번호, 이름, 입사일, 급여를 출력
SELECT employee_id, first_name, hire_date, salary
FROM employees;
-- 모든 사원의 이름과 성을 붙여 출력. 별칭은 name
SELECT first_name || ' ' || last_name AS name
FROM employees;
-- 50번 부서 사원의 모든 정보 출력
SELECT * FROM employees
WHERE department_id = 50;
-- 50번 부서 사원의 이름, 부서번호, 직무아이디 출력
SELECT first_name || ' ' || last_name AS name, department_id, job_id
FROM employees
WHERE department_id = 50;
-- 모든 사원의 이름, 급여 그리고 300 인상된 급여를 출력
SELECT first_name || ' ' || last_name AS name, salary , salary + 300
FROM employees;
-- 급여가 10000보다 큰 사원의 이름과 급여 출력
SELECT first_name || ' ' || last_name AS name, salary
FROM employees
WHERE salary >= 10000;
-- 보너스를받는 사원의 이름과 직무, 보너스율 출력
SELECT first_name || ' ' || last_name AS name, job_id,COMMISSION_PCT
FROM employees
WHERE COMMISSION_PCT IS NOT NULL;
-- 2003년도 입사한 사원의 이름과 입사일, 급여 출력. BETWEEN
SELECT first_name || ' ' || last_name AS name, hire_date, salary
FROM employees
WHERE hire_date BETWEEN '03/01/01' AND '03/12/31';
-- 2003년도 입사한 사원의 이름과 입사입, 급여 출력. LIKE
SELECT first_name || ' ' || last_name AS name, hire_date, salary
FROM employees
WHERE hire_date LIKE '03%';
-- 모든 사원의 이름과 급여를 급여가 많은 사원부터 적은 사원순서로 출력
SELECT first_name || ' ' || last_name AS name, salary
FROM employees
ORDER BY salary DESC;
-- 위 질의를 60번 부서의 사원에 대해서만 출력
SELECT first_name || ' ' || last_name AS name, salary
FROM employees
WHERE department_id = 60
ORDER BY salary DESC;
-- 직무 아이디가 IT_PROG이거나 SA_MAN인 사원의 이름과 직무 아이디를 출력
SELECT first_name || ' ' || last_name AS name, job_id
FROM employees
WHERE job_id IN ('IT_PROG','SA_MAN');
-- Steven King 사원의 정보를 "Steven King 사원의 급여는 24000달러 입니다." 출력
SELECT '"' || first_name || ' ' || last_name || ' 사원의 급여는 ' || salary || '달러 입니다."' AS king
FROM employees
WHERE first_name = 'Steven' AND last_name = 'King';
-- 매니저(MAN) 직무에 해당하는 사원의 이름과 직무아이디를 출력
SELECT first_name || ' ' || last_name AS name, job_id
FROM employees
WHERE job_id LIKE '%MAN';
-- 매니저(MAN) 직무에 해당하는 사원의 이름과 직무아이디를 직무아이디 순서대로 출력
SELECT first_name || ' ' || last_name AS name, job_id
FROM employees
WHERE job_id LIKE '%MAN'
ORDER BY job_id;