업무를 하다 보면, 데이터에서 필요한 정보를 추출해 내야 할 때가 있는데요.
엑셀에서 보고 싶은 정보를 확인하기 위해 필터를 거는 것처럼, 데이터베이스에서 간단한 쿼리문으로 보고 싶은 정보를 추출할 수 있습니다.
개발자에게 일일이 요청할 수도 있지만, 그 과정은 번거로울 뿐만 아니라 많은 시간이 소모되므로 DB에 대한 간단한 이해와 명령어는 알아두면 좋을 것 같습니다.
이번 콘텐츠는 데이터베이스부터 SQL 활용에 대해 소개해 드리겠습니다.
DB와 DBMS 구분
• DB(Database)
우리가 항상 사용하는 은행 앱에서 보이는 계좌 잔액을 데이터, 이것을 저장하는 공간을 데이터베이스라고 합니다. 데이터베이스 안에는 데이터가 섞여있는 것이 아닌, 테이블이라는 곳에 데이터가 정리되어 있는데요. 이러한 특성으로 인해 여러 사람들이 데이터를 공유하고, 빠른 조회가 가능합니다.
• RDBMS(Relational Database Management System)
DBMS에 다양한 종류가 있지만 가장 많이 사용하는 것이 RDBMS(관계형 데이터베이스)입니다. 테이블을 떠올리면 관계형 데이터베이스는 어렵지 않습니다. 아직까지는 행과 열로 이루어진 데이터의 집합이라는 것만 인지하셔도 좋습니다.
• NoSQL (Not only SQL)
NoSQL은 비관계형 데이터베이스입니다. 즉 행과 열이 없다는 것입니다.
대부분의 데이터는 key-value 형태로 저장되어 언제든 새로운 필드를 추가할 수 있습니다. 예를 들어 관계형 데이터베이스에서는 고객명, 나이, 등급을 필드로 잡았다면 비관계형 데이터베이스에서는 고객명 안에 나이와 등급을 따로 지정할 수 있게 되는 것입니다.
김와탭
ㄴ 나이: 24
ㄴ 등급: Gold
ㄴ 아이디: whatap
ㄴ ….
그렇기에 새로운 필드를 추가하기에 자유롭다는 장점을 가지고 있습니다.
SQL DB 테이블 구조
DB 테이블은 기본적으로 행과 열로 이루어져 있으며 Excel과 유사한 형태입니다.
데이터가 무작위로 섞여 있는 것이 아닌 형식에 맞게 테이블에 저장되어 있습니다.
- 스키마: 다양한 스키마가 존재하지만 간단히 말해서 구조화할 수 있는 데이터인지 여부
- 인스턴스: 정의된 스키마에 따라 DB에 실제로 저장된 값
- 튜플: 테이블의 행
- 속성: 테이블의 열
- 도메인: 하나의 속성이 가질 수 있는 값
SQL에서 테이블 활용
이제 어려운 개념 부분을 직접 실습을 통해 익혀보도록 하겠습니다.
이번에 사용할 DBMS는 관계형 데이터베이스 중 인기 있는 MySQL을 사용해 보겠습니다.
- 테이블 생성 (CREATE TABLE)
테이블을 생성할 때 테이블 명을 지정해야 합니다. 저는 학생 데이터를 만들었기에 Student라는 테이블을 생성하였습니다. RDBMS에서는 각 칼럼의 속성을 명시해야 합니다. 데이터 타입에 여러 종류가 있어 아래 링크에서 사용할 타입이 지원되는지 확인 후 사용하시면 됩니다
CREATE DATABASE TEST;
USE TEST;
CREATE TABLE `student` (
`student_id` BIGINT(8) NOT NULL,
`name` VARCHAR(10) NOT NULL,
`dept` VARCHAR(10) NOT NULL
);
SHOW TABLES;
테이블이 생성되었는지 확인하기 위해 SHOW TABLES;명령어를 통해 조회하였습니다. student라는 테이블이 잘 생성된 것을 확인할 수 있습니다.
테이블 삭제 (DROP TABLE)
DROP TABLE student;
DROP TABLE은 테이블을 삭제하기 위해 사용되는 명령어입니다. student라는 이름의 테이블이 삭제가 됩니다.
테이블 데이터 삽입 (INSERT INTO)
INSERT INTO `student` (`student_id`, `name`, `dept`) VALUES (3218111, '박윤정', '경영학과');
INSERT INTO `student` (`student_id`, `name`, `dept`) VALUES (3218112, '김종훈', '정치외교학과');
INSERT INTO `student` (`student_id`, `name`, `dept`) VALUES (3218113, '이은별', '상담학과');
테이블에 INSERT INTO를 사용하여 새로운 레코드를 추가하였습니다. 각 Column에는 학번, 이름, 학과가 들어가며, 해당되는 값을 추가하였습니다.
데이터 삭제 (DELETE)
테이블의 데이터를 삭제하고 싶다면, 삭제할 레코드를 먼저 조회하는 것을 권장합니다. SELECT 명령어로 조회하고 싶은 데이터를 인덱스를 한 후, DELETE로 테이블의 행을 제거합니다.
#먼저 Select문을 통해 지우고자 하는 레코드를 조회 후, 삭제(Delete)를 권장합니다.
SELECT * FROM `student`;
#테이블에 student_id=3218111인 행을 제거하기 위해 Delete를 사용하였습니다.
DELETE FROM student WHERE student_id = 3218111;
데이터 변경 (UPDATE)
테이블에 데이터를 수정하기 위해서는 UPDATE문을 사용하면 됩니다.
#sefe mode 초기화 세팅 방법
SET sql_safe_updates=0;
#student_id=3218112인 김종훈을 이수연으로 이름 변경
UPDATE student SET name = "이수연" WHERE student_id = 3218112;
저는 이 코드를 실행할 때, 에러가 발생하였는데요.
만약, 저처럼 테이블의 UPDATE를 진행하는데 아래와 같은 에러가 발생하였다면, set sql_safe_updates=0; 쿼리를 실행하면 잘 작동됩니다. sefe mode를 초기화 세팅해 주면 되니, 에러가 발생하면 이 쿼리를 실행해 보시길 권장 드립니다.
다시, UPDATE문을 실행한 결과 정상적으로 실행되었는데요.해당 테이블에서 WHERE 조건의 만족하는 레코드 값을 수정한 결과입니다.
기존에 student_id = 3218112인 김종훈을 이수연으로 이름을 변경하였습니다.
마치며
이번 포스팅에서는 DB 개념을 소개하고 MySQL을 이용하여 기본 명령어를 활용해 봤는데요. DB부터 SQL 활용까지 이해하는 데 도움이 되셨길 바랍니다.
참고 자료
- [DB 테이블 구조]
- [RDBMS 개념]
- [NoSQL 개념]
- [SQL와 NoSQL 비교]
- [안전모드 초기화 방법]