INSERT
테이블에 데이터를 입력하는 DML문
INSERT INTO 테이블(칼럼1, 칼럼2, ...) VALUES(값1, 값2, ...)
칼럼명은 생략이 가능하다 (칼럼의 순서를 맞춰야함)
INSERT INTO 테이블 VALUES(값1, 값2, ...)
문자열을 입력하는 경우 작은따옴표(' ')를 사용해야 한다
INSERT문을 실행했다고 데이터 파일에 저장되는 것은 아님. 최종적으로 TCL문인 Commit을 실행해야 함
UPDATE
입력된 데이터의 값을 수정할 수 있음
UPDATE 테이블 SET 칼럼=값 WHERE 조건
위의 쿼리는 조건에 맞는 ROW의 칼럽을 수정하는 쿼리이다
DELETE
원하는 조건을 검색하여 해당 ROW를 삭제할 수 있음
DELETE FROM 테이블 WHERE 조건
테이블의 모든 데이터 삭제
| DELETE FROM 테이블 | TRUNCATE TABLE 테이블 |
|---|---|
| 테이블의 모든 데이터를 삭제 | 테이블의 모든 데이터 삭제 |
| 데이터가 삭제되어도 테이블의 용량 감소 X | 데이터가 삭제되면 테이블의 용량은 초기화 |
SELECT
테이블에 입력된 데이터 조회
SELECT * FROM 테이블
위의 쿼리는 해당 테이블의 모든 데이터를 조회한다
SELECT * FROM 테이블 WHERE 조건
위의 쿼리는 해당 테이블에서 조건이 맞는 모든 데이터를 조회한다
SELECT 칼럼1, 칼럼2 FROM 테이블
위의 쿼리는 해당 테이블에서 모든 데이터의 칼럼1과 2만 조회한다
DISTINCT는 칼럼명 앞에 지정하며 중복된 데이터를 한 번만 조회함
WHERE
WHERE문은 비교 연산자, 부정 비교 연산자, 논리 연산자, SQL 연산자, 부정 SQL 연산자를 사용할 수 있다
비교 연산자
| 비교 연산자 | 설명 |
|---|---|
| = | 같은 것을 조회 |
| < | 작은 것을 조회 |
| <= | 작거나 같은 것을 조회 |
| > | 큰 것을 조회 |
| >= | 크거나 같은 것을 조회 |
부정 비교 연산자
| 부정 비교 연산자 | 설명 |
|---|---|
| != | 같지 않은 것을 조회 |
| ^= | 같지 않은 것을 조회 |
| <> | 같지 않은 것을 조회 |
| NOT 칼럼명 = | 같지 않은 것을 조회 |
| NOT 칼럼명 > | 크지 않은 것을 조회 |
논리 연산자
| 논리 연산자 | 설명 |
|---|---|
| AND | 조건을 모두 만족해야 참(True) |
| OR | 조건 중 하나만 만족해도 참(True) |
| NOT | 참이면 거짓(False)으로 바꾸고 거짓이면 참(True)로 바꿈 |
SQL 연산자
| SQL 연산자 | 설명 |
|---|---|
| LIKE ‘%비교 문자열%’ | 비교 문자열 조회 (%는 모든 값을 의미하는 와일드 카드) |
| BETWEEN A AND B | A와 B 사이의 값 조회 |
| IN (list) | OR을 의미하며 list 값 중 하나만 일치해도 조회 |
| IS NULL | NULL 값 조회 |
부정 SQL 연산자
| 부정 SQL 연산자 | 설명 |
|---|---|
| NOT BETWEEN A AND B | A와 B 사이의 해당되지 않는 값 조회 |
| NOT IN (list) | list와 불일치한 것 조회 |
| IS NOT NULL | NULL 값이 아닌 것 조회 |
와일드 카드
| 와일드 카드 | 설명 |
|---|---|
| % | 어떤 문자를 포함한 모든 것 조회 |
| _ | 한 개인 단일 문자 |
NULL 관련 함수
| NULL 함수 | DBMS | 사용법 | 설명 |
|---|---|---|---|
| NVL | Oracle | NVL(칼럼, 값) | 칼럼이 NULL이면 다른 값으로 바꾸는 함수 예에서 칼럼이 NULL이면 값 반환 |
| NVL2 | Oracle | NVL2(칼럼, 값1, 값2) | 칼럼이 NULL이 아니면 값1, NULL이면 값2 반환 |
| NULLIF | Oracle, MS-SQL, MySQL | NULLIF(값1, 값2) | 두개의 값이 같으면 NULL을, 같지 않으면 첫 번째 값 반환 |
| COALESCE | Oracle, MS-SQL | COALESCE(값1, 값2, … ) | NULL이 아닌 최초의 값 반환 |
GROUP 연산
GROUP BY
- 테이블에서 소규모 행을 그룹화하여 합계, 평균, 최댓값, 최솟값 등을 계산할 수 있음
- HAVING 절에 조건문을 사용
- Grouping된 결과에 대한 조건문 사용
- ORDER BY를 사용하여 정렬 가능
SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO
위의 쿼리는 DEPTNO로 그룹을 만들어 SUM(SAL) 을 이용해 그룹별 합계를 계산함
HAVING
GROUP BY에 조건을 사용하기 위해선 HAVING을 사용해야 함
만약 WHERE절에 조건문을 사용하면 조건을 충족하지 못하는 데이터들은 GROUP BY 대상에서 제외
집계함수
| 집계함수 | 설명 |
|---|---|
| COUNT() | 행 수 계산 |
| SUM() | 합계 계산 |
| AVG() | 평균 계산 |
| MAX() | 최댓값 계산 |
| MIN() | 최솟값 계산 |
| STDDEV() | 표준편차 계산 |
| VARIANCE() | 분산 계산 |
데이터 조회 작성 순서
- SELECT
- FROM
- WHERE
- GROUP BY
- HAVING
- ORDER BY
데이터 조회 실행 순서
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
형변환
두 개의 데이터의 데이터 타입이 일치하도록 변환하는 것
명시적(Explicit) 형변환과 암시적(Implicit) 형변환이 있음
형변환 함수
| 함수 | 설명 |
|---|---|
| TO_NUMBER(문자열) | 문자열을 숫자로 변환 |
| TO_CHAR(숫자 혹은 날짜, FORMAT) | 숫자 혹은 날짜를 지정된 FORMAT의 문자로 변환 |
| TO_DATE(문자열, FORMAT) | 문자열을 지정된 FORMAT의 날짜형으로 변환 |
내장형 함수
DUAL 테이블
Oracle 데이터베이스에 의해 자동으로 생성되는 테이블
문자열 함수
| 함수 | DBMS | 설명 |
|---|---|---|
| ASCII(문자) | 문자 혹은 숫자를 ASCII 코드값으로 변환 | |
| CHR(ASCII코드) | Oracle | ASCII 코드값을 문자로 변환 |
| CHAR(ASCII코드) | MS-SQL, MySQL | ASCII 코드값을 문자로 변환 |
| SUBSTR(문자열, m, n) | 문자열에서 m번째 위치부터 n개 자름 | |
| CONCAT(문자열1, 문자열2) | 문자열1과 문자열2를 결합한다 | |
| LOWER(문자열) | 영문자를 소문자로 변환 | |
| UPPER(문자열) | 영문자를 대문자로 변환 | |
| LENGTH | 공백을 포함한 문자열의 길이 반환 | |
| LEN(문자열) | 공백을 포함한 문자열의 길이 반환 | |
| LTRIM(문자열, 지정문자) | 왼쪽에서 지정된 문자를 삭제 (지정 문자를 생략시 공백 제거) | |
| RTRIM(문자열, 지정문자) | 오른쪽에서 지정된 문자를 삭제 (지정 문자를 생략시 공백 제거) | |
| TRIM(문자열, 지정문자) | 왼쪽 및 오른쪽에서 지정된 문자를 삭제 (지정 문자를 생략시 공백 제거) |
DBMS의 공백은 모든 DBMS가 지원하는 함수
날짜형 함수
| 함수 | 설명 |
|---|---|
| SYSDATE | 현재 날짜를 날짜 타입으로 반환 |
| EXTRACT(’YEAR’ | ‘MONTH’ | ‘DAY’ from dual) | 날짜에서 년, 월, 일을 조회 |
숫자형 함수
| 함수 | 설명 |
|---|---|
| ABS(숫자) | 절댓값 반환 |
| SIGN(숫자) | 양수, 음수, 0을 구별 |
| MOD(숫자1, 숫자2) | 숫자1을 숫자2로 나누어 나머지 계산(%를 사용해도 됨) |
| CEIL(숫자) | 숫자보다 크거나 같은 최소의 정수 반환 |
| CEILING(숫자) | 숫자보다 크거나 같은 최소의 정수 반환 |
| FLOOR(숫자) | 숫자보다 작거나 같은 최대의 정수 반환 |
| ROUND(숫자, m) | 소수점 m 자리에서 반올림 (m 생략 시 0 지정) |
| TRUNC(숫자, m) | 소수점 m 자리에서 절삭 (m 생략 시 0 지정) |
DECODE
DECODE(칼럼, 값, 값1, 값2)
칼럼과 값이 같으면(참) 값1을, 같지 않으면(거짓) 값2를 반환
CASE
SELECT CASE
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
ELSE 값3
END
FROM 테이블
위의 쿼리는 테이블에서 맞는 조건에 따른 값 반환과 조건이 맞지 않을 시 값3을 출력한다
ROWNUM
- Oracle 데이터베이스의 SELECT문 결과에 대해 논리적인 일련번호를 부여함
- 조회되는 행 수를 제한할 때 많이 사용됨
- 화면에 데이터를 출력할 때 부여되는 논리적 순번
인라인 뷰(Inline view): SELCET문에서 FROM 절에 사용되는 서브쿼리(Sub Query)를 의미
ROWID
- Oracle 데이터베이스 내에서 데이터를 구불할 수 있는 유일한 값
- “SELECT ROWID, 갈럼 FROM 테이블” 처럼 SELECT문으로 확인할 수 있음
- 데이터가 어떤 데이터 파일, 어느 블록에 저장되어 있는지 알 수 있음
ROWID 구조
| 구조 | 길이 | 설명 |
|---|---|---|
| 오브젝트 번호 | 1~6 | 오브젝트 별로 유일한 값을 가지고 있으며, 해당 오브젝트가 속한 값 |
| 상대 파일 번호 | 7~9 | 테이블스페이스에 속해 있는 데이터 파일에 대한 상대 파일 번호 |
| 블록 번호 | 10~15 | 데이터 파일 내부에서 어느 블록에 데이터가 있는지 알려줌 |
| 데이터 번호 | 16~18 | 데이터 블록에 데이터가 저장되어 있는 순서 |
WITH
- 서브쿼리(Subquery)를 사용하여 임시 테이블이나 뷰처럼 사용할 수 있는 구문
- 서브쿼리 블록에 별칭을 지정할 수 있음
- 옵티마이저는 SQL을 인라인 뷰나 임시 테이블로 판단
WITH 임시테이블명 AS
(SELECT * FROM 테이블
UNION ALL
SELECT * FROM 테이블)
SELECT * FROM 임시테이블명 WHERE 조건
위의 쿼리는 WITH구문의 예