기본 콘텐츠로 건너뛰기

1.01 SQL(Structured Query Language) (1)

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 함수 사용 예시1



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 키워드를 이용하여 부서명을 모아주면 에러 해결)




GROUP BY를 이용하여 각 부서 평균급여를 구한 예시




NVL함수로 NULL처리를 하고 AVG함수와 
GROUP BY를 통해 1:1관계 형성 후 급여 계산 예시


- WHERE 조건부를 먼저 처리하고 GROUP BY를 달아야 효율적임
  = 먼저 조건에 맞게 쳐내고 GROUPING을 하는 것이 맞음