본문 바로가기

Development/SQL

DB와 조건(WHERE)에 따른 데이터 조회(SELECT)

들어가며

응용 프로그램을 개발하면서 이것저것 검색해가며 SQLite, MySQL을 써보았지만, 다시 기초를 다잡고 가자는 마음에 스파르타코딩클럽 내일배움단을 통해 SQL을 공부하고자 하였다. 이 교육과정에서는 CRUD(Create, Read, Update, Delete) 중에서 READ만 다루고 있다. 처음에는 이 부분이 아쉽게 느껴졌으나, 1주차 강의를 듣고나서는 READ만 제대로 알아도 데이터 가공과 다양한 응용을 하는데 충분하다고 느꼈다.

데이터베이스

대부분 직장에서 가장 기본적으로 사용하는 데이터 관리용 문서는 엑셀이라고 생각한다. 엑셀 필터, 함수 등 다양한 기능을 활용하여 데이터를 보기 쉬운 표로 관리할 수 있으나, 데이터가 많아질수록 처리 속도가 늦어지거나, 동시작업이 불가능하다는 한계가 있다. 이와 같은 문제점은 데이터베이스를 사용함으로써 어느정도 극복할 수 있다.

 

🏷 처리 속도가 늦다!

데이터가 굉장히 많은 경우 처리 속도가 늦어진다. 실제로 직장생활 할 때 약 30개의 열과 약 6만 행의 데이터를 직접 관리하여야 했는데, 필터를 사용하거나 함수를 사용할 때마다 '응답없음' 상태 메시지로 인해 업무 흐름이 끊길때가 종종 있었다. 이후 원하는 결과를 얻었을 때에는 정말 다행히지만, 가끔 강제 종료라도 되면 야근의 늪에 빠지곤 했다.

 

🏷 동시작업이 불가능하다!

구글 스프레드시트를 이용하는 경우에는 동시작업이 가능하지만 처리 속도가 일반 엑셀 프로그램에 비해 늦기 때문에 대부분 일반 엑셀 프로그램을 많이 이용한다. 직장에서는 여러 팀원들이 데이터를 하나의 엑셀 파일로 가능할 때, 수정하는 상황이 발생하면 변경된 부분에 음영을 넣거나, 메모를 남겨놓고, 별도의 시간을 들여 루트 파일에 다시 옮기곤 했다.

SQL과 DB

SQL(Structured Query Language)은 데이터베이스에 요청(Query)를 보내 원하는 동작을 수행하도록 하는 일종의 언어로, 엑셀의 함수와 비슷하다고 할 수 있다. 엑셀에서는 데이터 집합을 시트(sheet)로 구분하고, 열과 행에 위치한 각각의 셀(cell)에 데이터를 입력한다. 이와 마찬가지로 데이터베이스에서는 데이터 집합을 테이블(table)이라고 하고, 열을 필드(field)라고 한다. 또한, 여러 시트가 하나의 엑셀 파일에 존재하는 것과 같이 여러 테이블은 하나의 데이터베이스에 저장된다.

구분 엑셀 데이터베이스
데이터 제목 필드
데이터 집합 시트 테이블
데이터 집합의 그룹 파일 데이터베이스

SQL로 작성된 명령어를 쿼리문이라고 하는데, 쿼리문을 통해 DB 생성, 테이블 생성, DB에 존재하는 테이블 조회, 조건에 따른 데이터 조회 등 다양한 작업을 수행할 수 있다.

실습

❓ DB에 존재하는 모든 테이블 알아보기

SHOW TABLES;

 

❓ 사용자의 모든 데이터 조회하기

SELECT * FROM users;

 

❓ 사용자의 이름, 결제수단, 점수 필드의 데이터만 조회하기

SELECT name, payment_method, point FROM user;

 

❓ 결제수단이 'CARD'인 사용자 조회하기

SELECT * FROM user
WHERE payment_method = 'CARD';

 

❓ 결제수단이 'CARD'가 아닌 사용자 조회하기

SELECT * FROM user
WHERE payment_method != 'CARD';

 

❓ 점수가 5,000점 이상인 사용자의 이름과 점수 조회하기

SELECT name, point FROM user
WHERE point >= 5000;

 

❓ 결제수단이 'kakaopay'이면서 점수가 2,000점 이상인 사용자 조회하기

SELECT * FROM user
WHERE payment_method = 'kakaopay' AND point >= 2000;

 

❓ 성(last name)이 '최'인 사용자 조회하기

SELECT * FROM user
WHERE name LIKE '최%';

 

❓ 이메일 주소에 'gmail'이 포함하는 사용자 조회하기

SELECT * FROM userWHERE email LIKE '%gmail%';

 

❓ 가입일자가 2022년 01월 01일부터 2022년 01월 31일인 사용자 조회하기

SELECT * FROM userWHERE created_at BETWEEN '2022-01-01' AND '2022-01-31';

 

❓ 나이가 25, 27, 29인 사용자 조회하기

SELECT * FROM userWHERE age IN(25, 27, 29);

 

❓ 점수가 5,000점 이상인 사용자 중 5명만 조회하기

SELECT * FROM userWHERE point >= 5000LIMIT 5;

 

❓ 중복제거한 결제수단의 종류 조회하기

SELECT DISTINCT(payment_method) FROM user;

 

❓ 현재 서비스에 가입한 인원 수 구하기

SELECT COUNT(*) FROM users;

 

❓ 중복제거한 결제수단의 갯수 구하기

SELECT COUNT(DISTINCT(payment_method)) FROM user;

마치며

이렇게 1주차 강의를 마쳤다. 예전에 배운 내용이었지만 SQL을 오랜만에 다뤄서 그런지 새로 배우는 듯한 느낌이었다. 뿐만 아니라 스파르타코딩클럽에서 잘 짜여진 DB를 제공해주는데 이 점이 굉장히 마음에 들었다. 학교에서 DB 수업을 들을 때에는 MySQL을 설치하고, 테이블 생성해서 데이터 넣고, 그 다음에 위에 정리한 내용을 다루었는데, MySQL 버전(5.7과 8,0) 차이로 인해 여러번 재설치 하는 과정에서 이미 지쳐있던 기억이 있기 때문이다. 또한, 이론적인 설명이 길지 않고 바로 실습할 수 있는 퀴즈나 과제를 제공해주는데, 이를 해결하는 과정에서 직접 쿼리문을 작성해봄으로써 쉽게 이해할 수 있어서 매우 효율적이라고 생각한다. 마지막으로 개발일지를 작성하는 과정에서 한 번 더 복기하여 제대로 된 복습이 가능한 점 또한 매우 좋다고 생각한다.