4일차 데이터 베이스 과목을 공부했습니다.
목차
1. 정규화
1-1. CRUD 이상
1-2. 함수적 종속
1-3. 정규화
2. SQL - DDL
2-1. create table
2-2. DROP table
2-3. ALTER
3. SQL - DML ★
3-1. INSERT
3-2. SELECT ★★★
1-1. CRUD 이상
베이터 베이스 서버 프로그램의 기본 기능 CRUD
Create
Read
Update
Delete
하지만 테이블 설계가 잘 되어있지 않다면
삽입 이상, 삭제 이상, 갱신 이상이 발생한다.
이런 문제들은 테이블을 나눠서 해결한다.
테이블을 나누는 과정이 정규화이다.
정규화를 이해할려면 함수적 종속을 이해해야한다...
#함수적 종속이란
f(x) = y 에서
x는 y을 함수적 결정자
y는 x에 함수적 종속된다.
함수 종속의 추론 규칙들이 있다. (like 수학 연산)
(이것 저젓 ppt보고 적어야겠다.)
정규화 외우는 방법
두부이걸다줘?
1정규화(도메인 다중값제거, X = {a,b} )
2정규화(부분 함수 종속 제거)
3정규화(이행 함수 종속 제거, X -> Y and Y -> Z)
이 이상의 정규화 단계는 본 적이 없다. 일단 여기까지만 할 수 있으면 된다.
실습으로 SQL에 대해서 알아보자
1. SQL - DDL (DATA DEFINE 언어)
학교, 학생, 과목으로 실습을 해보자.
1-1. CREATE TABLE
문법
CREATE TABLE [테이블 이름](
[속성_이름] [타입],
[속성_이름] [타입],
...
[옵션]
);
예제
(바탕화면에 sql 파일들있음)
외래키 속성 설정
foreign key (school_idx) references school(idx)
외래키가 있는 테이블은 참조하고 있는 테이블이 없으면 생성이 안되므로 조심하자.
1-2. ALTER
문법
ALTER TABLE [테이블 이름] (ADD,DROP,RENAME,MODIFY)
예제
alter table student add address varchar(30);
alter table student drop address;
alter table student rename column gender to address;
alter table student modify address varchar(20);
alter table student modify address varchar(1) NOT NULL;
1-3. DROP TABLE
문법
예제
ReverseEngineer로 만든 테이블들을 E-R 다이어그램으로 볼 수 있다.
하지만 E-R다이어그램만 잘 그리면 바로 DDL를 생성해주기 때문에
많이 쓸 일이 없다고 한다...
SQL - DDL 끝
이제 테이블에 실제 값을 삽입, 조회 ,삭제 , 수정하는 DML를 보겠습니다.
실제로 정보처리기사나 코딩 테스트에서도 DML이 자주 나오고, 나중에 서버 프로그램을 작성하며 DML 쿼리문도 자주 작성하기에 오늘 수업에서 가장 중요한 부분이라고 할 수 있습니다.
(기본 문법)
2-1. 삽입 INSERT
문법
insert into_ 테이블 이름_ ( _속성 이름_ )
values ( _속성 값_ );
예제
insert into school (idx,name,addr) values(1,'platdata','동작구');
#오토로 되어있는 건 생략가능
insert into school (name,addr) values('동작고등학교','동작구');
#모든 속성에 대한 데이터를 입력하면 생략 가능
insert into school values(3, '동작중학교','동작구');
#한 번에 여러 개체도 추가 가능
insert into school (name,addr)
values
('동작초등학교','동작구'),
('동작유치원','동작구')
;
2-2. 조회 SELECT
select 속성1 , 속성2, ...
From 테이블_이름
where 조건;
limit 조건;
제가 DDL로 만든 DB는 너무 단순하고 데이터도 없어 SELECT 연습에 적합하지 않습니다. 연습용 DB준비해서 연습을 해봅시다.
(링크)
테스트 DB준비 방법
예제
select * from employees;
#Limit 0,1000 서버 성능을 높여준다.
select emp_no , first_name From employees Limit 0,1000;
#지연 시간 0.0015sec
select emp_no , first_name
From employees
where emp_no > 10500 AND emp_no < 10900;
#지연 시간 0.0000sec
select emp_no , first_name
From employees
where emp_no > 10500 AND emp_no < 10900 Limit 0,1000;
#1. salaries 테이블에서 salary가 65000 ~ 70000 이 아닌 행의
emp_no와 salary를 출력하시오.
select emp_no , salary
From salaries
where salary < 65000 OR salary > 70000;
#2. employees 테이블에서 last_name이 Facello 이거나 Simmel 인
#사원들의 last_name과 birth_date를 출력하시오.
select last_name , birth_date
From employees
where last_name = 'Facello' OR last_name = 'Simmel';
#like ~~~ 가 포함된
#3. employees 테이블에서 last_name이 A로 시작하는 사원의
#last_name과 first_name을 출력하시오.
select last_name , first_name
From employees
where last_name Like 'A%';
#4. employees 테이블에서 last_name에 aba가 포함된 사원의
#last_name과 first_name을 출력하시오.
select last_name , first_name
From employees
where last_name Like '%aba%';
이게 끝이 아니다.
아직 절반도 안나갔으니 내일은 SELECT 문법을 더 배우고
programmers의 문제를 풀어보자.