Structured Query Language
DML : INSERT, DELETE, UPDATE, SELECT
DDL : CREATE, DROP, ALTER, TRUNCATE
DCL : GRANT, REVOKE
TCL : COMMIT, ROLLBACK, SAVEPOINT
INSERT문 구조
INSERT INTO 테이블명 [ (열이름1, 열이름2, ...) ]
VALUES (값1, 값2, ...);
UPDATE문 구조
UPDATE 테이블명 SET
열이름1 = 값1, 열이름2 = 값2,...
[ WHERE 조건식 ];
DELETE문 구조
DELETE FROM 테이블명 [ WHERE 조건식 ];
SELECT문 기본 구조
SELECT 열이름1 [ AS 별칭 ], 열이름2, ....
FROM 테이블명
[ WHERE 조건식 ] ORDER BY 열이름 [ ASC OR DESC ]];
SELECT문을 사용할 때 반드시 먼저 고려해야 할 부분
특정 단어를 포함하는 경우 조건, %: 0개 이상의 문자, _: 1개 이상의 문자
SELECT * FROM student WHERE name LIKE '이_';
SELECT * FROM student WHERE name LIKE '%인';
UNION(중복제거), UNION ALL(중복포함)
/*
전공코드가 202인 학생정보와
부전공코드가 101인 학생정보 한꺼번에 조회
*/
SELECT
studno, name, major1
FROM student WHERE major1 = 202
UNION ALL
SELECT
studno, name, major1
FROM student WHERE major2 = 101; -- 하정환학생 데이터가 두개 조회 됨

/*
전공코드가 202인 학생정보와
부전공코드가 101인 학생정보 한꺼번에 조회
*/
SELECT
studno, name, major1
FROM student WHERE major1 = 202
UNION
SELECT
studno, name, major1
FROM student WHERE major2 = 101;
-- 하정환학생 데이터가 하나로 맨위로 올라와서 조회 됨

NULL
/*
직원의 이름과, 현재급여, 연봉(급여*12+보너스) 조회
*/
SELECT ename, salary, salary*12+bonus FROM emp;
-- 보너스가 null인 경우 연산불가
/*
NULL인 경우 다른 값으로 처리해주는 함수 사용
*/
SELECT ename, salary, salary*12+NVL(bonus,0) FROM emp;
-- 보너스가 null인 경우 0으로 출력
-- NVL(a,b): a가 NULL인 경우 b로 출력
/*
보너스가 없으면(null) 'X’, 있으면 'O'라고 출력
*/
SELECT ename, salary, bonus, NVL2(bonus,'O', 'X') FROM emp;
-- 보너스가 null인 경우 0으로 출력
-- NVL(A, 'B', 'C') A기 NULL인 경우 C 출력 NULL이 아니면 B출력
함수는 사용하는 목적
자주 사용되는 문자열 함수

자주 사용되는 숫자 함수

SELECT SYSDATE FROM dual;
SELECT TRUNC(SYSDATE - TO_DATE('2021-01-01')) FROM dual;
SELECT name, birthday, MONTHS_BETWEEN(SYSDATE, birthday)
FROM student;
SELECT TO_CHAR(SYSDATE, ‘YYYY-MM-DD’) FROM dual;

select to_char(sysdate, 'yyyy"년"mm"월"dd"일" HH24"시"mi"분"ss"초"') from dual;
/*
HH24는 24시 기준으로 표기해주며, HH로 작성할 시 12시 기준으로 출력된다
*/

ROW_NUMBER() : 중복없이 전체 순서 지정
RANK() : 중복 랭킹 제외 후 순서 지정
DENSE_RANK() : 중복 랭킹 하나의 순서로 지정
/* 급여 순으로 랭킹 출력 */
SELECT
salary, ROW_NUMBER() OVER(ORDER BY salary DESC) as rank1,
RANK() OVER(ORDER BY salary DESC) as rank2,
DENSE_RANK() OVER(ORDER BY salary DESC) as rank3
FROM emp;

✓ 데이터의 값이 조건과 일치하는지 그렇지 않은지에 따라 다르게 출력
✓ 프로그래밍 언어에서 IF~ELSE와 같은 구조
✓ SQL문에서 정말 자주 사용되는 함수
DECODE(컬럼명, 조건값, 조건값과 같은 경우, 조건값과 다른 경우)
예제 1) 학생명과 학년이 1학년이면 신입생이라고, 그렇지 않으면 재학생이라고 출력
SELECT name, DECODE(grade, 1, ‘신입생’, ‘재학생’) FROM student;
예제 2) 학생명과 학년이 1학년이면 신입생이라고, 2학년이면 2학년, 3학년이면 3학년, 4학년이면 4학년이라고 출력
select name, grade,
decode(grade, 1, '신입생',
decode(grade, 2, '2학년',
decode(grade, 3, '3학년', '4학년')))
from student;
✓ 특정 조건에 따라 출력할 데이터 설정
✓ 프로그래밍 언어에서 SWITCH 문과 유사한 구조
✓ 비교연산과 같은 조건 사용 가능
CASE 컬럼|데이터
WHEN 조건1 THEN 조건1이 참인 경우 출력값
WHEN 조건2 THEN 조건2가 참인 경우 출력값
...
ELSE 모든 조건이 일치하지 않는 경우 출력값
END
예제 1) 학생명과 학년이 1학년이면 신입생이라고, 2학년이면 2학년, 3학년이면 3학년, 4학년이면 4학년이라고 출력
SELECT name,
CASE grade
WHEN 1 then ‘신입생’ WHEN 2 then ‘2학년’
WHEN 3 then ‘3학년’ ELSE ‘4학년’
END
FROM student;