공부/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시간