SQL 기본

SQL

관계형 DB 데이터의 구조 정의, 데이터 조작, 데이터 제어 제공

종류 : DDL, DML, DCL(권한 관리), TCL

실행 순서 : Pasing 구문 분석 → Execution(옵티마이저 계획에 따라) → Fetch(인출)


절차형 SQL

SQL문의 연속적인 실행 및 조건에 따른 분기 처리를 이용하여 특정 기능을 수행하는 저장 모듈 생성 가능

PL/SQL(Oracle)

  • 블록 구조 : 블록 내에 DML, 쿼리, IF나 LOOP등을 사용할 수 있음
  • Declare(선언부) : 블록에서 사용할 변수나 인수에 대한 정의
  • Begin(실행부) : 처리할 SQL문 정의
  • Exception(예외 처리부) : 블록에서 발생한 에러 처리 로직 정의, 유일한 선택 항목

Procedure : Execute로 실행, TCL 실행 가능
Trigger : DML문이 수행 되었을 때 자동으로 동작하는 프로그램, DCL과 TCL 실행 불가
User Defined Function : 절차형 SQL을 로직과 함께 DB내에 저장해 놓은 명령문 집합, 반드시 하나의 값 반환


DDL : 데이터 구조 정의

타입

  • Number : 숫자형
  • Date, Datetime : 날짜
  • char() : 고정된 크기 문자, 공백으로 채워줌
  • Varchar2() : 가변 길이 문자, 문자열은 가능한 최대 길이 설정

Create Table

  • 명명 규칙 : 대소문자 구분 X, 테이블명 단수형 권고, 알파벳-숫자-언더바-$-# 사용
  • 제약 조건 :
    - 데이터 무결성 유지 목적, 복제 테이블에는 기존 테이블의 제약조건 중 Not Null만 적용
    - Primary key, Foreign key(constraint), Unique key, Default, Check(종류 및 범위 제한)
  • Describe 테이블명 = ANSI/ISO 표준, sp-help 'dbo 테이블명' = 테이블 구조 확인

Alter Table : ADD, DROP, MODIFY(설정 변경), RENAME, Add Constraint, Drop Constraint

Rename Table : Rename 테이블명 To 테이블명 (ANSI/ISO 표준)

Drop Table : 복구 불가, Cascade Constraint 옵션으로 참조 제약 조건도 삭제하여 참조 무결성 준수 가능

Truncate Table : 테이블의 전체 데이터 삭제, 로그 기록 X → Roll Back 불가


DML : 데이터 조작(입력, 삭제, 수정, 조회)

Insert

Insert into 테이블명(칼럼명) values(필드값);
Insert into 테이블명 values(필드값);

Update

Update 테이블명 set 칼럼명 = 필드값;

Delete

Delete from 테이블명 (where 조건절);
테이블 용량은 초기화 되지 X (Truncate로 삭제하면 초기화 됨)

Select

Select * from 테이블명;  → 전체 칼럼
Select 칼럼명 from 테이블명; → 칼럼별
Select Distinct 칼럼명 from 테이블명; → 데이터 중복 없이, Distinct⦙dep.mgr⦙ = Group by(dep.mgr)
Alias = select 칼럼명 AS "별명", from 테이블명 "별명", 칼럼명이 중복될 경우 select절에서 필수 

Select문 실행 순서 : From - Where - Group by - Having - Select - Order by


TCL : 트랜젝션 제어

DML로 조작한 결과를 논리적인 작업 단위 별로 제어

트랜젝션 : DB의 논리적 연산 단위, 하나 이상의 SQL문을 포함

  • 특성 : 원자성, 일관성, 고립성, 영속성

TCL : 무결성 보장 목적, 영구 변경 전 확인과 연관 작업 동시 처리 가능

  • Commit, Rollback, Savepoint

함수

단일형 : select, where, order by절에 사용, 각 행에 개별적으로 적용, 여러 인자 입력 → 하나의 결과 출력

