혼자 공부하는 SQL - 1주차
- 부족한 SQL 역량을 키울겸 혼공학습단 10기를 신청하였고, 선정되었습니다.
- 매주 학습할 분량 진도, 기본, 선택 미션을 수행하고, 블로그에 업로드하는 것이 미션~!
- 1주차의 분량은 다음과 같습니다다.
- 각 챕터별로 공부하면서 정리는 깃허브 내에 마크다운으로 정리하였습니다.
- 블로그에서는 한 번 더 중요한 내용들을 간단하게 정리해 보겠습니다.
https://github.com/kho903/Book/tree/main/%ED%98%BC%EC%9E%90%20%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94%20SQL
Chap 01. 데이터베이스와 SQL
- 첫번째 장에선 데이터베이스가 뭔지, SQL이 뭔지 등 알아보고, MySQL 및 Workbench를 설치하는 시간을 가졌습니다.
- 간단하게 정리해 보겠습니다.
데이터베이스, DBMS, SQL
- 데이터베이스는 데이터 집합, DBMS는 데이터베이스 관리하는 소프트웨어로 MySQL은 관계형DB(RDBMS)입니다.
- SQL은 관계형 DB에서 사용되는 언어. 즉, 데이터베이스 구축, 관리를 용이하게 하기 위해 사용되는 언어입니다.
- 테이블이란 열과 행으로 이루어진 2차원 구조로, RDBMS의 핵심 개체입니다.
MySQL, 워크벤치
- MySQL 서버는 데이터베이스를 운영하는 프로그램. MySQL 워크벤치는 MySQL 서버에 접속하기 위한 프로그램입니다.
Chap 02. 실전용 SQL 미리 맛보기
데이터베이스 모델링
- 데이터베이스 모델링은 테이블의 구조를 미리 설계하는 개념으로, 테이블 구조가 결정됩니다. 정답이 없고, 좋은 모델링과 나쁜 모델링만 존재합니다.
데이터베이스 구축 절차
- 데이터베이스 모델링이 완료되면 절차에 따라 데이터베이스를 구축합니다.
- 데이터베이스 만들기
- 테이블 만들기
- 데이터 입력/수정/삭제하기
- 데이터 조회/활용하기
데이터베이스 개체
- 이 내용은 선택미션이므로 아래에서 설명하겠습니다~
기본 미션 1주차!
- shop_db의 member 테이블에서 아이유의 정보만 추출 후 반환.
select * from member where member_name = '아이유';
- 해당 sql을 사용하였습니다. member 테이블의 모든 내용을 select 하는데, where 절로 member_name 이 '아이유'인 것만 추출하였다.
선택 미션 1주차! 데이터베이스 개체 3가지 설명하기
- 먼저, 데이터베이스 개체는 테이블, 인덱스, 뷰, 스토어드, 프로시저, 트리거, 함수, 커서 등이 있습니다.
- 이중 인덱스, 뷰, 스토어드 프로시저에 대해 설명해 보겠습니다.
인덱스
- 간단하게 생각하면 책의 제일 뒤에 수록되는 '찾아보기'와 같은 개념입니다.
select * from where member_name = '아이유';
- 위 sql문을 워크벤치에서 실행하고, 실행 계획을 보면 Full Table Scan이라고 나옵니다. 즉, 전체 테이블을 검색하는 것으로 처음부터 끝까지 검색해서 나온 결과입니다.
- 그렇다면 인덱스를 생성해 보겠습니다.
create index idx_member_name on member(member_name);
- 인덱스는 열에 지정하고 ON member(member_name)이라고 적어줍니다.
- 이렇게 하고 select문을 사용하면 결과는 같지만, 실행 계획은 달라집니다. Non-Unique Key Lookup 이라고 나오는데, 인덱스를 통해 결과를 찾으면 이렇게 나옵니다.
뷰
- 뷰는 테이블과 상당히 동일한 성격의 데이터베이스 개체로, 보안 강화 및 SQL문을 간단하게 사용할 수 있습니다.
- 간단하게 '가상의 테이블'이라고 생각하면 됩니다.
create view member_view
as
select * from member;
select * from member_view;
+-----------+-------------+----------------------------+
| member_id | member_name | member_addr |
+-----------+-------------+----------------------------+
| hero | 임영웅 | 서울 은평구 증산동 |
| iyou | 아이유 | 인천 남구 주안동 |
| jyp | 박진영 | 경기 고양시 장항동 |
| tess | 나훈아 | 경기 부천시 중동 |
+-----------+-------------+----------------------------+
4 rows in set (0.00 sec)
- 뷰에 접근하는 것은 테이블에 접근하는 것과 동일하고, 보안 및 긴 SQL을 간략하게 만들 수 있다는 장점이 있습니다.
스토어드 프로시저
- 스토어즈 프로시저는 SQL 안에서도 일반 프로그래밍 언어처럼 코딩을 가능하게 해줍니다.
- 여러 개의 SQL문을 하나로 묶어 주고, + 연산식, 조건문, 반복문을 사용할 수 있게 해줍니다.
select * from tableA where name = '김지훈';
select * from tableB where grade = 'A";
- 위 두 SQL문을 항상 같이 써야 한다고 가정하고 묶어보겠습니다.
delimiter
create procedure jihunProc()
begin
select * from tableA where name = '김지훈';
select * from tableB where grade = 'A";
end
delimiter ;
call jihunProc();