관리 메뉴

클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

SQL 기본 문법 1 - 기본 중의 기본 SELECT ~ FROM ~ WHERE 1 : 실전용 데이터베이스 구축 본문

알고리즘 및 자료 관리/SQL

SQL 기본 문법 1 - 기본 중의 기본 SELECT ~ FROM ~ WHERE 1 : 실전용 데이터베이스 구축

huenuri 2024. 10. 12. 20:09

여기서부터는 무척 어려운 내용이라 공부하는 게 많이 뻑뻑하다. 그래도 조금씩 공부해 볼 것이다. 이해가 안 되면 강의를 한 번 더 들어서라도 내 것으로 만들어야지. 며칠 전부터 공부하려던 단원인데 오늘 드디어 다시 시작해 본다.

SELECT는 SQL 문에서 가장 많이 사용되는 문법으로, 데이터베이스에서 데이터를 구축한 후에 그 내용들을 활용한다.

 

시작하기 전에

SELECT 문은 구축이 완료된 테이블에서 데이터를 추출하는 기능을 한다. SELECT를 아무리 많이 사용해도 기존의 데이터가 변경되지 않는다.

SELECT의 가장 기본 형식은 SELECT ~ FROM ~ WHERE이다. SELECT 바로 다음에는 열 이름이, FROM 다음에는 테이블 이름이 나온다. WHERE 다음에는 조건식이 나오는데, 조건식을 다양하게 표현함으로 데이터베이스에서 원하는 데이터를 뽑아낼 수 있다.

 


 

 

 

 

 

실습용 데이터베이스 구축

먼저 실습용 데이터베이스를 만들어서 사용해 본다.

 

실습용 데이터베이스 개요

이제 본격적으로 SELECT 문을 연습할 차례이다. 하지만 SELECT를 실행하기 위해서는 데이터베이스가 있어야 한다. 앞으로 사용하게 될 데이터베이스는 바로 이것이다.

'인터넷 마켓 DB 구성도'는 인터넷 마켓에서 운영하는 데이터베이스를 단순화한 것이라고 생각하면 된다. 인터넷 마켓은 특별히 그룹으로 이루어진 가수만 가입되도록 했다고 가정한다.

 

가수 그룹의 리더는 물건을 사기 위해 화원 가입을 한다. 입력한 회원 정보는 회원 테이블(member)에 입력된다. 더 많은 정보를 입력해야 하지만, 간단히 아이디/이름/인원/주소/국번/전화번호/평균 키/데뷔 일자 등만 입력하는 것으로 한다.

회원 가입을 한 후에 인터넷 마켓에서 물건을 구입하면 회원이 구매한 정보는 구매 테이블(buy)에 기록된다. 그러면 인터넷 마켓의 배송 담당자는 구매 테이블을 통해서 회원이 주문한 물건을 준비하고, 회원 테이블에서 구매 테이블의 아이디와 일치하는 회원의 아이디를 찾아서 그 행의 주소로 물품을 배송한다.

 

예를 들어, 배송 담당자는 구매 테이블에서 BLK라는 아이디를 가진 회원기 구매한 지갑 2개, 맥북 프로 1개, 청바지 3벌을 포장한 후에 회원 테이블에서 BLK라는 아이디를 찾는다. 그리고 포장박스에 이름은 '블랙핑크', 주소는 '경남', 연락처는 '055-222-2222'라고 적어서 배송하면 된다.


 

 

 

실습용 데이터베이스 만들기

실습용 데이터베이스는 SQL을 사용하겠다. 

 

1. 인터넷 마켓 데이터베이스 SQL 파일 다운로드하기

한빛미디어 출판사 홈페이지와 네이버 카페에서 받는 방법이 있는데, 출판사 홈페이지에서 받으면 다운로드 시간이 굉장히 오래 걸리고 중간에 인터넷이 끊기는 등 문제가 발생했다. 카페에서 받으니 1분도 안 걸렸다. 

 

 