문자형

  • ACSⅡ ↔︎ char(ACSⅡ 코드값)
  • LTRIM, TRIM, RTRIM
  • substr(문자열 부분 추출) ↔︎ concat(문자열 결합)
  • lower(소문자), upper(대문자), length(공백 포함 길이)

숫자형

  • round(반올림), ceil(올림), floor(버림), trunc(소숫점 버림)
  • ABS = 절대값, sign = 음수・양수・0 구별, mod = 숫자를 나누고 나머지 계산

날짜형

  • sysdate : 날짜형으로 출력
  • extract : 년, 월, 일, 부분 추출

변환형

  • to_number(문자열을 숫자로), to_char(숫자나 날짜를 문자열로), to_date(문자열을 날짜로)

Null : 부재, 모르는 값, Null+2/Null * 1 → 알수 없음(unknown)

  • Nvl2 : Nvl + Decode, (값1, 값2, 값3) 값1이 Null이면 값2, 아니면 값3
  • Nullif : (첫 값, 뒷 값) 같으면 Null, 다르면 첫 값
  • Coalesce : Null이 아닌 첫 번째 값
  • Nvl/Isnull : (값1, 값2) 값1이 Null이면 값2 출력

데이턴 변환

  • 명시적 형 변환 : 변환형 함수를 이용하여 데이터 타입 변환
  • 암시적 형 변환 : DBMS가 자동으로 데이터 타입 변환

조건문

IF-THEN-ELSE형태
Case when 조건절 | Then 출력값 | Else 기본값 end → Else 생략시 Null
Decode(칼럼, 기준값1, 출력값1, ....ㅡ 기본값) : Oracle 함수

Where

종류 : 비교 연산자, 부정 비교 연산자, 논리 연산자, SQL 연산자

  • SQL 연산자 : 입력값을 비교하여 논리값 출력
    Between a and b. In(리스트), Like '문자열', Is Null, Not between a and b;

우선순위

  • 부정 연산자 > 비교 연산자 > 논리 연산자
  • ①0(괄호) ②Not ③비교 연산자 & SQL 연산자 ④And ⑤OR

뮨자열 비교 방법

  • char vs char : 첫 서로 다른 문자열 값으로 비교, 길이가 다를 때 공백을 추가하여 맞춤
  • char vs varchar : 길이가 긴 값이 크다고 판단, TRIM으로 Varchar 공백 제거 후 판단 가능
  • char vs 상수 : 상수를 변수 타입으로 바꿔 비교

부분 범위 처리

  • Oracle → Rownum : 처리 결과 집합의 각 행에 임시 부여 번호, 조건절 내에서 행의 갯수를 제한
  • SQL Server → Top : 출력 행의 수 제한, TOP(N) = N개 행 출력, 갯수 대신 비율로도 제한 가능

※ Like : 언더바 = 이미지 한글자, % = 0이상 글자, escape = 와일드카드(언더바,%)를 문자로 취급


집계 함수

그룹별 결과 출력
where절에 사용 불가
공집합에서도 연산 수행
Group by절이 없으면 그룹핑 대상이 없어 에러 발생

count(*) : Null 포함, SUM, AVG, MAX, MIN, VARIAN, STDDEV, ALL, DISTINT(중복제외)

Group by : 그룹핑 기준 설정, Alias 사용 불가

Having : Group by 뒤에 위치, Group by절에 의한 집계 데이터에 출력 조건을 검


Order by

특정 칼럼을 정렬, 기본은 오름차순(ASC), 내림차순(DESC)

1) 칼럼명
2) Alias
3) 칼럼의 select절에서 순서로 칼럼 지정 가능, select절에 없는 칼럼도 지정 가능, Group by절이 있으면 Group by 대상 칼럼만 지정 가능

※ Oracle : Null을 최대값으로 판단
※ SQL Server : Null을 최소값으로 판단

Can Do It
brb

좋은 웹페이지 즐겨찾기