일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 프로그래머스
- 인프런
- AOP
- MVC2
- SQL
- 코테
- 김영한
- Join
- Model2
- 서브쿼리
- 뉴렉처
- select
- 인텔리제이
- STS
- JSP
- @Controller
- 자바
- Lombok
- 서블릿
- 스프링
- 메이븐
- 롬복
- Model1
- 코딩테스트
- 프레임워크
- 기술 대비
- toUpperCase
- DDL
- @RestController
- MVC
- Today
- Total
Heestory
11.정규화/JOIN/서브쿼리/WHERE/HAVING 본문
#.Oracle, mysql, mssql(relation database) 등을 부르는 종류명은?
:관계형 데이터베이스 관리 시스템(RDBMS)을 사용하는 데이터베이스 관리 시스템
- oracle : 유닉스 환경에서 많이 사용되는 RDBMS, 대규모 조직에 적합
- mysql: 세계에서 가장 많이 사용되는 오픈소스 RDBMS
- mssql: 마이크로소프트가 개발한 사이베이스(Sybase) 기반 RDBMS
#.정규화
1.정규화 발생 배경
:한 릴레이션에 여러 엔티티의 애트리뷰트들을 혼합하게 되면 정보가 중복 저장되며, 저장 공간을 낭비하게 된다. 또 중복된 정보로 인해 갱신 이상이 발생하게 된다. 동일한 정보를 한 릴레이션에는 변경하고, 나머지 릴레이션에서는 변경하지 않은 경우 어느 것이 정확한지 알 수 없게된다. 이러한 문제를 해결하기 위해 정규화 과정을 거친다.
→ 중복된 데이터를 제거해 이상을 제거하는 것
- 갱신 이상 : 릴레이션에서 속성의 값을 업데이트할 때 일부만 갱신되고 정보에 모순이 발생하는 현상
- 삭제 이상 : 릴레이션에서 인스턴스를 삭제할 때 의도와 상관없는 값이 삭제되는 현상
- 삽입 이상 : 릴레이션에 새로운 인스턴스를 삽입할 때 의도와 상관없는 값들도 함께 삽입되는 현상
2.정규화란?
:관계형 데이터베이스 설계시 중복을 최소화하도록 데이터를 구조화 하는 작업
3.정규화
정규화 된 정도를 정규형(Normal Form) 으로 표현하는데, 정규형에는 1NF, 2NF, 3NF, BCNF, 4NF, 5NF, 6NF 까지 있다.
비공식적 표현으로는 3NF 가 되었으면 정규화 되었다고 말한다. 3NF 테이블의 대부분이 삽입, 변경, 삭제 이상이 없으며, 3NF 테이블의 대부분이 BCNF, 4NF, 5NF이다.
1NF : 도메인이 원자값
2NF : 1NF를 만족하며 부분적 함수 종속 제거
3NF : 2NF를 만족하며 이행적 함수 종속 제거
BCNF : 3NF를 만족하며 결정자이면서 후보키가 아닌 것 제거
4NF : BCNF를 만족하며 다치 종속
5NF : 4NF를 만족하며 조인 종속성 이용
#.JOIN
:관계형 데이터베이스에서 두개 이상의 테이블을 결합하여 데이터를 조작하는 연산
-JOIN 종류
JOIN의 종류는 크게 INNER JOIN과 OUTER JOIN으로 구분할 수 있고, OUTER JOIN은 다시 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 구분할 수 있습니다.
조인의 처리에서 어느 테이블을 먼저 읽을지를 결정하는 것은 상당히 중요하며, 그에 따라 처리할 작업량이 상당히 달라집니다.
INNER JOIN은 어느 테이블을 먼저 읽어도 결과가 달라지지 않으므로 MySQL 옵티마이저가 JOIN의 순서를 조절해서 다양한 방법으로 최적화를 수행할 수 있습니다. 하지만 OUTER JOIN은 반드시 OUTER가 되는 테이블을 먼저 읽어야 하기 때문에 조인 순서를 옵티마이저가 선택할 수 없습니다.
#.INNER JOIN과 OUTER JOIN 차이점
-INNER JOIN : 조인이 되는 키값을 기준으로 교집합 (NULL값을 포함하지 않는다), 일치하는 값 기준으로만 출력
-OUTER JOIN : 조인이 되는 키값을 기준으로 기준테이블 Key 집합 (기준테이블은 NULL값을 포함한다), 전부 출력
이 때 OUTER JOIN으로 연결되는 테이블이 있는 쿼리에서는 가능하다면 모든 조건을 ON 절에 명시하는 습관을 들이는 것이 좋다.
#.서브쿼리
:SELECT 쿼리문 안에 포함 되어있는 또 하나의 별도 SELECT 쿼리문
-특징
- 여러 번의 Select문을 수행하여 얻을 수 있는 결과를 서브쿼리를 이용하여 하나의 쿼리로 결과를 얻을 수 있다.
- 메인쿼리가 서브쿼리를 포함하는 종속적인 관계가 있고 메인쿼리보다 먼저 실행된다.
- 사용할 때는 () 괄호를 잘 묶어줘야 한다.
- 서브쿼리 안에서 Order by 절은 사용할 수 없다.
- SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT VALUES절, UPDATE SET절에서 사용할 수 있다.
#.GROUP BY
:데이터를 특정 컬럼 기준으로 그룹화시키는 명령어
-특징
- 그룹을 나누고 다시 그 그룹 안에서 세부그룹으로 나눌 수 있다
- GROUP BY COL1, COL2 ⇒ COL1안에서 다시 COL2로 나누기 가능
EX) 연령별 성별 평균 매출액 → 연령별로 먼저 그룹, 다음 성별로 그룹
- GROUP BY COL1, COL2 ⇒ COL1안에서 다시 COL2로 나누기 가능
- 각 그룹에 대한 연산 결과(합, 평균, 갯수 등)를 산출하기 위해서는 집계함수가 필요
집계함수 : COUNT(행의 줄 수 반환), SUM(합계), AVG, MAX, MIN, STDDEV(표준편차), VARIAN(분산) - GROUP BY 구에 있는 컬럼은 반드시 SELECT 절에도 존재해야 한다
- GROUP BY 구에도 다양한 함수 사용 가능하다 (SUBSTR, INSTR 등등..)
#.WHERE과 HAVING
WHERE은 기본적인 조건절로서 우선적으로 모든 필드를 조건에 둘 수 있다.
HAVING은 group by 된 이후 특정한 필드로 그룹화 되어진 새로운 테이블에 조건을 줄 수 있다.
1.WHERE
select * from 테이블명 where 조건절
항상 from 뒤에 위치하고 조건에는 다양한 비교 연산자들이 사용되어 구체적인 조건을 줄 수 있다.
2.HAVING
select * from 테이블명 group by 필드명 having 조건절
항상 group by뒤에 위치하고 where 조건절과 마찬가지로 조건에는 다양한 비교연산자들이 사용되어 구체적인 조건을 줄 수 있다.
HAVING 뒤에는 SELECT 구문에서 사용하는 AS 별칭 사용 불가
#.ORDER BY
:테이블을 특정 컬럼값을 기준으로 정렬하기 위한 명령어
- 여러개 컬럼을 기준으로 정렬 가능
ex) ORDER BY COL1, COL2... - 기본 정렬값은 ASC(오름차순)로 설정되어있으므로 오름차순 정렬시에는 입력 필요 X, 내림차순의 경우 DESC
- SELECT절의 컬럼 순서 혹은 별칭으로도 정렬 가능
ex) ORDER BY 1, 2,...
https://jeongkyun-it.tistory.com/38
[MSSQL] 서브쿼리(SubQuery)란 무엇일까? / 특징 / 종류 / 예제
서브쿼리(SUBQUERY)란? 이번 글에서는 서브쿼리에 대해서 알아볼 것이다. 서브쿼리의 정의부터 알아보면, SELECT 쿼리문 안에 포함 되어있는 또 하나의 별도 SELECT 쿼리문을 말한다. 서브쿼리(SubQuery)
jeongkyun-it.tistory.com
https://devlog-wjdrbs96.tistory.com/347
[MySQL] Inner JOIN과 Outer JOIN의 차이가 무엇일까?
JOIN 정리하기 이번 글에서는 JOIN에 대해서 알아보겠습니다. (JOIN에 대해서는 아는데 INNER, OUTER 용어가 헷갈려서.. 정리를 해보려 합니다.) JOIN의 종류 JOIN의 종류는 크게 INNER JOIN 과 OUTER JOIN 으로..
devlog-wjdrbs96.tistory.com
https://velog.io/@genieee/GROUP-BY-HAVING-ORDER-BY-%EA%B0%84%EB%8B%A8-%EC%A0%95%EB%A6%AC
'개발(~국비) > 기술면접' 카테고리의 다른 글
13.뷰/함수/프로시저/트리거 (0) | 2022.10.20 |
---|---|
12.기본키/외래키 (0) | 2022.10.20 |
10.데이터베이스/SQL/DDL/DML/DCL/트랜잭션 (0) | 2022.10.20 |
09.배열 vs ArrayList (0) | 2022.10.20 |
08.클래스 변수/인스턴스 변수/지역변수/매개변수 (0) | 2022.10.20 |