DDL CREATE, ALTER, DROP
DQL SELECT
DML INSERT, DELETE, UPDATE
DCL GRANT, REVOKE
-- 주석 [SQL 공통]
/*
SELECT 컬럼명1, 컬럼명2, 모든컬럼(*) FROM 테이블 WHERE 조건
INSERT INTO 테이블(컬럼명1, 컬럼명2, ...) VALUES (컬럼값1, 컬럼값2, ...)
UPDATE 테이블 SET 컬럼1=변경값, 컬럼2=변경값, ....., WHERE 조건
DELETE FROM 테이블 WHERE 조건
*/
SELECT
SELECT * FROM employees;
-- Database에서 한글 사용방법 : 그냥 사용, " "
-- 별칭 사용 : 컬럼명 별칭
-- " " 은 별칭할때 사용
SELECT employee_id "사번", first_name "이름" FROM employees;
-- 컬럼 합치기
-- Oracle 전용 : ||
SELECT last_name || ' ' || first_name as "Name" FROM employees;
-- 컬럼 생성
SELECT 'No Column', last_name, first_name FROM employees;
-- 컬럼 연산(숫자)
SELECT salary+100 FROM employees;
-- 컬럼 연산(날짜)
SELECT hire_date "입사일", hire_date+1 "수정" FROM employees;
-- NULL 값
-- nvl : NULL값을 다른 값으로 대체
SELECT nvl(commission_pct, 0) FROM employees;
-- 행조건 AND, OR
SELECT * FROM employees WHERE salary > 10000 AND (department_id = 90 OR department_id = 100);
--예제 : 입사일자가 92년 1월 1일 이후, 연봉이 100,000이상으로 검색되는 사람의 [이름, 연봉]
SELECT first_name || ' ' || last_name as "Name", salary*12 "연봉" FROM employees
WHERE hire_date >= '92/01/01' AND salary*12 >= 100000;
-- 행조건으로 NULL 값 찾기
SELECT * FROM employees WHERE commission_pct IS NULL;
SELECT * FROM employees WHERE commission_pct IS NOT NULL;
-- 문제1. 1999년도에 입사한 사람을 찾으시오
SELECT * FROM employees WHERE '99/01/01' <= hire_date AND hire_date <= '99/12/31';
--LIKE
--1. n을 포함하는 last_name
SELECT * FROM employees WHERE last_name LIKE '%n%';
--2. 첫번째 글자는 아무것, 두번째는 l, 그 뒤로 n을 포함하는 last_name;
SELECT * FROM employees WHERE last_name LIKE '_l%n%';
--정렬
--ASC(오름차순, A-Z, 기본), DESC(내림차순, Z-A)
SELECT * FROM employees ORDER BY first_name DESC;
--예제 1. 월급이 10000 이상, phone_number가 011로 시작, hire_date가 97로 시작
SELECT * FROM employees
WHERE salary > 10000
AND phone_number LIKE '011%'
AND hire_date LIKE '97%'
ORDER BY first_name DESC;
--예제 2. 급여가 가장 큰 순서부터 정렬
SELECT * FROM employees
ORDER BY salary DESC;
--SQL 함수(숫자, 문자, 날짜) → 형변환 가능
--1. 숫자
SELECT commission_pct,
round(commission_pct, 1), -- 소수점 2번째자리, 반올림
ceil(commission_pct), -- 무조건 올림
trunc(commission_pct), -- 무조건 버림
to_number('10'), -- 숫자로 형변환
'10' -- 문자 10
FROM employees
WHERE commission_pct IS NOT NULL;
--2. 문자
SELECT last_name, salary,
last_name || ' ' || first_name AS Name, -- 문자열 합치기
substr(last_name, 1, 3), -- 문자열 자르기(문자열, 시작위치, 자를 갯수)
replace(last_name, 'n', 'N'), -- 문자열 찾아서 바꾸기(문자열, 바꾸기 전, 바꾼 후)
instr(last_name, 'n'), -- 문자열의 위치 찾기(문자열, 찾을 문자)
length(last_name), -- 문자열 길이
-- DECODE(VALUE, IF1, THEN1, IF2, THEN2..., DEFAULT)
decode(salary, 24000, salary*0.1, 20000, salary*0.2, 15000, salary*0.3, salary*0.5)
FROM employees;
--예제 1. substr을 써서 97년도 입사자
SELECT * FROM employees
WHERE substr(hire_date, 1, 2) = '97';
--예제 2. employees 테이블 hire_date를 표기방식을 년/월/일 → 97년 10월 30일
SELECT hire_date,
substr(hire_date, 1, 2) || '년 ' || substr(hire_date, 4, 2) || '월 ' || substr(hire_date, 7, 2) || '일' AS "가공후"
FROM employees
WHERE substr(hire_date, 1, 2) = '97';
--예제 3.
SELECT job_id, decode(job_id, 'AC_ACCOUNT', '회계', 'AC_MGR', '관리자', '직업없음')
FROM jobs;
--날짜
SELECT sysdate, -- 오늘 날짜 출력
hire_date,
add_months(hire_date, 1), -- 달 증가
sysdate - hire_date, -- 근무 일수
to_char(ceil((sysdate - hire_date)/365)) || '년', -- 날짜 - 날짜 = 날수
sysdate - 6, -- 날짜 - 숫자 = 날짜
months_between(sysdate, hire_date)/12, -- 달수차
to_date('2008/09/01') -- 날짜 형변환
FROM employees;
'DATABASE > ORACLE' 카테고리의 다른 글
엑셀(.xls) 데이터 가져오기 (0) | 2009.02.16 |
---|---|
Oracle 9i 이상에서 관리자 계정을 잊어먹었을 때... (0) | 2008.12.11 |
[PL/SQL] (0) | 2008.09.24 |
rollup cube (0) | 2008.09.19 |
오라클 함수 (0) | 2008.09.01 |