SQL

[혼자 공부하는 SQL] chapter 2. 실전용 SQL 미리 맛보기

brux 2023. 5. 1. 18:13

https://www.hanbit.co.kr/store/books/look.php?p_code=B6846155853 

 

혼자 공부하는 SQL

데이터베이스 개념부터 SQL 문법까지 입문자의 눈높이에 맞춰 구성했습니다. 지루한 설명 대신 도식화된 이미지와 예제를 통한 실습으로 책의 마지막까지 흥미롭게 학습할 수 있습니다. 프로그

www.hanbit.co.kr

위 내용은 <혼자 공부하는 SQL>을 기반으로 공부하여 작성 내용입니다.

 

2-1 건물을 짓기 위한 설계도 : 데이터베이스 모델링

폭포수 모델(waterfall model) : 소프트웨어 개발 절차 중 하나

  1. 프로젝트 계획
  2. 업무분석
  3. 시스템 설계
  4. 프로그램 구현
  5. 테스트
  6. 유지보수

데이터베이스 모델링 : 세상에서 사용되는 사물이나 작업을 DBMS의 데이터베이스 개체로 옮기기 위한 과정

 

전체 데이터베이스 구성도

 

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

데이터베이스 구축 절차

  • 데이터베이스 만들기 -> 테이블 만들기 -> 데이터 입력/수정/삭제하기 -> 데이터 조회/활용하기

데이터베이스 만들기

  • 스키마(schema)와 데이터베이스는 동일한 용어, 앞으로 스키마 용어가 나오면 그냥 데이터베이스라고 이해해도 됨

  • [Name]에 shop_db를 입력하면 자동으로 탭 이름도 동일하게 변경됨
  • [Apply] 버튼을 클릭하면 Apply SQL Script to Database 창에 SQL 문이 자동으로 생성됨
  • 다시 [Apply]와 [Finish] 버튼을 클릭하면 좌측 [SCHEMAS] 패널의 목록에 'shop_db' 추가됨

테이블 생성하기

  • MySQL Workbench 창의 [SCHEMAS] 패널에서 'shop_db'의 화살표를 클릭해 확장하고 [Tables]를 마우스 오른쪽 버튼으로 클릭한 후 [Create Tables]을 선택

  • [Table Name(테이블 이름)] 입력 후 [Column Name(열 이름)]과 [Datatype(데이터 형식)] 입력 후 [Apply]하면 완성

  • [shop_db] - [Tables] - [member]를 선택하고 마우스 오른쪽 버튼을 클리한 후 [Select Rows - Limits 1000] 선택

  • NULL부분을 클릭해서 데이터 입력

데이터 활용하기

  • [SCHEMAS] 패널의 shop_db를 더블 클릭 -> 진하게 변경되면 앞으로 쿼리 창에 입려할 SQL이 선택된 shop_db에 적용된다는 의미

  • SELECT의 기본 형식은 SELECT 열_이름 FROM 테이블 이름 [WHERE 조건]
  • *은 모든 열 의미함
  • SQL을 실행하면 현재 결과의 건수와 조회하는 데 소요된 시간(초) 표
SELECT * FROM member; // '회원 테이블의 모든 열을 보여줘' 의미

 

  • 위의 화면은 2개의 SQL이 모두 실행된 것
  • 이 상황에서 하나의 SQL만 실행하려면 실행하려는 SQL문을 드래그하여 실행해야함

2-3 데이터베이스 개체

모든 데이터베이스 개체는 독립적으로 존재하는 것이 아닌라 테이블과 상화 연관이 있음

 

인덱스 : 데이터를 조회할 때 결과가 나오는속도를 획기적으로 빠르게 해줌

뷰 : 테이블의 일부를 제한적으로 표현할 때 주로 사용

스토어드 프로시저 : SQL에서 프로그래밍이 가능하도록 해줌

트리거 : 잘못된 데이터가 들어가는 것을 미연에 방지하는 기능

 

인덱스

  • 테이블에서 '아이유'를 찾을 때 회원 테입르의 1행부터 끝까지 전체를 살펴보는 SQL
  • Full Tabel Scan -> 처음부터 끝까지 엄청나게 오랜 시간이 걸려서 '아이유'를 찾은 것
SELECT * FROM member WHERE member_name = '아이유';

 

  • 다음 SQL 실행하면 인덱스 생성됨, 결과는 눈에 보이지 않음
  • ON member(member_name) : member 테이블의 member_name 열에 인덱스를 지정하라는 의미
  • Non-Unique Key Lookup : 인덱스를 통해 결과를 찾음
CREATE INDEX idx_member_name ON member(member_name);

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

 

  • 테이블과 상당히 동일한 성격
  • 보안 강화, SQL문 간단 사용 가능
  • 가상 테이블
# 기본적인 뷰 만들기
CREATE VIEW member_view
AS
		SELECT * FROM member
# SQL은 들여쓰기를 하지 않아도 잘 작동함
# 하지만 1줄에 모두 쓰면 가독성이 떨어지기 때문에 여기서는 들여쓰기 함

# 뷰에 접근하기
SELECT * FROM member_view

 

스토어드 프로시저

  • SQL 안에서도 일반 프로그래밍 언어처럼 코딩 가능
  • MySQL에서 제공하는 프로그래밍 기능

두 SQL을 각각 실행하는 방법

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

스토어드 프로시저로 만들어 실행하는 방법

  • DELIMITER // ~ DELIMITER ; -> 구분 문자 의미
  • BEGIN과 END 사이에 SQL문 넣으면 
DELIMITER //
CREATE PROCEDURE myProc()
BEGIN
	SELECT * FROM member WHERE member_name = '나훈아';
	SELECT * FROM product WHERE product_name = '삼각김밥';
END//
DELIMETER ;

CALL myProc() # 스토어드 프로시저 호출