DB/MySQL

[혼공S] 데이터 베이스와 SQL

  • -

본격적인 시작에 앞서

안녕하세요. 혼공단 9기 황혜경입니다.

혼자 공부하는 SQL로 혼공학습단을 진행해보려고 합니다!

사실 저번 8기에서 파이썬으로 혼공단을 했었는데

그때는 개발 관련한 포스팅이 처음이라 열정과 다르게 좀 미숙한 부분이 많아서

이번에는 방학을 기념하여 정말 성심성의껏 포스팅을 해보고자 합니다

저번과 마찬가지로 이번에도 모든 실습들을 다 해보며 할 예정입니다

혼공S로 공부하는 기록들을 최대한 티스토리에 작성하려고 하니

미션을 확인하시는 족장님은 조금 힘들 수도 있을 거 같네요

혼공S 신청 계기

저는 MySQL을 사용한 적이 있습니다! 다만 책으로 개념을 하나하나 알아가며

공부한 것이 아닌 대충 쿼리들만 깨작깨작하는 정도고

제대로 된 개념을 잘 모르기 때문에 이번 기회에

SQL을 자세히 알아보고자 신청하게 되었습니다.

데이터 베이스와 SQL

데이터 베이스 알아보기

DataBasa란 데이터가 저장된 곳, 데이터들의 집합

그리고 데이터베이스를 관리하는 소프트웨어를 DBMS라고 합니다.

이 책은 MySQL이라는 소프트웨어에 대해 알아보는 것이겠죠?

DBMS는 계층형(Hierarchical), 망형(Network), 관계형(Relational), 객체지향형(Object-Oriented), 객체관계형(Objected-Relational)으로 나뉩니다. 대부분의 DBMS는 관계형이고 MySQL 또한 관계형 DBMS입니다.

RDBMS(관계형 DBMS)의 데이터 베이스는 테이블(table)이라는 최소 단위로 구성됩니다.

테이블은 열과 행으로 이루어진 표라고 생각하시면 될 듯합니다.

table

1-2에서는 MySQL WorkBench를 설치하는데, 저는 이미 되어있어서 포스팅 생략하겠습니다

실전용 SQL 미리 맛보기

데이터 베이스 모델링

데이터베이스 모델링은 데이터베이스 구축 전 테이블의 구조를 미리 설계하는 과정입니다.

폭포수 모델의 업무 분석과 시스템 설계 단계에 해당합니다.

폭포수 모델이란? 순차적인 소프트웨어 개발 프로세스 (소프트웨어를 만들기 위한 프로세스)로
위에서 아래로 흐르는 모양이기 때문에 폭포수 모델이라고 합니다.

프로젝트란 현실 세계의 업무를 컴퓨터 시스템으로 옮겨 놓는 일련의 과정입니다.

프로젝트 진행 과정은 크게 6단계로 나뉩니다

폭포수 모델

자세한 예시는 책에 있으니 참고하세요!

자 그럼 데이터 베이스 모델링이란 뭘까요?

데이터 베이스 모델링이란 우리가 살고 있는 세상에서 사용되는 사물이나 작업을 데이터 베이스 개체로 옮기기 위한 과정입니다. 즉 개체를 나타내는 특징들을 추출하는 과정이라고 할 수 있습니다.

그리고 그 추출한 특징들을 테이블이라는 개체로 변환하는 것이죠.

다음은 데이터 베이스의 구조입니다

책에도 자세하게 설명되어 있고, 의미를 설명하지 않아도 다 아실만한 용어들입니다.

하지만 여기서 PK(Primary Key)는 확실하게 알고 가겠습니다.

기본 키(PK) 열은 각 행을 구분하는 유일한 열입니다.

주로 아이디, 학번, 주민등록번호가 이에 해당합니다.

또한 MySQL에 있는 데이터베이스를 스키마(Schema)라고 합니다

데이터 베이스 시작부터 끝까지

워크벤치에 접속하여

우클릭하여 Create Schema로 데이터 베이스를 생성할 수 있습니다.

책에 나온 대로 데이터베이스를 생성했습니다.

이제 테이블을 만들어 보도록 하겠습니다.

책에 나와 있는 그대로 만들면 됩니다

NN이란? Not Null로 빈 값이 들어가면 안 되는 칼럼입니다.

