4일차 회고록

TaeYoon Kim·2023년 11월 2일
0

SW CAMP

목록 보기
4/30
post-thumbnail

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 끝

  1. SQL - DML(DATA MANAGEMENT SYSTEM)

이제 테이블에 실제 값을 삽입, 조회 ,삭제 , 수정하는 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의 문제를 풀어보자.

0개의 댓글