e-koreatech 데이터베이스 학습 정리
목차
e-koreatech
e-koreatech.step.or.kr
* 기본적인 것들은 제외하고, 정리가 필요한 부분만 기록함
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
서브쿼리
1. 다중 행 서브쿼리 서브쿼리의 결과가 2건 이상 반환 될 수 있다면 반드시 다중 행 비교 연산자와 함께 사용 해야 한다. 그렇지 않으면 sql 문은 오류를 반환한다. 연산자 내 용 IN (서브쿼리) 서
pakker.tistory.com
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 등...)
[SQL] 집단연산자 - 집단함수( sum / avg / count /max / min / stdev / var ) , group by / having
집단 함수 : 테이블의 전체 행을 하나 이상의 컬럼을 기준으로 그룹화하여 해당 그룹 별 통계 값을 출력하는 함수 (통계함수, 그룹함수라고도함) -- select 절에만 사용가능 from/where 자리에 사용불
reeme.tistory.com
- group by, having
https://jjine926.tistory.com/80?category=938129
[SQL] #6 집합 연산자, 집단 연산자, GROUP BY
✔ 집합 연산자 : 테이블을 구성하는 튜플 집하에 대한 테이블의 부분 집합을 결과로 반환하는 연산자 ① UNION (합집합) / UNION ALL (중복허용 합집합) ② INTERSECT (교집합) ③ EXCEPT (차집합) * 조건 -
jjine926.tistory.com
https://pakker.tistory.com/109
그룹 함수-rollup, rollup orderby, grouping
GROUP BY로 그룹핑한 로우들의 갯수나, 합계 등을 구해주는 기능이있다. oracle에서는 ROLLUP인데 mysql에서는WITH ROLLUP을 사용한다. 1. oracle select count(*) 'total empl', sum(SAL) 'total sal' from EMP,..
pakker.tistory.com
- rollup, cube
https://pakker.tistory.com/110?category=856845
그룹함수 - cube
rollup은 총 갯수, 총 합계 등만 가능했지만, cube는 결합 가능한 모든 값에 대하여 다차원 집계를 생성한다. 간단한 합계는 rollup을 사용하며, 다차원, 복합 합계는 cube를 사용한다. cube는 다차원, 복
pakker.tistory.com
https://pakker.tistory.com/111?category=856845
그룹함수 - Grouping sets
grouping sets를 통해 더욱 다양한 소계 집합을 만들 수 있다. 문장을 여러번 반복하지 않아도 원하는 결과를 쉽게 얻을 수 있게 되었다. 그룹함수 종류가 여러가지라 상황에 따라 잘 사용 할 것. 다
pakker.tistory.com
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 |
댓글