본문 바로가기
📂 데이터베이스/◾ RDBMS

[DB] MySQL, DBeaver 설치 및 SQL 기본 문법 2(CREATE, DROP, USE, INSERT INTO, SELECT FROM, WHERE, AND, OR, IN, LIKE)

by 이 정규 2023. 5. 22.
728x90
반응형

MySQL, DBeaver 설치 및 SQL 기본 문법 2

2023.05.22 - [DB] - [DB] MySQL, DBeaver 설치 및 SQL 기본 문법 1(CREATE, DROP, USE, INSERT INTO, SELECT FROM, WHERE, AND, OR, IN, LIKE)

 

[DB] MySQL, DBeaver 설치 및 SQL 기본 문법 1(CREATE, DROP, USE, INSERT INTO, SELECT FROM, WHERE, AND, OR, IN, LIKE)

MySQL, DBeaver 설치 및 SQL 기본 문법 1 동기 인텔리감자님 글을 보고 DB 복습 열정이 끓어올라 자료와 영상 링크를 받아 공부하게 됐다. 국비 지원 과정에서 워크벤치에서 MySQL을 다뤄보긴 했으나 기

zzgrworkspace.tistory.com

지난 포스팅에서는 MySQL, DBeaver 설치 방법을 알아보고 DBeaver를 실행하여 데이터베이스를 연결하는 과정까지 진행하였다. 이번 포스팅에서는 데이터베이스에 대한 간단한 설명과 SQL 기본 문법에 대해서 만지작 만지작 해보겠다. 정리 내용은 혼자 공부하는 SQL(MySQL 8.0)이라는 책을 바탕으로 만들어진 유튜브 강의를 보고 작성하였다.

영상 링크


1 강

데이터베이스란?

  • 데이터의 집합

DBMS의 정의?

  • 데이터베이스를 운영하는 소프트웨어

DBMS로 분류되기 위한 2가지 전제?

1. 대용량 데이터 저장

2. 공유가 가능

DBMS의 종류?

  • MySQL, Oracle, MariaDB, SQLite …
DBMS 제작사 작동 운영체제  최신 버전 기타
MySQL Oracle Unix, Linux, Windows, Mac 8.0 ver 오픈 소스(무료) 상용
MariaDB MariaDB Unix, Linux, Windows 10.8 ver 오픈 소스(무료), MySQL 초기 개발자들 독립

DBMS 발전 과정?

  • 종이에 펜으로 기록 > 컴퓨터에 파일로 저장 (공유가 안됌) > DBMS의 대두와 보급

DBMS의 분류?

  • 계층형, 망형, 관계형, 객체지향형, 객체관계형 등으로 분류
  • MySQL은 관계형 DBMS에 포함

2강

MySQL 설치 > DBeaver 설치 > MySQL 로컬 계정 설정 > show databases ; 로 확인

3강

슈퍼마켓을 운영하는 사장 이정구씨는 슈퍼마켓의 물건을 온라인으로도 판매하기 위해 인터넷 쇼핑몰을 구축하려고 한다!
이에 따른 모델링 순서는 다음과 같다.

프로젝트 계획 :
슈퍼마켓의 물건들을 온라인으로 판매하기 위한 계획 단계

업무 분석 :
슈퍼마켓에서 업무가 어떻게 돌아가는지 파악하는것으로 물건은 어디서 들어오고 어떻게 계산하고 재고 관리는 어떻게 하는지에 대한 업무 정리 단계

시스템 설계 :
‘2’에서 정리한 업무 분석을 컴퓨터에 적용시키기 위해 알맞은 형태로 가공하는 과정

프로그램 구현 :
‘3’에서 완성한 시스템 설계의 결과를 실제 프로그래밍 언어로 코딩하는 단계로 이정구씨가 계획한 내용을 온라인으로 제공하기 위해서는 JavaScript, PHP, JSP 등의 프로그래밍 언어를 사용해야 함