데이터도 엑셀에 입력하듯이 입력하면 됩니다.

데이터 활용하기 - SELECT

쿼리를 수정하지 않은 상태에서는

SELECT * FROM shop_db.member;

이런 식으로 작성되어 있습니다.

*은 From 이하의 테이블에서 모든 칼럼을 가져온다는 뜻입니다.

SELECT member_name, member_addr FROM shop_db.member;

*이 아닌 member_name과 member_addr를 입력했을 땐 그 칼럼만 보이게 됩니다.

데이터 활용하기 - WHERE (기본미션)

다음으로 아이유 회원에 대한 정보만을 추출하겠습니다

SELECT * FROM shop_db.member
WHERE member_name = '아이유';

Where문으로 추출할 데이터의 조건을 쓸 수 있습니다.

데이터 베이스 개체

지금까지는 데이터베이스의 개체 중 테이블만을 봤습니다.

하지만 데이터베이스에서는 테이블 외의 인덱스, 뷰, 스토어드 프로시저, 트리거, 함수, 커서 등의 개체도 필요합니다.

  • 인덱스 : 데이터를 빠르게 찾아볼 수 있도록 하는 개체
  • : 바로 가기 아이콘과 비슷한 개념으로, 가상의 테이블
  • 스토어드 프로시저 : 여러 개의 SQL을 묶어주거나 프로그래밍 기능 제공

인덱스부터 알아보도록 하겠습니다

위 SQL문을 실행했을 때 어떻게 아이유를 찾았는지 살펴보겠습니다

현재 인덱스가 없기 때문에 처음부터 끝까지 다 찾아 '아이유'를 찾았습니다

CREATE INDEX idx_member_name ON member(member_name);

하지만 위 SQL문을 입력한 후 다시 아이유를 찾았을 때 인덱스를 통해 아이유를 찾을 수 있었습니다.

결과는 달라지지 않지만 과정이 달라진다는 것을 명심해야 할 것 같습니다.

뷰는 테이블과 동일한 성격의 데이터베이스 개체로 뷰를 활용하면 보안도 강화하고,

SQL문도 간단하게 사용할 수 있다고 합니다.

CREATE VIEW member_view
AS SELECT * FROM member;

위의 SQL문으로 member테이블과 연결되는 member_view를 만들었습니다.

member_view에 접근하였을 때 member테이블에 접근했을 때와 같은 결과가 나옵니다.

결과가 같으면 뷰를 왜 사용하나?

뷰는 보안에 도움이 되고, 긴 SQL문을 간단하게 만들 수 있어 사용한다고 합니다.

스토어드 프로시저는 프로그래밍 기능으로, 여러 개의 SQL문을 하나로 묶어 사용할 수 있습니다.

SELECT * FROM member WHERE member_name = '나훈아';
SELECT * FROM product WHERE product_name = '삼각김밥';

위와 같은 SQL문을 사용하면 별도의 탭으로 두 결과가 나옵니다.

저 두 SQL문을 하나의 스토어드 프로시저로 만들어보겠습니다.

DELIMITER //
CREATE PROCEDURE myProc()
BEGIN
SELECT * FROM member WHERE member_name = '나훈아';
SELECT * FROM product WHERE product_name = '삼각김밥';
END // 
DELIMITER ;

위의 SQL문을 사용하여 myProc()라는 프로시저를 만들었습니다.

새로운 용어들이 굉장히 많은데, 자세한 내용은 나중에 다루는 것 같습니다.

CALL myProc();

CALL문을 통해 스토어드 프로시저를 불러오면

전과 결과가 같은 것을 볼 수 있습니다.

1주 차 포스팅은 여기서 마치도록 하겠습니다.

처음이라 더 정성스럽게 포스팅하였는데, 혼공단이 끝날 때까지 유지할 수 있도록 노력하겠습니다.

과연 몇 명이나 볼까나 생각도 들지만... 전에 보잘것없는 글도 많은 분들이 보셔서

이번에도 그럴 거라 기대하고 있겠습니다!

사실 저번 혼공단은 제 글이 너무 허접했는데, 아마 시험기간과 여러 바쁜 일들이 겹쳐서

그런 거라 믿고! 이번에는 겨울방학이니 더더 열심히 공부해 보겠습니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.