1. 정규화 정규화란 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 확보하기 위해서 데이터를 분해하는 과정을 말합니다. 이러한 정규화를 거치게되면 비즈니스(업무)에 변화가 발생하더라도 데이터 모델의 변경을 최소하 할 수 있습니다. 제5 정구화까지 존재하지만 실질적으로는 보통 제3 정규화까지만 수행하기 때문에 이 포스팅에서는 제3 정규화까지만 알아보도록 하겠습니다. #정규화절차 정규화 절차 설명 제1 정규화 - 속성(Attibute)의 원자성을 확보한다 - 기본키를 설정한다 제2 정규화 - 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거한다 제3 정규화 - 기본키를 제외한 컬럼간의 종속성을 제거한다. - 즉, 이행 함수 종속성을 제거한다. BCNF - 기본키를..
(이글은 네이버 블로그 운영당시 작성한 글을 옮기었습니다. 따라서 2019년에 작성된 글입니다.) 1. 데이터 모델링의 이해 우리의 목적은 관계형 데이터베이스, 즉 표에 정보를 담는 것인데, 정보를 데이터베이스 표에 담는 것에 성공만하면 거대한양의 데이터를 데이터베이스가 가진 장점들을 활용하여 다룰 수 있게 되기 때문입니다. 하지만 무한히 거대하고 복잡한 현실을 정보로 만들어서 표에담는 것은 결코 간단하지 않습니다. 이러한 복잡한 현실을 데이터베이스화 시키는 것이 바로 데이터 모델링인데요. 따라서 데이터 모델링은 현실세계를 데이터베이스로 표현하기 위해서 우리는 추상화라는 것을 하게되고 그러기 위해서는 그 데이터와 관련된 업무파악을 해야합니다. 업무파악이 끝났으면 현실의 업무를 뜯어내서 개념을 찾아..
# 서브쿼리(sub query) : select 안에 select가 존재, 서브쿼리의 결과는 무조건 1줄이 와야하며 1줄 이상이 올 경우 다중행 서브쿼리로서 in, any, all 등을 사용하게 된다. 1. 단일행 서브쿼리 예제1. 직원 중 이순철 보다 급여가 많은 직원을 출력하라 SELECT * FROM emp WHERE salary > (SELECT salary FROM emp WHERE ename='이순철') 예제2. 연봉이 제일많은 직원을 출력하라 SELECT * FROM emp WHERE salary = (SELECT MAX(salary) FROM emp) 예제3. 사원의 평균급여보다 급여가 작은 사람의 이름과 급여를 출력, 단 사원이 매달 바뀌어도 정상적으로 출력되도록 하라 SELECT ena..
1. Cross Join : 무식하게 다 1:1로 매핑한거라 잘안씀 SELECT * FROM emp, dept; emp 테이블의 컬럼이 14, dept 테이블의 컬럼이 5 > 14*5=70개의 row가 출력됨 SELECT * FROM EMP JOIN DEPT 이 구문과 동일하다 2. Equi Join(등가조인) : 두개의 테이블을 같은 키를 조건으로 사용하여 조인 SELECT * FROM emp, dept WHERE emp.deptno = dept.deptno 3. Non-Equi Join (비등가조인) : 등가조인이 아닌 조인 예제1. 포인트 상품으로 외장하드를 받을 수 있는 회원의 이름, 포인트 출력하라 SELECT g.name, g.point FROM guest AS g JOIN pointitem ..
SQL에서 지원하는 집계함수는 COUNT(빈도), SUM(합), AVG(평균), MIN(최소값), MAX(최대값), VARIANCE(분산), STDDEV(표준편차)가 존재한다. 1. COUNT() 예제1. 교수들은 몇명인가? SELECT COUNT(*), COUNT(bonus) FROM professor; 예제2. 컴퓨터공학과 학생수를 구하여라 SELECT NAME, COUNT(*) FROM student WHERE student.major1=101; 집계합수가 들어가는 순간 그룹핑이 되어 다른 변수를 출력하라고해도 가장 첫번째 ROW만 출력하게된다. 2.SUM() 예제2. 교수 급여합계를 구하라 SELECT SUM(salary*12+bonus), SUM(salary*12+IFNULL(bonus,0)) ..