테스트 :
코딩된 프로그램에 오류가 없는지 확인하는 과정

유지보수 :
실제 온라인 쇼핑몰을 운영하면서 문제점을 보완하고 기능을 추가하는 과정

4강

데이터베이스 구축 절차?

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

실습 내용

DROP DATABASE IF EXISTS market;
CREATE DATABASE market;

market 이라는 이름의 데이터베이스가 존재한다면 삭제하고 새로 만든다.

USE market;

새로 만든 market 데이터베이스를 사용한다. 해당 데이터베이스를 활성화시킨다는 의미로 테이블에 접근할 수 있게된다.

CREATE TABLE members -- 회원 테이블
( mem_id  	CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디(PK)
  mem_name    	VARCHAR(10) NOT NULL, -- 이름
  mem_number    INT NOT NULL,  -- 인원수
  addr	  	CHAR(2) NOT NULL, -- 지역(경기,서울,경남 식으로 2글자만입력)
  phone1	CHAR(3), -- 연락처의 국번(02, 031, 055 등)
  phone2	CHAR(8), -- 연락처의 나머지 전화번호(하이픈제외)
  height    	SMALLINT,  -- 평균 키
  debut_date	DATE  -- 데뷔 일자
);

CREATE TABLE buy -- 구매 테이블
(  num 		INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -- 순번(PK)
   mem_id  	CHAR(8) NOT NULL, -- 아이디(FK)
   prod_name 	CHAR(6) NOT NULL, --  제품이름
   group_name 	CHAR(4)  , -- 분류
   price     	INT  NOT NULL, -- 가격
   amount    	SMALLINT  NOT NULL, -- 수량
   FOREIGN KEY (mem_id) REFERENCES members(mem_id)
);

market 데이터베이스 안에 TABLE을 만든다. 그리고나서 스키마를 설정해주어야 한다. 스키마는 데이터베이스의 테이블에 저장될 데이터의 구조와 형식을 정의하는 데이터의 설계도이다. 데이터 타입에 따른 종류를 우선 살펴보겠다.

문자형

데이터 타입 범위
CHAR() 0 ~ 255 고정문자 길이
VARCHAR() 0 ~ 65535 가변 문자 길이
INNYTEXT 0 ~ 255 문자길이
TEXT 0 ~ 65535 문자길이
BLOB 0 ~ 65535 문자길이
MEDIUMTEXT 0 ~ 16777215 문자길이
MEDIUMBLOB 0 ~ 16777215 문자길이
LONGTEXT 0 ~ 4294967295 문자길이
LONGBLOB 0 ~ 4294967295 문자길이

숫자형

데이터 타입 크기 최소값 최대값
INT 4Byte -2147483648 ~ 2147483647 0 ~ 4294967295
TINYNT 1Byte -128 ~ 127 0 ~ 255 정수형, UNSIGNED
FLOAT 4Byte -3.402823466×1038 ~ 3.402823466×1038
DOUBLE 8Byte  -1.7976931348623157×10308 ~ 1.7976931348623157×10308 

날짜형

데이터 타입 크기 최소값
DATE 3Byte YYYY-MM-DD
DATETIME 8Byte YYYY-MM-DD HH:MM:SS
TIMESTAMP 4Byte YYYYMMDDHHMMSS
TIME 3Byte HH:MM:SS
  표기방법 출력결과
년도 Y(4자리) 2017, 2018, 2019, ...
y(2자리) 17, 18, 19, ...
M Janeary, February, March, ...
1, 2, 3, ... 
Jan, Feb, Mar, ...
요일 W Sunday, Monday, ...
a Sun, Tue, ...
H 19, 20, 21, ...
h 07, 08, 09, ... 
s 51, 52, 53, ...

TABLE 생성을 마쳤다면 설정된 스키마에 맞게 데이터를 넣어주는 과정이다.

