데이터 정의어 :
DDL 테이블이나 관계의 구조를 생성하는 데 사용하며
CREATE ALTER DROP 문 등이 있다
데이터 조작어 :
DML 테이블에 데이터를 검색 삽입 수정 삭제하는 데 사용하며
SELECT INSERT DELETE UPDATE 문 등이 있다
여기서 SELECT 문은 특별히 질의어 query라고 부른다
데이터 제어어 :
DCL 데이터의 사용 권한을 관리하는 데 사용하며 GRANT REVOKE 문 등이 있다
1 FROM
2 ON
3 JOIN
4 WHERE
5 GROUP BY
6 WITH CUBE 또는 WITH ROLLUP
7 HAVING
8 SELECT
9 DISTINCT
10 ORDER BY
11 TOP
SELECT col1, col2, ....
FROM table_name;
중복을 배제하고 고유값만을 출력하고자 할 때 사용 ( SELECT와 같이 사용 )
SELECT DISTINCT col1, col2, ...
FROM table_name;
조건을 걸어 검색하고자 할 때 사용
SELECT col1, col2, ...
FROM table
WHERE condition;
복합 연산자
SELECT col1, col2, ...
FROM table
WHERE condition1 and condition2;
SELECT col1, col2, ....
FROM table
WHERE condition1 or condition2;
SELECT col1, col2, ...
FROM table
WHERE NOT condition;
결과를 오름차순이나 내림차순으로 정렬
SELECT col1, col2, ...
FROM table
ORDER BY col1 ASC|DESC;
SELECT col1, col2, ...
FROM table
ORDER BY FIELD (col1, order1, order2, ...);
출력 결과의 갯수를 제한
SELECT * FROM table LIMIT 3;
SELECT * FROM table LIMIT 2, 3;
SELECT * FROM table LIMIT 0, 4;
값이 NULL인 값을 검색
SELECT col1, col2, ...
FROM table
WHERE col_name IS NOT NULL;
SELECT col1, col2, ...
FROM table
WHERE col_name IS NULL;
특정 패턴을 탐색
SELECT col1, col2, ...
FROM table
WHERE col_name LIKE pattern;
% : 0개 문자 혹은 여러 개의 문자를 의미 ('%hanmail.net' : 한메일로 끝나는 모든 계정들)
_ : 특정 위치의 1개의 문자 일치 ('해%':두번째글자에 구 가 들어가는것을 포함한 모든 문자열)
+ : 문자를 연결 ('국어' + '수학' = '국어수학')
[ ] : 1개의 문자와 일치 ('[0-5]%':0-5 사이 숫자로 시작하는 문자열)
[^] : 1개의 문자와 불일치 ('[0-5]%':0-5 사이 숫자로 시작하지 않는 문자열)
WHERE 절 내 여러 값을 설정하고 할 때 사용
SELECT col
FROM table
WHERE col_name IN (val1, val2, ...);
WHERE 절 내 검색 조건으로 범위를 지정하고자 할 때 사용
SELECT col1
FROM table
WHERE col_name BETWEEN val1 AND val2;
두 개나 그 이상의 테이블의 행을 서로 결합하고자 할 때
INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 이 존재
SELECT col1
FROM table1 INNER JOIN table2
ON table1.col = table2.col;
SELECT col1
FROM table1 LEFT INNER JOIN table2
ON table1.col = table2.col;
SELECT col1
FROM table1 RIGHT JOIN table2
ON table1.col = table2.col;
SELECT col1
FROM table1 FULL OUTER JOIN table2
ON table1.col = table2.col;
SELECT의 컬럼 리스트를 기준으로 두 개 이상의 질의 결과를 하나의 테이블로 합치고자 할 때
SELECT col FROM table1
UNION
SELECT col FROM table2;
UNION은 디폴트로 중복값을 제거함, 제거하고 싶지 않을 때는 UNION ALL을 사용해야 한다.
최소값 , 최대값 , 갯수 , 평균 , 합계
SELECT MIN (col) FROM table;
SELECT MAX (col) FROM table;
SELECT COUNT (col) FROM table;
SELECT AVG (col) FROM table;
SELECT SUM (col) FROM table;
집계함수와 함께 사용되어, 결과를 지정한 칼럼에 따라 그룹으로 묶고자 할 때
SELECT col1
FROM table
WHERE condition
GROUP BY col_name;
WHERE 조건을 걸 수 없는 집계함수에 조건을 걸고자 할 때 사용
SELECT col1
FROM table
WHERE condition
GROUP BY col_name
HAVING condition;
여러 문자열을 하나로 합치고자 할 때 사용
SELECT CONCAT(str1, str2, str3, ...);
ROUND는 반올림, TRUNC는 버림
SELECT ROUND|TRUNC (val, digit)
FROM table
if문 또는 switch문처럼 사용됨
SELECT employee_id
, first_name
, job_id
, CASE WHEN job_id = 13 THEN 'CLERK'
WHEN job_id = 14 THEN 'MANAGER'
ELSE 'N/A'
END AS [job_title]
FROM employees
WHERe department_id IN (1, 3)
// like if
SELECT employee_id
, first_name
, CASE job_id
WHEN 13 THEN 'CLERK'
WHEN 14 THEN 'MANAGER'
ELSE 'N/A'
END AS [job_title]
FROM employees
WHERE department_id = 3
// like switch
SELECT employee_id
, first_name
, job_id
, CASE WHEN department_id = 3 AND job_id = 13 THEN 'CLERK'
WHEN department_id = 3 AND job_id = 14 THEN 'MANAGER'
END AS [job_title]
FROM employees
WHERE department_id IN (1, 3)
// 조건 여러개
SELECT employee_id
, first_name
, job_id
, salary
FROM employees
WHERE department_id IN (1, 3)
AND (CASE WHEN salary >= 4000 THEN 1
WHEN salary >= 3000 THEN 2
WHEN salary >= 2000 THEN 3
END) = 1
//where절에 사용
SELECT employee_id
, first_name
, department_id
, salary
, CASE department_id
WHEN 1 THEN
CASE WHEN salary >= 4000 THEN '1등급'
WHEN salary >= 3000 THEN '2등급'
WHEN salary >= 2000 THEN '3등급'
END
WHEN 3 THEN
CASE WHEN salary >= 4000 THEN '1등급'
WHEN salary >= 3000 THEN '2등급'
WHEN salary >= 2000 THEN '3등급'
END
END AS [salary_grade]
FROM employees
WHERE department_id IN (1, 3)
//case 중첩