7주차 배운점 느낀점 - 데이터베이스, DBMS, SQL, SELECT, WHERE
7주차 시작
백앤드에서 데이터베이스 중요!!하다고 하셨다. 코드 플로우 어차피 비슷하기 때문에 별로 안중요하다고 하신다.
RDB(관계형 데이타베이스)아직 많이 쓰기때문에 잘 배워놓고. 몽고디비 노sql도 결국 비슷하다고 하셨다.
데이터베이스 데이터,정보,지식/ 4가지 정의,/ 4가지 특징 설명할줄알아야한다!
배운점
데이터, 정보, 지식
일상생활의 데이터베이스
데이터베이스의 개념 및 특징
데이터베이스 시스템의 구성
데이터베이스(database)
조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아 구조적으로 통합해 놓은 것
학생 데이터 - 학사 데이터베이스
신용카드 데이터 - 은행 데이터베이스
병원 데이터 - 건강보험 데이터베이스
쇼핑몰 데이터 - 쇼핑몰 데이터베이스
문헌 정보 데이터 - 도서관 데이터베이스
데이터
관찰의 결과(팩트) 정량적인 실제값, 정성적인 실제값
정보
데이터에 의미를 부여한 것
지식
사물이나 현상에 대한 이해, 지식이 많다 정보를 많이 가지고 있다
일상생활의 데이터베이스
데이터베이스 시스템은 데이터의 검색과 변경 작업을 주로 수행함
변경이란 시간에 따라 변하는 데이터 값을 데이터베이스에 반영하기 위해 수행하는 삽입, 삭제, 수정 등의 작업
돈관련된게 실시간 변경이 되게 많다
데이터베이스 용어
통합된 데이터(integrated data)
데이터를 통합하는 개념으로, 각자 사용하던 데이터의 중복을 최소화하여 중복으로 인한 데이터 불일치 현상을 제거
저장된 데이터(stored data)
문서로 보관된 데이터가 아니라 디스크, 테이프 같은 컴퓨터 저장장치에 저장된 데이터를 의미
운영 데이터(operational data)
조직의 목적을 위해 사용되는 데이터를 의미한다. 즉 업무를 위한 검색을 할 목적으로 저장된 데이터
쿼리를 통해 CRUD할 수 있다.
공용 데이터(shared data)
한 사람 또는 한 업무를 위해 사용되는 데이터가 아니라 공동으로 사용되는 데이터를 의미
데이터베이스는 운영 데이터를 통합하여 저장하며 공용으로 사용
가각 자기의 권한에 맞게 본인이 원하는 정보를 얻어갈 수 있다.
이걸 관리하는게 데이타베이스 관리 시스템 DBMS
데이터베이스의 특징
실시간 접근성(real time accessibility)
데이터베이스는 실시간으로 서비스, 사용자가 데이터를 요청하면 몇 시간이나 몇 일 뒤에 결과를 전송하는 것이 아니라 수 초 내에 결과를 서비스
계속적인 변화(continuous change)
데이터베이스에 저장된 내용은 어느 한 순간의 상태를 나타내지만, 데이터 값은 시간에 따라 항상 바뀜. 데이터베이스는
삽입(insert), 삭제(delete), 수정(update) 등의 작업을 통하여 바뀐 데이터 값을 저장
동시 공유(concurrent sharing)
데이터베이스는 서로 다른 업무 또는 여러 사용자에게 동시에 공유동시(concurrent)는 병행이라고도 하며, 데이터베이스에 접근하는 프로그램이 여러 개 있다는 의미
내용에 따른 참조(reference by content)
데이터베이스에 저장된 데이터는 데이터의 물리적인 위치가 아니라 데이터 값에 따라 참조
데이터베이스 시스템
주기억장치에 상주하면서 일을함, 계속 모니터링함 사용자와 데이터베이스 시스템이 데이터와 사용자를 연결해준다.
데이터베이스 시스템
데이터를 파일 단위로 파일 서버에 저장
데이터 가진쪽 : 서버, 데이터 요청하는 쪽 클라이언트
DBMS를 도입하여 데이터를 통합 관리하는 시스템
DBMS가 설치되어 데이터를 가진 쪽을 서버(server), 외부에서 데이터 요청하는 쪽을 클라이언트(client)라고 함
DBMS 서버가 파일을 다루며 데이터의 일관성 유지, 복구, 동시 접근 제어 등의 기능을 수행
데이터의 중복을 줄이고 데이터를 표준화하며 무결성을 유지
ㄴ테이블 만드는 이유도 표준화하기 위해, 중복성 없애고 표준화함
웹 데이터베이스 시스템
데이터베이스를 웹 브라우저에서 사용할 수 있도록 서비스하는 시스템
불특정 다수 고객을 상대로 하는 온라인 상거래나 공공 민원 서비스 등에 사용됨
분산 데이터베이스 시스템
여러 곳에 분산된 DBMS 서버를 연결하여 운영하는 시스템
대규모의 응용 시스템에 사용됨
DBMS 여러군데 놓고 인터넷 기반으로 여러군데 연결해서 사용한다.
DBMS
데이터를 DBMS 내부에 저장, 데이터와 코드가 분리 되었다. 어떤 데이터에대한 변경에대한 코드의 변경 서로 연관없이 독립성을 제공한다. 중간엔 DBMS가 있다!
데이터 정의와 데이터 값을 DBMS가 관리
DBMS는 데이터 정의, 데이터 변경 등의 작업을할 수 있는 별도의 프로그램을 갖고 있음
프로그램에 데이터 정의나 데이터 값을 포함하지 않기 때문에 데이터 구조가 바뀌어도 다시 컴파일할 필요가 없음
DBMS 장점
- database 생성: testdb
- testdb use 명령어 지정하기
- database 안에 데이터를 저장할 테이블 생성 : test 테이블(id, name)
- 만든테이블 확인 : show
- 만든 테이블에 자료 입력 : insert
- 입력한 자료 확인 : select
show databases;
create database testdb;
use testdb;
auto_increment : 데이터 인서트될때마다 아이디값 알아서 증가
var : 동적
not null : null 허용하지 않겠다.
create table test(id smallint unsigned primary key auto_increment,name varchar(20) not null);
show tables;
insert into test(id,name) values (1,'Sample data');
select * from test;
root 계정으로 sinsaegebookdb, sinsaegeadmin 사용자 생성 및 권한 부여
create user sinsaegeadmin@localhost identified by '1234';
grant all privileges on sinsaegebookdb.* to sinsaegeadmin@localhost;
commit;
워크벤치에서 사용자 추가
추가된것 확인
SQL(Structed Query Language)
1970년 IBM이 SEQUEL 이름으로 개발한 관계형 데이터베이스 언어
1986년 ANSI 에서 표준 승인한 언어
Data SubLanguage 데이터 구조에 관한 데이터를 생성하고 처리하는 문법만을 가지고 있다.
기능에 따라 분류
1. 데이터 정의어(DDL) - CREAT (생성), ALTER (수정), DROP (삭제) 명령어 :객체
2. 데이터 조작어(DML) - INSERT, UPDATE, DELETE (테이블)
3. 데이터 제어어(DCL) - GRANT, REVOKE, COMMIT, ROLLBACK
4. 데이터 질의어(DQL) - SELECT
5. TCL :COMMIT, ROLLBACK
기존 테이블 삭제
DROP TABLE Book;
mysql> create table Book(
-> Bookid INTEGER PRIMARY KEY,
-> Bookname VARCHAR(40),
-> publisher VARCHAR(40),
-> price INTEGER);
mysql> create table Customer(
-> custid INTEGER PRIMARY KEY,
-> name varchar(40),
-> address varchar(20)
-> phone varchar(20));
mysql> create table Orders(
-> orderid integer primary key,
-> custid integer,
-> bookid integer,
-> saleprice integer,
-> orderdate date,
-> foreign key(custid) references Customer(custid),
-> foreign key(bookid) references Book(bookid));
foreign key 설정
각각 키를 이용해서 reference 할 수 있다.
select phone from customer where name = '김연아';
select bookname,publisher
-> from book
-> where price >= 1000;
select bookname, publisher from book where price >= 10000 order by publisher;
SELECT
오름차순 내림차순
select bookname, publisher from book where price >= 10000 order by bookid desc;
select bookname, publisher from book where price >= 10000 order by bookid asc;
중복제거
select distinct publisher from book where price >= 10000 order by bookid asc;
전체보기:
desc book;
모든 도서의 이름과 가격을 검색하시오
select bookname,price from book;
변형 모든 도서의 이름과 가격을 검색하시오
select price,bookname from book;
모든 도서의 도서번호, 도서이름, 출판사, 가격을 검색하시오.
select * from book;
도서 테이블에 있는 모든 출판사를 검색하시오.
select publisher from book;
중복을 제거하고 싶으면 DISTINCT 키워드를 사용
select distinct publisher from book;
WHERE
가격이 20,000원 미만인 도서를 검색하시오.
mysql> select bookid, bookname, publisher, price
-> from book
-> where price < 20000;
가격이 10,000원 이상 20,000 이하인 도서를 검색하시오
mysql> select bookid, bookname, publisher, price
-> from book
-> where price between 10000 and 20000;
출판사가 ‘굿스포츠’ 혹은 ‘대한미디어’인 도서를 검색하시오
mysql> select bookid, bookname, publisher, price
-> from book
-> where publisher in('굿스포츠','대한미디어');
출판사가 ‘굿스포츠’ 혹은 ‘대한미디어’가 아닌 도서를 검색
mysql> select bookid, bookname, publisher, price
-> from book
-> where publisher not in ('굿스포츠','대한미디어');
‘축구의 역사’를 출간한 출판사를 검색하시오.
mysql> select bookname, publisher
-> from book
-> where bookname = '축구의 역사';
도서이름에 ‘축구’가 포함된 출판사를 검색하시오.
mysql> select bookname, publisher
-> from book
-> where bookname like '%축구%';
도서이름의 왼쪽 두 번째 위치에 ‘구’라는 문자열을 갖는 도서를 검색하시오.
mysql> select bookid, bookname, publisher, price
-> from book
-> where bookname like '_구%';
축구에 관한 도서 중 가격이 20,000원 이상인 도서를 검색하시오.
mysql> select bookid, bookname, publisher, price
-> from book
-> where bookname like '%축구%' and price >= 20000;
도서를 이름순으로 검색하시오.
mysql> select bookid, bookname, publisher, price
-> from book
-> order by bookname asc;
도서를 가격순으로 검색하고, 가격이 같으면 이름순으로 검색하시오.
select * from book order by price asc, bookname asc;
회고
학교 다닐 적에 데이터베이스 수업 좋아했다. 데이터가 뽑히는게 재밌었다.
다시보니 반갑다. 그래도 오랜만에 하니 where 절도 모르겠다. 다시 차근차근해보자
기존 작업했던 북마켓 프로그램에 데이터베이스 모델을 구축하고 실습한다고 하셨다.
안그래도 오늘 평소에도 리펙토링 하기위해서 다른 잘 했던 조의 코드를 보고 궁금한 점을 질문했다. Mapper 라고 클래스가 있었는데 크게 용도와 기능을 잘 이해하지못했었는데 이 클래스가 바로 데이터 베이스와 만나는 코드였다. 지금은 데이터베이스를 아직안배워서 코드에 없지만 데이터베이스를 연결하는 코드를 선언해주어야 하고 밑에 있는 메소드들을 보니 수정, 삭제, 조회 등이었다. 그러니 이해가 되었다.
나중에 데이터베이스를 연결할 것을 미리 염두하고 제대로 리펙토링 해봐야겠다. 물어보길 잘했다.