INSERT INTO members VALUES('TWC', '트와이스', 9, '서울', '02', '11111111', 167, '2015.10.19');
INSERT INTO members VALUES('BLK', '블랙핑크', 4, '경남', '055', '22222222', 163, '2016.08.08');
INSERT INTO members VALUES('WMN', '여자친구', 6, '경기', '031', '33333333', 166, '2015.01.15');
INSERT INTO members VALUES('OMY', '오마이걸', 7, '서울', NULL, NULL, 160, '2015.04.21');
INSERT INTO members VALUES('GRL', '소녀시대', 8, '서울', '02', '44444444', 168, '2007.08.02');
INSERT INTO members VALUES('ITZ', '잇지', 5, '경남', NULL, NULL, 167, '2019.02.12');
INSERT INTO members VALUES('RED', '레드벨벳', 4, '경북', '054', '55555555', 161, '2014.08.01');
INSERT INTO members VALUES('APN', '에이핑크', 6, '경기', '031', '77777777', 164, '2011.02.10');
INSERT INTO members VALUES('SPC', '우주소녀', 13, '서울', '02', '88888888', 162, '2016.02.25');
INSERT INTO members VALUES('MMU', '마마무', 4, '전남', '061', '99999999', 165, '2014.06.19');

INSERT INTO buy VALUES(NULL, 'BLK', '지갑', NULL, 30, 2);
INSERT INTO buy VALUES(NULL, 'BLK', '맥북프로', '디지털', 1000, 1);
INSERT INTO buy VALUES(NULL, 'APN', '아이폰', '디지털', 200, 1);
INSERT INTO buy VALUES(NULL, 'MMU', '아이폰', '디지털', 200, 5);
INSERT INTO buy VALUES(NULL, 'BLK', '청바지', '패션', 50, 3);
INSERT INTO buy VALUES(NULL, 'MMU', '에어팟', '디지털', 80, 10);
INSERT INTO buy VALUES(NULL, 'GRL', '혼공SQL', '서적', 15, 5);
INSERT INTO buy VALUES(NULL, 'APN', '혼공SQL', '서적', 15, 2);
INSERT INTO buy VALUES(NULL, 'APN', '청바지', '패션', 50, 1);
INSERT INTO buy VALUES(NULL, 'MMU', '지갑', NULL, 30, 1);
INSERT INTO buy VALUES(NULL, 'APN', '혼공SQL', '서적', 15, 1);
INSERT INTO buy VALUES(NULL, 'MMU', '지갑', NULL, 30, 4);

members 라는 TABLE에 ('BLK', '블랙핑크', 4, '경남', '055', '22222222', 163, '2016.08.08') 라는 값을 넣는다는 의미로 하나하나 노오력을 통해서 넣어주면 된다.

 

하나의 스크립트에 market 이라는 데이터베이스를 만들고 members와 buy라는 테이블을 만들어보았다. 그럼 이제 새로운 스크립트를 하나 만들어 데이터베이스에 접근해서 데이터를 꺼내오는 방법을 알아보자.

새로운 스크립트 만드는 방법

이렇게 MySQL에 연결이 된 스크립트가 생성이 됐다. 하지만 스키마, 즉 데이터베이스를 선택을 안해서 N/A 라고 뜬다. 그래서!!! 늘 시작할 때, 아래와 같은 명령어를 곁들여줘야 한다.

윈도우(W) 아래 문서 그림 오른쪽이 활성화 된 데이터베이스를 표시해준다.

USE market ;

위 코드를 실행하고 다시 확인을 해보면 데이터베이스에 연결이 됐다.

짜자잔 ...

이제 진짜의 진짜의 진짜 오늘 하이라이트인 기본 문법을 사용해보자. 

SELECT - FROM -

SELECT * FROM members ;

*(Asterisk)는 죄다 모두 가져온다는 의미로 members 테이블에 있는 데이터를 모두 출력한다.

SELECT * FROM members ; 출력 결과

SELECT addr FROM members ;

addr 이라는 이름을 가진 열의 데이터를 members 테이블에서 가져와 출력한다.

