공부/SQLD

SQLD 자격증 2과목 SQL기본 및 활용(개념 + 노랭이)

원 이 _ 2024. 3. 6. 16:14

 

관계형 데이터 베이스(1970 E.F.Codd)

 

 

관계형 데이터 베이스

 

 

  • Oracle, Mysql, Mssql...
  • 관계와 조인연산을 통해서 합집합, 교집합, 차집합 등을 만들 수 있다
  • SQL: 관계형 데이터 베이스에서 데이터 정의/조작/제어를 하기 위해 사용하는 언어, 단순 스크립트가 아닌 독립된 하나의 언어

 

 

데이터 베이스 관리 시스템(DBMS)

 

 

  • 어떤 형태의 자료구조로 사용하느냐에 따라 달라진다
  • 계층형: 트리구조 1:N
  • 네트워크형: 오니와 멤버형태, 1:N과 N:M도 가능
  • 관계형: 릴레이션, 집합연산 및 관계연산 가능

 

 

집합연산자

 

 

  • UNION: 합집합, 중복행 하나의 행으로 출력
  • UNION ALL: 합집합, 중복행 그대로 출력
  • INTERSECT: 교집합, 중복행 하나의 행으로 출력
  • EXCEPT(일부에서는 MINUS): 차집합, 중복행 하나의 행으로 출력

 

 

관계연산

 

 

선택연산(Selection) 특정 조건에 해당하는 행만 조회
투영연산(Projection) 특정 조건에 맞는 속성만 조회
결합연산(Join) 공통된 속성을 통해 팀에 새로운 릴레이션을 생성
나누기연산(Division) 기준 릴레이션에서 나누는 릴레이션이 가지는 속성과 동일한 값을 가지는 행만 추출하여
나누는 릴레이션의 속성을 삭제한 후 중복된 행을 제거

 

 

SQL문장의 종류

 

 

데이터 정의어(DDL) - 테이블이나 칼럼과 같이 데이터 구조를 정의하는데 사용
- 구조생성/변경/삭제
- create, drop, rename, alter, truncate
데이터 조작어(DML) - 데이터 조회 및 검색
- 데이터 추가/삭제/수정
- select, insert, delete, update
데이터 제어어(DCL) - 데이터베이스에 접근
- 객체 사용권한 부여하거나 회수
- grant, revoke
트랜잭션 제어어(TCL) - 트랜잭션별로 제어
- 밀접히 연관되어 분리할 수 없는 한 개 이상의 데이터베이스 조작을 야기
- 하나의 트랜잭션을 하나 이상의 SQL 문장을 가짐
- 일부에서는 DCL로 분류하기도 한다
- commit, rollback, savepoint

 

 

SQL 실행순서

 

 

  • 파싱: 문법 확인, 구문 문석, 구문 분석한 SQL Library Cache에 저장
  • 실행: 옵티마이저가 생성한 실행 계획에 따라 SQL문 실행
  • 인출

 

 

데이터 조작어(DML)

 

 

SELECT * FROM 테이블명 WHERE 조건 ORDER BY 컬럼;
  • ORDER BY 사용 시 속도 느려짐(오라클: SORT_AREA_SIZE)
  • 인덱스를 사용해 정렬과정 피할 수 있다
  • DUAL: 오라클에서 임시로 사용할 수 있는 테이블
  • 실행순서: FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY
//SQL 조회시...
SELECT INTO 서비스 VALUES ('999', '', '2015-11-11')
SQL -> SELECT * FROM 서비스 WHERE 서비스명 = '';
ORACLE -> SELECT * FROM 서비스 WHERE 서비스명 IS NULL;
SELECT * FROM 테이블명 GROUP BY 컬럼 HAVING 조건;
  • HAVING절 이용해 조건 추가 가능
  • GROUP BY절에는 ALIAS 함수명 사용 불가능
  • 집계함수 사용가능

 

 

데이터 제어어(DCL)

 

 

*객체권한 부여 방법*
GRANT [권한명] ON [객체명] TO [사용자/ROLE/PUBLIC][WITH GRANT OPTION]
  • WITH GRANT OPTION: 권한을 부여받은 사용자가 부여받은 권한을 또 다른 사용자에게 부여할 수 있는 옵션
  • PUBLIC: 자신에게 허가된 권한을 모든 사용자에게 허가한다
  • 부여할 수 있는 객체 권한 종류: Insert, Select, Update, Delete, Alter, All, Reference, Index
