e-koreatech 데이터베이스 학습 정리
* 기본적인 것들은 제외하고, 정리가 필요한 부분만 기록함
1. 평가
1) 다루는 DB : MS-SQL 기준
- mysql 등에서 없는 옵션들이 있기에 고려하고 학습해야함
2. 서브쿼리
1) 주의 사항
- 성능의 문제가 발생할 수 있음, join으로 대체하는 것을 추천함
- 중첩 질의문 사용 시 오루가 없도록 IN, ANY, ALL을 기본적으로 사용함
- ORDER BY는 의미가 없음
2) 다중행 비교 연산자
- IN : 속성값이 여러 값들 중 하나이기만 하면 참, = OR의 의미
- ANY 또는 SOME : 메인 쿼리 비교 조건에서 서브 쿼리 결과와 하나라도 일치하면 참
IN과의 차이점은 >, >=, <=, < 과 같은 범위 비교와도 같이 사용 가능
- ALL : 메인 쿼리 결과가 하나라도 존재하면 참이 되는 연산자
- NOT EXISTS : EXISTS와 상반되는 연산자
https://pakker.tistory.com/108?category=856845
3. 집합 연산자와 집단 연산자
1) 집합 연산자
- union : 합집합
- intersect : 교집합
- except : 차집합
2) 집합 연산자와 join의 차이
- JOIN과 UNION의 가장 큰 차이점은 JOIN이 두 릴레이션의 튜플을 결합하고 결과 튜플이 두 릴레이션의 속성
을 포함한다는 것입니다. 반면 UNION은 두 개의 SELECT 쿼리 결과를 결합합니다.
- JOIN 절은 관련된 두 관계에 둘 다 공통 인 속성이 하나 이상있는 경우에만 적용 할 수 있습니다. 반면 UNION 은 두 릴레이션이 같은 수의 애트리뷰트를 갖고 해당 애트리뷰트의 도메인이 동일 할 때 적용 가능합니다.
- JOIN INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN의 네 가지 유형이 있습니다. 그러나 UNION, UNION 및 UNION ALL의 두 가지 유형이 있습니다.
- JOIN에서 결과 터플은 두 릴레이션의 애트리뷰트를 포함하므로 더 큰 크기를 갖는다. 반면 UNION에서는 튜플
에 포함 된 관계의 튜플을 포함하여 튜플 수가 증가합니다.
- 결론 : 데이터 결합 연산은 둘 다 다른 상황에서 사용됩니다. JOIN은 적어도 하나의 속성이 공통 인 두 릴레이션
의 속성을 결합하고자 할 때 사용됩니다. UNION은 쿼리에있는 두 릴레이션의 튜플을 결합 할 때 사용됩니다.
3) 집단 연산자
- 집단함수 (count 등...)
- group by, having
https://jjine926.tistory.com/80?category=938129
https://pakker.tistory.com/109
- rollup, cube
https://pakker.tistory.com/110?category=856845
https://pakker.tistory.com/111?category=856845
4. 인덱스와 뷰
1) 인덱스
1-1) 인덱스가 효율적인 경우
- WHERE 절이나 조인 조건절에서 자주 사용되는 칼럼의 경우
- 전체 데이터 중에서 10~15% 이내의 데이터를 검색하는 경우
- 두 개 이상의 칼럼이 WHERE 절이나 조인 조건에서 자주 사용되는 경우
- 테이블에 저장된 데이터의 변경이 드문 경우
- 색인은 부가적인 자료 구조임
- 데이터 삽입이 빈번할 시 인덱스 갱신으로 인해 비효율적임
1-2) 질의 수행 시 인덱스를 강제로 사용하게 하기
- 인덱스를 먼저 만든다 (ex : name_idx)
- FROM 절에 WITH를 추가하여 선언한다
- SELECT * FROM ELPLOYEE WITH (INDEX = name_idx) WHERE ENAME = 'e1'
2) 뷰
1-1) 하나 이상의 기본 테이블이나 다른 뷰를 이용하여 생성되는 가상 테이블
- 중복을 피하거나 (예: 직급별 보여주고자 하는 데이터 들), 복잡한 쿼리를 위해
3) 인라인 뷰
1-1) 하나의 질의문 내에서만 생성되어 사용 되어지고 질의문 수행 종료 후 사라지는 뷰
- FROM 절에서 서브 쿼리를 사용하여 생성하는 임시 뷰
5. 저장 프로시저와 사용자 정의 함수
1) 프로시저 : 자주 사용되는 질의문들을 하나로 묶어서 저장해 두고 필요할 때마다 명령문처럼 실행
1-1) 입력 매개변수를 사용하는 프로시저
- 생성시 @를 사용함 : @매개변수명 타입, ...
- 실행시 : EXEC 프로시저이름 매개변수값
1-2) 출력 매개변수를 사용하는 프로시저
- 생성시 @를 사용하고 OUTPUT을 명시함 : @매개변수명 타입 OUTPUT, ...
- 변수 선언 : 프로시저 밖에 매개변수 선언함, DECLARE @매개변수명
- 프로시저 실행 : EXEC 프로시저명 @매개변수명 OUTPUT
- 선언된 매개변수를 출력함 : SELECT @매개변수명
2) 사용자 정의 함수 : RETURN문을 이용해 하나의 값을 반드시 반환해야 함
1-1) 특징
- 사용자 정의 함수는 프로시저와 달리 다양한 타입의 값을 반환할 수 있음
- 함수이므로 질의문 내에서 사용이 가능함
1-2) 테이블 반환 함수 : 하나가 아닌 여러개의 값을 반환하는 함수
- 함수 결과로 테이블이 반환되므로 SELECT 문의 FROM 절 등에서 쓸 수 있음
6. 트리거
1) 개념 : DBMS에서 특정 사건이 발생 시 자동으로 일련의 과정이 수행되는 프로시저
1-1) 프로시저와 트리거 차이
- 프로시저 : 사용자가 직접 EXEC명령어를 이용해 수행해야 한다.
- 트리거 : 특정 조건을 만족하면 자동으로 수행되도록 하는 저장 프로시저다.
1-2) 단점
- 테이블 선언 시 정의한 제약조건에 비해 성능이 저하됨
'Database > Maria,Mysql' 카테고리의 다른 글
with와 CTE (common table expression) (0) | 2022.08.29 |
---|---|
1. replication with mariaDB - MariaDB와 MySQL의 Replication은 다르다! (0) | 2022.01.25 |
생활코딩 - SQL JOIN 학습 정리 (0) | 2022.01.16 |
생활코딩 - 관계형 데이터 모델링 학습 정리 (0) | 2022.01.15 |
인프런 - 따라하며 배우는 MySQL on Docker 학습 정리 - ProxySQL 실습 : Insert (3) (0) | 2022.01.12 |
댓글