SELECT addr FROM members ; 출력 결과

SELECT addr, mem_id, phone1 FROM members ;

addr, mem_id, phone1 을 members 테이블에서 가져와 출력한다. 한 번에 여러개의 열을 선택할 수 있다.

SELECT addr, mem_id, phone1 FROM members ; 출력 결과

SELECT mem_name, addr 주소, debut_date '데뷔 일자' FROM members ;

mem_name, addr, debut_date 을 members 테이블에서 가져올 때 addr은 주소, debut_date는 데뷔 일자라는 별칭을 붙여서 가져온다. 그런데 주소는 ' ' 안에 안넣고 데뷔 일자만 넣어준 이유는 별칭에 띄어 쓰기가 들어가는 상황에는 ' ' 안에 넣어주어야 에러가 발생하지 않는다.

SELECT mem_name, addr 주소, debut_date '데뷔 일자' FROM members ; 출력 결과

WHERE 조건

SELECT * FROM members WHERE mem_name = '블랙핑크' ;
SELECT * FROM members WHERE mem_number = 4 ;

이번에는 members의 모든 데이터를 가져오는데 거기에 조건이 붙는 경우다. 조건은 WHERE 뒤에 따라오는 내용이다. 위 코드에서는 mem_name이 블랙핑크인 경우와 mem_number가 4인 경우로 설정했다.

WHERE 을 이용한 조건 탐색 출력 결과

SELECT mem_name, height, mem_number FROM members WHERE height >= 165 AND mem_number > 6 ;

조건을 설정할 때는 하나의 조건만 설정할 필요는 없다. AND나 OR 등의 조건간들의 연결을 통해 다양한 조건을 만들어낼수 있다. 위 코드는 height이 165와 같거나 크고 mem_number가 6 초과인 경우에 해당하는 members의 mem_name, height, mem_number를 출력한다.

SELECT mem_name, height, mem_number FROM members WHERE height >= 165 AND mem_number > 6 ; 출력 결과

SELECT mem_id, addr, mem_name FROM members WHERE height >= 164 AND height <= 167 ;
SELECT mem_id, addr, mem_name FROM members WHERE height BETWEEN 164 AND 167 ;

첫번째 코드와 두번째 코드는 출력 결과가 같지만 다른 사람이 보았을 때 코드 가독성에는 차이가 있다. BETWEEN을 이용해서 코드를 간결하고 이해하기 쉽게 만들어줬다.

SELECT mem_id, addr, mem_name FROM members WHERE height BETWEEN 164 AND 167 ; 출력 결과

SELECT mem_name, addr FROM members WHERE addr = '경기' OR addr = '전남' OR addr = '서울' ;
SELECT mem_name, addr FROM members WHERE addr IN ('경기', '전남', '서울') ;

위와 같이 지역 하나씩을 붙이는게 아니라 IN을 이용해서 코드를 간단하고 가독성 높게 만들어줄수 있다.

SELECT mem_name, addr FROM members WHERE addr IN ('경기', '전남', '서울') ; 출력 결과

SELECT * FROM members WHERE mem_name LIKE '우%' ;

SELECT * FROM members WHERE mem_name LIKE '%대' ;

SELECT * FROM members WHERE mem_name LIKE '%이%' ;

'%'가 어디에 들어가냐에 따라 출력값이 달라진다. '우%'라고 한다면 '우'로 시작하는, '%대'라고 한다면 '대'로 끝나는, '%이%'라고 한다면 '이'가 들어간 mem_name이 출력된다.

'우%'
'%대'
'%이%'

실습을 통해 CREATE, DROP, USE, INSERT INTO, SELECT FROM, WHERE, AND, OR, IN, LIKE의 예제를 풀어보았다. 다음 시간에는 아직 다뤄보지 않은 내용을 다뤄보도록 하겠다. 읽어주셔서 감사드리고 여러분도 화이팅 하는 하루가 됐으면 좋겠다. 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90
반응형

댓글