압축을 풀고 이제 맨 아래에 있는 market_db를 사용할 것이다.


 

 

 

2. MySQL Workbench 실행하고 다운로드한 파일 받기

 

Open SQL Script를 선택하고 파일을 열면 된다.

 


 

 

 

3. 테이블 실행하고 확인하기

SQL을 실행하고 member 1 탭을 클릭해서 회원 테이블의 완성된 상태를 확인해 본다.

 

 

회원 테이블의 내역이 이렇게 보이고, 구매 테이블 내역도 확인할 수 있다.

 

 

 

이 파일을 열었다 닫으면 실습한 내용을 언제든지 다시 실행할 수 있으며, 그때마다 market_db가 초기화되는 효과를 얻는다.


 

 

 

market_db.sql 파일 내용 살펴보기

 

1. 데이터베이스 만들기

 

기존의 market_db가 있으면 삭제하라는 문장이다. db가 없으면 데이터베이스를 새로 만든다. 이것은 이전에 학습했던 것처럼 스키마를 만드는 과정과 동일하다.

 


 

 

 

2. 회원 테이블(member) 만들기

 

USE 문은 market_db 데이터베이스를 선택하는 문장이다. 앞으로 이 DB를 사용하겠다는 의미이다. 이전 장에서 워크벤치를 사용할 때 스키마 패널에서 shop_db 데이터베이스를 더블 클릭해서 선택했다. 이 동작과 동일한 효과를 갖는다.

 

 

member 테이블을 만드는 과정이다. '인터넷 마켓 DB 구성도'에는 열 이름이 한글로 표현했지만, 여기서는 모두 영문으로 표기해야 한다. 아이디, 번호 등 특정 이름을 표현할 때는 _를 사용하는 것이 좋다. 그리고 데이터 형식을 적는데 괄호 안에 들어갈 데이터의 개수를 표시한다.

전화번호를 CHAR로 표현한 이유는 숫자로 하면 앞에 0을 표시할 수 없기에 문자형인 CHAR로 해주었다. SMALLINT는 정수이지만 좀 더 작은 정수형이다.

 

이 내용도 이전 장에서 테이블을 만든 것과 동일하다.


 

 

 

3. 구매 테이블(buy) 만들기

구매 테이블을 생성한다.

 

 

AUTO_INCREMENT는 자동으로 숫자를 입력해 준다는 의미이다. 즉, 순번을 직접 입력할 필요 없이 1, 2, 3, ...과 같은 방식으로 자동으로 증가한다.


 

 

 

4. 데이터 입력하기

이제는 데이터를 입력하는 INSERT 문을 살펴보겠다. 

 

 

회원 테이블이 있고, 아래 구매 테이블도 있다. 여기 보면 NULL이라고 되어 있는 값이 있는데 전화번호가 없을 수도 있기에 임의로 작성해 본 것이다.  회원 테이블에 값을 입력하고 CHAR, VARCHAR, DATE형은 작은따옴표로 값을 묶어주었다. INT형은 작은따옴표 없이 그냥 넣어주면 된다.

 

 

구매 테이블의 첫 번째 열인 순번은 자동으로 입력되므로 그 자리에는 NULL을 써주었다. 이 SQL 문 역시 앞선 장에서 Select Rows - Limit 1000으로 데이터를 입력한 것과 동일한 효과가 있다.


 

 

 

5. 데이터 조회하기

 

마지막 행에서는 입력된 내용을 확인하기 위해 SELECT로 조회했다.

 


 

 

 

 

학습을 마치고

이 다음에는 SELECT 문을 사용해서 SQL을 작성하는 건데 분량이 많아서 다음 포스트에서 이어서 학습하려고 한다. MySQL은 사용해본지 얼마 되지 않아서 아직 사용법이 익숙하지 않다. 그래도 오라클보다 훨씬 쉽고 디자인적인 부분도 마음에 든다.

오늘 안에 3장을 다 마치려고 했는데 언제나 내가 목표한 것보다 30% 이상은 달성하지 못하는 것 같다.