SQL(Structured Query Language) (1)
- 잘 구조화된 질의 언어
0. 개요
1. 약속
2. SQL문 종류
3. DATA TYPE
4. DML
5. TCL
0. 개요
- 모든 DB가 인식할 수 있는 언어 = SQL
- 모든 DBMS = SQL + α (α = 해당 DBMS가 갖는 특색, 기능)
예) ORACLE = SQL + PL/SQL
1. 이 페이지에서의 약속
- ORACLE SQL 기준
- keyword(예약어)는 대문자
- identifier(식별자)는 소문자
- [ ](대괄호) 안의 내용은 생략 가능
- | 는 양자택일
- SQL은 대, 소문자를 구분하지 않지만 DB안에 들어있는 데이터는 대, 소문자를 구분함
- SELECT, INSERT, UPDATE 등 쿼리문에서 ' '(홑따옴표)는 안에 문자열을 넣는다
- set linesize / set pagesize: 한 페이지에 나타낼 수 있는 길이 조절 가능
- TABLE은 DB의 기본단위
예) matrix 구조, 2차원 구조, 데이터 저장소
- column: DB테이블에서 자료형 일련의 데이터 값과 열
- row: DB테이블에서 튜플이라고 하며 레코드라고 불리며 행
- ERD(Entity Relationship Diagram): 테이블과 테이블 간의 관계를 의미, 개체- 관계 모델링
- DUAL TABLE: 출력을 위한 가상의 테이블
< DUAL 테이블을 이용해서 현재 시스템 시각 호출 >
2. SQL문 종류
1) DDL: CREATE / DROP / ALTER
2) DML: INSERT / DELETE / UPDATE / SELECT
3) DCL: GRANT / REVOKE
※ TCL(Transaction Control Language): COMMIT / ROLLBACK
3. DATA TYPE
- VARCHAR2: 가변 길이 문자 데이터(1~4000byte)
- CHAR: 고정 길이 문자 데이터(1~2000byte)
- NUMBER:자릿수를 의미
예) NUMBER(7,2): 7자리 숫자 표현 가능, 소숫점은 2자리까지 표현
- DATE: 날짜
- LONG: 가변 길이 문자 데이터(1~2Gbyte)
- CLOB(Character Large OBject): 단일 바이트 가변 길이 문자 데이터(1~4Gbyte)
- RAW: 2진 데이터
- LONG RAW: 가변 2진 데이터
- BLOB(Byte Large OBject):
- BFILE: 가변 길이 외부 파일에 저장된 2진 데이터
4. DML
1) INSERT
예) INSERT INTO table_name(column1, column2, ...) VALUES (data1, data2, ...);
< INSERT 키워드 사용 예시 >
2) UPDATE
예) UPDATE table_name
SET column1=값 column2=값 ...
WHERE 조건
< UPDATE 키워드 사용 예시 >
< WHERE 조건문을 달지 않으면 해당 열이 전부 바뀜 >
3) DELETE
예) DELETE FROM
WHERE 조건;
※ UPDATE 키워드와 마찬가지로 조건문을 달지 않으면 전부 삭제: 현업에서 이런 일은 없으니 걱정 말기
< DELETE 키워드 사용 예시 >
< ROLLBACK 후, id에 조건을 설정하여 DELETE 키워드 사용 예시 >
4) SELECT: 데이터베이스로부터 저장되어 있는 데이터를 검색
예) SELECT
column_name [, column_name...]
FROM table_name
WHERE 조건
GROUP BY column_name [, column_name...]
HAVING 조건
ORDER BY column_name [, column_name...]
SELECT 문 column, 조건 등 배치
- WHERE 절에 올 수 있는 SQL연산자들
BETWEEN a AND b: a, b값을 포함한 사이의 데이터 출력
< BETWEEN 키워드 사용 예시 >
IN (): list값 중 어느 하나와 일치하는 데이터를 출력
< IN 키워드를 이용하여 관리부에 해당하는 데이터 출력 >
< NOT IN 키워드를 이용하여 관리부에 해당하는 데이터 출력 >
LIKE: 문자 형태로 일치하는 데이터를 출력 (%: 0 이상의 다수 / _: 1 의미)
< LIKE 키워드를 이용한 예시 >
(김%: 김씨, 김_: 김씨 성에 외자 ...)
04가 들어간 입사일자 확인 예시
01이 들어간 입사일자 확인 예시
0이 들어간 입사일자 확인 예시(사실상 전부)
(단, 제대로 된 날짜 검색 수단은 아니니 %, _ 등 문자 확인하는 수단으로)
IS NULL: NULL값을 가진 데이터를 출력
※ NOT을 앞에 붙이면 반대 의미 (단, IS NULL의 경우는 be동사 뒤에 )
< IS NULL, IS NOT NULL 사용 예시 >
※ LIKE~ESCAPE: %,_ 등의 문자를 일반 문자처럼 사용하고 싶을 때 이용
예) WHERE name LIKE '%a₩_y%' ESCAPE '₩'; - ₩ 문자를 찾는 것
DB내의 데이터는 존재
자신이 보고 싶은 대로 볼 수 있고, 수정도 가능
굳이 column을 새로 생성해서 값을 대입하지 않고 추출할 때
산술식을 이용해 원하는 정보를 바로 바로 가져올 수 있음 (expression)
괄호에 스페이스 바에 AS 구분이 쉽지 않은 상황
" "(큰 따옴표)를 이용하여 지정을 해주면 AS를 사용하기 쉬워짐
5) ALIAS(예명)
예) SELECT
name, dept_name, in_date, id
FROM emp_test;
테이블의 데이터를 일부 추출해서 헤더에 위치한 명칭을 변경하려함
스페이스 바를 CSV로 삼아 명칭을 입력해도 됨
예) SELECT
name 사원이름, dept_name 소속부서, in_date 입사일, id 개인코드
FROM emp_test;
AS를 붙여 명칭을 입력해도 됨
예) SELECT
name AS 사원이름, dept_name AS 소속부서, in_date AS 입사일, id AS 개인코드
FROM emp_test;
5.TCL
1) COMMIT: 변경사항 저장
- COMMIT 이후는 데이터베이스를 영구적으로 변경
- 데이터의 이전 상태는 완전히 상실
2) ROLLBACK: 변경사항 취소
- 데이터 이전의 상태로 복구 가능
- COMMIT 이전의 상태로는 되돌릴 수 없음
4. 1) INSERT 적용 예시 후 ROLLBACK 키워드 적용
6. NVL
- NULL을 처리하기 위한 함수
예) NULL값을 0으로 처리
DB 정보를 보니 salary값(급여)이 비어있는(NULL) 라인이 보임
NVL함수를 이용해서 salary 정보중 NULL값인 라인을 0으로 바꿈
주어지지 않은 정보인 연봉 정보(salary*12)도 NVL 함수를 이용해서 NULL처리 가능
숫자 정보인 salary와 문자 정보인 '열정페이'는 DATA Type이 맞지 않음
7. NVL2
- NVL함수와 DECODE함수의 결합이라고 생각하면 쉬움
- NVL2(A, 값1, 값2): A가 NULL이 아니면 값1을 반환, NULL이면 값2를 반환
NVL2 함수의 사용 예시1: 숫자 변환
NVL2 함수의 사용예시2: 문자 변환
※ DECODE 함수 = if~else 함수와 유사
- DECODE(값, if1, then1, if2, then2, ...): 값이 if1이라면 then1을, 값이 if2라면 then2를 반환
- DECODE를 중첩해서 사용할 수 있음
DECODE 함수 사용 예시2
8. ||
- 문자열이나 column을 합쳐주는 역할
- 문자를 추가할 수도 있음
|| 사용 예시1
|| 사용 예시2: 홑따옴표를 이용하여 띄어쓰기 적용
|| 사용 예시3: 문자열 추가
9. DISTINCT
- 중복 조합을 제거하는 키워드
10. 정렬 [오름차순(ASC), 내림차순(DESC)]
- 정렬 키워드를 입력하지 않으면 기본적으로 오름차순으로 정렬
- ORDER BY를 붙여 정렬 가능
입사일 기준으로 내림차순을 한 후에 급여 기준으로 올림차순으로 정렬
(1차 기준: 입사일, 2차 기준: 급여)
NULL값을 먼저 내세울 수도 NULLS LAST를 이용하여 나중에 내세울 수도 있음
인덱스 번호로 정렬할 수 있음
(인덱스 번호가 1번부터: SQL은 전산이 아닌 언어라는 증거)
ALIAS를 이용해서 정렬할 수도 있음
dept_name의 정보를 호출하지 않았지만 DB안에 있으므로
dept_name을 기준으로 오름차순 정렬도 가능
(문자도 정렬이 가능)
문자열은 대소비교 가능, 정렬도 가능
11. NOT / AND / OR
- 우선순위: NOT > AND > OR
NOT / AND / OR 예시
우선순위 확인
12. ALL / ANY
- ALL: 비교 대상과 비교하여 모두 만족
- ANY: 비교 대상과 비교하여 한 쪽만 만족
ALL과 ANY 사용 예시
<> = !=
13. COUNT / ROWNUM
- COUNT: 레코드 수 세기
- ROWNUM: 화면에 출력되는 레코드에 숫자를 부여
COUNT, ROWNUM 사용 예시
14. 내장함수(Single-Row Functions)
- 문자함수, 날짜처리함수, 데이터 형 변환함수, 기타함수 등
15. 그룹함수(Multi-Row Functions)
1) GROUP BY
- 특정 그룹으로 묶어서 데이터를 집계
error: 단일 그룹의 그룹 함수가 아닙니다
salary(급여)의 최댓값은 1개지만 그외 부서명은 복수의 필드 = 1:다 관계 형성
(GROUP BY 키워드를 이용하여 부서명을 모아주면 에러 해결)