*객체권한 회수 방법*
REVOKE [권한] ON [객체명] FROM [사용자/ROLE/PUBLIC][CASCADE/RESTRICT]
  • REVOKE문으로 권한 취소할 때 그 권한을 허가한 사용자가 권한을 취소할 수 있다
  • REVOKE문으로 권한 취소하면 취소당한 사용자가 WITH GRANT OPTION으로 다른 사용자에게 부여한 권한은 연쇄적으로 취소된다
  • CASCADE: 해당 스키마뿐만 아니라 연관된 객체도 모두 삭제
  • RESTRICT: 스키마가 공백일 경우 제거

 

 

집계함수

 

 

  • 집계함수의 통계 정보는 NULL값 제외하고 계산
  • WHERE절에 사용 불가능
  • COUNT(), SUM(), AVG(), MIN(), MAX()

 

 

트랜잭션 제어어(TCL)

 

 

  • 트랜잭션:데이터 베이스에서 처리하는 작업의 단위
  • 트랜잭션 특징
원자성 - 실행되는 연산의 전체가 실행되거나 실행되지 않아야한다
- 트랜잭션이 완전히 끝나지 않았다면 실행전 상태와 같아야한다
일관성 - 트랜잭션 실행 결과로 데이터베이스의 상태가 모순되지 않아야한다
- 실행 후에도 일관성이 유지되어야 한다
고립성 - 트랜잭션 실행 중에 생성되는 연산의 중간 결과는 다른 트랜잭션이 접근할 수 없다
- 부분적인 실행 결과는 다른 트랜잭션이 볼 수 없다
영속성 - 트랜잭션 실행이 성공적으로 완료하면 결과는 영구적으로 보존되어야 함

 

 

함수

 

 

  • NULL 관련 함수: 데이터 정의가 없는 것
NVL(표현식1,표현식2)
/ ISNULL(표현식1, 표현식2)
표현식1의 결과값이 NULL이면 표현식2, NULL이 아니면 표현식1로 출력
(표현식1과 표현식2의 결과 데이터 타입이 같아야한다)
*NVL은 Oracle, ISNULL은 SQL Server
IFNULL(컬럼명, 대체 값) 컬럼이 NULL일 경우 대체 값 출력
*SQL Server
NVL(표현식, 대체값1, 대체값2) 표현식이 NULL이 아닌 경우 대체값1, NULL인 경우 대체값2
NULLIF(표현식1, 표현식2) 표현식1이 표현식2와 같으면 NULL, 아니면 표현식1
COALESCE(표현식1, 표현식2, ...) NULL이 아닌 최초의 표현식 출력
모두 NULL이 아니면 NULL 출력
더보기

NULL과 숫자 연산 결과 항상 NULL

NULL과 숫자 비교 결과 항상 Unknown

NULL = NULL 비교 항상 FALSE 또는 Unknown

 

  • 문자함수: 내장함수
LOWER() 소문자 LPAD(값, 전체개수, 채울 값) 왼쪽 채우기
UPPER() 대문자 RPAD() 오른쪽 채우기
LENGTH() 길이
(줄바꿈, 띄어쓰기 포함)
TRIM() 공백 제거
SUBSTR(값, 시작위치, 개수) 자르기 LTRIM(값, 제거할 값) 왼쪽 공백 제거
INSTR(값, 찾을 값) 위치 찾기 RTRIM() 오른쪽 공백 제거
REPLACE() 교체
replace(컬럼, 찾는값, 바꿀값) -> 바꿀값 없을시 삭제하라는 의미
  • 숫자함수
ROUND(값, 자리수) 반올림
round(112.345, 2) -> 112.35
TRUNCATE() 내림
FLOOR() 가까운 작은 정수 CEIL() 가까운 큰 정수
POWER() 제곱    
  • 날짜함수
SYSDATE() 년월일시분초 SYSTIMESTAMP() 년월일시분초 + 밀리세컨
ADD_MONTH()   NEXT_DAY()  
TO_CHAR()      
더보기

TO_CHAR(SYSDATE + 1/24/60/60, 'yyyy/mm/dd hh24:mi:ss') -> 1초 뒤

TO_CHAR(SYSDATE + 1/24/60, 'yyyy/mm/dd hh24:mi:ss') -> 1분 뒤

TO_CHAR(SYSDATE + 1/24, 'yyyy/mm/dd hh24:mi:ss') -> 1일 뒤

ex) 1/24/60 -> 1분, 1/24/(60/10) -> 10분, 1/24/(60/30) -> 1시간