큰일이다 아직 1회독 밖에 하지 못했지만 생각보다 조졌다는 생각이 안들어서 미루고 미루다 결국 여기까지 오게 되었다.
진짜 SQLD를 발라버렸는지 내가 발라졌는지는 9월의 31일에 나올 뿐 일단 마지막 발악으로 총 정리를 하기로 했다.
중간에 정신차리고 한번 sql 총 정리 영상을 찾아보게 됐는데, 단 2개의 영상으로 많은 사람을 구원했던 김강민SQLP영상을 쭉 보니 아 생각보다 1회독으로 머리에 들어온게 야간 있구나를 알게되었고(그냥 아 이거 봤었는데 정도) 또 처음보는 것들도 좀 있어서 당황했다.
이상 잡담은 거두절미하고 마지막 발악 가자!
명령문 개괄
순서 : FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
종류 : DML - Select, Insert, Delete, Update
DDL - Alter, Create, Modity, Drop
DCL - Grant, Revoke
TCL - Rollback, Commit
SELECT
- (SELECT)DISTINT(집약) -> 10, 20, 20, 30, 30, ... -> 10, 20, 30
ㄴDISTINT(deptno, mar) = GROUP BY(deptno, mgr)
- ALIAS - SELECT : 'as' 생략가능, 컬럼명에 띄어쓰기가 있는 경우 " "사용 예)"직원 번호"
- FROM : 'as' 사용 불가능
-CONCAT - 문자열 합치기 (문자열을 포함한 이어붙이기면 아래와 같은 기호를 사용)
- + : SQL Server
- \\ : Oracle
논리연산자
- AND : A and B 둘 다 포함
- OR : A or B 둘 중 하나
- NOT : not A, B 둘 다 아닌
*연산 순위 : NOT - AND - OR
SQL 연산자
- BETWEEN AND
- IN -> A in (1, 2, 3) -> A = 1 or A = 2 or a = 3
중 아무거나
- LIKE - 문자열 검색
- _ 미지의 한 글자
- % 한 글자 이상
- ESCAPE 와일드 카드 ( _ , % )를 문자로 취급
예시) ename like 'A @_ A' = @는 아무 문자든 상관 없다
escape '@' _ 와 % 앞에 특수문자를 지정 함으로서 _ 와 %를 포함한 문자를 검색할 수 있다
- (WHERE) ROWNUM (ORACLE)
TOP (SQL Server)
where rownum ≤ 3 *위에서부터 3개만큼 가져옴 order by sal *이때 rownum이 먼저 3개를 뽑고 나온 데이터에 order by가 실행되 그 3개로 정렬이 되게 된다. 이때, 인라인뷰를 사용해주면 된다. |
TOP(n) *상위 n개 출력 |
NULL
- NULL의 정의
ㄴ부재, 모르는 값
ㄴ NULL의 연산 - NULL을 포함한 모든 사칙연산의 답은 NULL이다
ㄴ 정렬 상 의미 (오름차순 기준)
- ORACLE : ∞ (null이 맨 마지막에 나옴)
- SQL Server : -∞ (최소의 값, null이 맨 앞에 나옴)
- NVL(값1, 값2) 값1 is null -> 값 2
is not null -> 값 1
NVL2(값1, 값2, 값3) 값1 is null -> 값 3
is not null -> 값 2
IS NULL(값1, 값2)
NULL IF(값1, 값2) 값1 = 값2 -> null
≠ -> 값 1
COALESCE(값1, 값2, ...) 널이 아닌 첫번째 값 -> 값1 is null,
값2 is null,
값3 is not null
-> 값3
정렬
- 정렬의 특성 1. 가장 마지막 실행
2. 성능이 느려질 수 있다.
3. null값과의 관계
- 컬럼 번호 정렬 *출력되는 컬럼의 수 보다 큰 값 불허
- 인수 두 개 *sal desc, ename asc -> sal에 같은 값이 있으면 ename 오름차순으로 정렬
- order by sal *sal이 셀렉트에 없어도 sal로 정렬 가능
숫자함수
- ROUND 자릿수 *자릿수만큼 반올림
- CEIL(Oracle) *소수점 첫째 자리에서 반올림
CEILING (SQL Server)
문자열 함수
- UPPER / LOWER
- LPAD / RPAD *지정한 문자 길이만큼 지정한 문자로 채운다 미표기시 공백문자
- LTRIM / RTRIM *지정한 반복적인 문자를 지운다. 미표기시 공백 지움
- SUB STRING *SUBSTR(문자열, 앞에서 n번째부터, 뒤에서 n번째 제외) 추출, 뒤 n번 미입력시 끝까지 출력
IN STRING *INSTR(문자열, 검색할 문자열) 검색할 문자열이 몇번째에 있는지 출력
날짜함수
- TO_CHAR
- TO_DATE
- SYSDATE(Oracle) *현재시간 출력
GETDATE(SQL Server)
- 날짜데이터 + 100 -> 100일 이후(숫자를 day로 인식)
DECODE / CASE
case
when then
when then
else *else가 없는경우 조건1, 조건2 에 만족 x => null출력
end
집계함수
-NULL과의 관계
GROUP BY
- 집약기능, 그룹 수준으로 정보를 바꿈
- HAVING : 그룹에 대한 조건식
JOIN
- NATURAL JOIN *둘 다ailas사용 불가
USING
*중복된 컬럼 하나로 출력
- LEFT OUTER JOIN
A left outer join B =Acoll = Bcoll (+) *같은 의미 이다
- 조인 순서 FROM A, B, C
->A 와 B가 먼저 조인이 되고 나온 데이터와 C가 조인된다.
서브쿼리
- SELECT 스칼라
FROM 인라인뷰
WHERE 거의 모든 서브쿼리
GROUP BY X
HAVING 거의 모든 서브쿼리
ORDER BY 스칼라
- IN
ANY
ALL
EXIST
집합연산자
DDL
- "TCL"
- TRANCATE VS DROP - 구조도 삭제(철거)
ㄴ입주민 퇴거(구조남음)
TRANCATE VS DELETE
DDL DML
*ROLLBACK, COMMIT 과 연관되서 나온다.
DML
- INSERT
UPDATE
DELETE
MARGE
제약조건
- PK :UNIQUE & NOT NULL
- UNIQUE
- NOT NULL
DCL
- GRANT
- REVOKE
VIEW
-독.편.부 *독립성, 편리성, 보안성
그룹함수
- ROLL UP
- CUBE
- GROUPING SETS
- GROUPING
TCL
- COMMIT
- ROLLBACK
윈도우함수
- ROWS *물리적인 행 단위
RANGE *논리적인 행 단위(같은 값인건 하나로 침)
- RANK *중복 건너뛴다 (1, 1, 3, 3, 5)
DENSE_RANK *중복 안건너뜀 (1, 1, 2, 2, 3)
- PARITION BY *중복제거 안함, 데이터 전체 출력
ORDER BY *중복제거
계층형 질의
- PRIOR 자식 데이터 = 부모데이터
- 부모에서 자식으로 가면 "순방향"
절차형 PL/SQL
- PROCEDURE : 동작을 절차적 일괄 처리, 값을 반환하지 않음
- FUNTION : 사용자 정의 함수
- TRIGGER : DB 에서 자동으로 동작하도록 작성된 프로그램
- USER DEFINED : 사용자 정의 예외
-EXCEPTION :블록을 실행하는 도중 발생하는 에러 -> 생략 가능
데이터 모델링
- 데이터 모델화
1. 데이터 구조화 - 절차도에 따라 프로그램이 이루어짐
2. 데이터 자체의 관계 - 데이터의 핵심적인 정보들을 연결시켜 모든 업무를 포괄
3. 객체지향 - 객체를 중심으로 DB화
엔터티
- 특징
- 분류 : 유.개.사 기.중.행
형 념 건 본 심 위
속성
- INSTANCE의 특성 = 속성
- 기.설.파
본 계 생
도메인
- 데이터 유현, 크기, 제약조건
- CHECK, PK
- 값의 범위
관계
식별자
- 식별자 : 하나의 엔터티에 구성되어 있는 여러개의 속성중에 엔터티를 대표할 수 있는 속성
_______________________으로 표기
- 비식별자 : 부모 엔터티로부터 속성은 받았지만 주식별자로 사용되지 않고 일반적인 속성으로 사용하는 경우
-------------------------로 표기
- 주식별자 : 유.최.불.존 IS NOT NULL
일 소 변 재
성 성 성 성
식별 | 비식별 |
강한관계 SQL구문 복잡 PK 속성 수 ↑ |
약한관계 조인 ↑ => 느려진다 |
- ERD규칙 1. 시선 좌상 -> 우하
2. 관계명 반드시 표기 안해도 됨
3. UML -> 객체지향에서만 쓰임
성능 데이터 모델링
- 아키텍처 -> 성능개편에 가장 효과적
- SQL 명령문 수정
정규화
- 방법 1차 - 원자성
2차 - 부분함수 종속 제거
3차 - 이행함수 종속 제거
- 이상현상
- 성능 : SELECT ↓
INSERT, UPDATE ↑
반정규화
대량 데이터에 따른 성능
- ROW MIGRATION
CHANING
- LIST
RANGE -> 관리 쉬움, 가장 많이 쓰임
HASH -> 관리 어렵
슈퍼 / 서브 타입
분산 데이터 베이스
- 데이터 무결성 해침!
조인 수행 원리
- NL : 랜덤 액세스, 대용량 소트 작업시 유리
- SORT MERGE : JOIN키를 기준으로 정렬 -> 등가, 비등가
- HASH : 등가 JOIN only
선행테이블 작다
HASH처리 별도 공간 필요
옵티마이저
- CBO : 경로
- RBO : 규칙
인덱스
- DB 테이블에 대한 검색 성능을 높혀준다.
- 부정형, like, 묵시적 형변환 에는 사용하지 않는다.
- 인덱스 사용시 INSERT, UPDATE, DELETE의 성능이 감소된다
실행계획
- 들여쓰기가 더 안쪽으로 되어있는 순서 부터 실행된다.
여기까지가 김강민님의 강의를 듣고 그대로 가져온 내용!
계속 고민하다가 늦게 신청하는 바람에 멀리가서 시험치기 때문에 새벽 6시에 일어나는 것보다 밤새는것이 컨디션적으로도 더 좋기에 밤새면서 문제집 푼거 두어번정도 훑어보고 시험치려고 한다.
한방 합격 기원!
'프로그래밍 > SQLD' 카테고리의 다른 글
DB 자격증 SQLD 46회 결과 합격!!!!! (4) | 2022.09.24 |
---|---|
9. 2과목 제 3장 SQL 최적화 기본 원리 (0) | 2022.08.28 |
8. 2과목 제 2장 SQL 활용 (3) - 서브쿼리 Subqauery, 윈도우 함수 (0) | 2022.08.28 |
7. 2과목 제 2장 SQL 활용 (2) - 계층형 데이터 (0) | 2022.08.27 |
6. 2과목 제 2장 SQL 활용 (1) - alias (1) | 2022.08.27 |