소개
이 프로젝트에서는 MySQL 데이터베이스에서 "favorite" 테이블을 만드는 방법을 배우게 됩니다. "favorite" 테이블은 "usercourse" 테이블에서 각 사용자의 가장 긴 학습 시간을 가진 강좌를 저장합니다.
👀 미리보기
MariaDB [labex]> select * from favorite limit 10;
+----+-----------+-------------+------------+
| id | user_name | course_name | study_time |
+----+-----------+-------------+------------+
| 2 | user_01 | English | 101 |
| 3 | user_02 | Chinese | 102 |
| 4 | user_03 | Chemical | 103 |
| 5 | user_04 | Physics | 104 |
| 6 | user_05 | Biology | 105 |
| 7 | user_06 | Painting | 106 |
| 8 | user_07 | Music | 107 |
| 9 | user_08 | Computer | 108 |
| 10 | user_09 | History | 109 |
| 11 | user_10 | Math | 110 |
+----+-----------+-------------+------------+
10 rows in set (0.000 sec)
🎯 과제
이 프로젝트에서 다음을 배우게 됩니다:
sudo명령어를 사용하여 MySQL 데이터베이스에 접근하는 방법- SQL 스크립트에서 MySQL 데이터베이스로 데이터를 가져오는 방법
CREATE TABLE AS문을 사용하여 특정 열을 가진 새로운 테이블을 만드는 방법- "favorite" 테이블에 필요한 데이터를 검색하기 위해 여러 테이블을 조인 (join) 하는 방법
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다:
- 명령줄을 사용하여 MySQL 데이터베이스를 관리하는 방법을 이해합니다.
- 여러 기존 테이블의 데이터를 기반으로 새로운 테이블을 생성하는 SQL 쿼리를 구현합니다.
- 테이블에서 각 그룹의 최대값을 찾는 개념을 적용합니다.
- 특정 데이터 관리 작업을 수행하기 위해 SQL 문을 사용하는 능력을 보여줍니다.
MySQL 접속 및 데이터베이스 임포트
이 단계에서는 MySQL 데이터베이스에 접속하고 필요한 데이터를 가져오는 방법을 배우게 됩니다.
- 터미널을 열고 다음 명령어를 사용하여 MySQL 서비스를 시작합니다:
sudo service mysql start
- 다음 명령어를 사용하여 MySQL 클라이언트에 접속합니다:
sudo mysql
labex_db_info.sql스크립트에서 MySQL 로 데이터를 가져옵니다:
SOURCE /home/labex/project/labex_db_info.sql;
이렇게 하면 필요한 데이터가 MySQL 데이터베이스로 가져와집니다.
즐겨찾기 테이블 생성
이 단계에서는 각 사용자의 가장 긴 학습 시간을 가진 강좌를 저장할 "favorite" 테이블을 생성합니다.
searchForFavoriteCourses.sql파일을 엽니다.searchForFavoriteCourses.sql파일에서 다음 열을 사용하여 "favorite" 테이블을 생성합니다:id(기본 키, primary key)user_name(사용자 이름)course_name(강좌 이름)study_time(학습 시간)
create table favorite as
SELECT t1.id, t1.user_name, t2.course_name, t1.study_time
FROM (
SELECT a.id, a.course_id, a.study_time, b.user_name
FROM (
SELECT t0.id, t0.user_id, t0.course_id, t0.study_time
FROM usercourse t0
INNER JOIN (
SELECT user_id, MAX(study_time) AS max_study_time
FROM usercourse
GROUP BY user_id
) t_max ON t0.user_id = t_max.user_id AND t0.study_time >= t_max.max_study_time
) a LEFT JOIN user b ON a.user_id = b.user_id
) t1 LEFT JOIN course t2 ON t1.course_id = t2.course_id
이 쿼리는 "usercourse" 및 "user" 테이블을 조인하여 사용자 이름을 가져온 다음 "course" 테이블을 조인하여 강좌 이름을 가져와 "favorite" 테이블을 생성합니다. 이 테이블은 각 사용자의 가장 긴 학습 시간을 가진 강좌를 저장합니다.
즐겨찾기 테이블 검증
이 단계에서는 "favorite" 테이블의 내용을 확인합니다.
- MySQL 프롬프트에서 다음 명령을 실행하여
searchForFavoriteCourses.sql스크립트를 실행합니다:
SOURCE /home/labex/project/searchForFavoriteCourses.sql;
- "favorite" 테이블의 처음 10 개 행을 표시하려면 다음 쿼리를 실행합니다:
MariaDB [labex]> select * from favorite limit 10;
+----+-----------+-------------+------------+
| id | user_name | course_name | study_time |
+----+-----------+-------------+------------+
| 2 | user_01 | English | 101 |
| 3 | user_02 | Chinese | 102 |
| 4 | user_03 | Chemical | 103 |
| 5 | user_04 | Physics | 104 |
| 6 | user_05 | Biology | 105 |
| 7 | user_06 | Painting | 106 |
| 8 | user_07 | Music | 107 |
| 9 | user_08 | Computer | 108 |
| 10 | user_09 | History | 109 |
| 11 | user_10 | Math | 110 |
+----+-----------+-------------+------------+
10 rows in set (0.000 sec)
이 쿼리는 "favorite" 테이블의 처음 10 개 행을 표시하여 각 레코드의 사용자 이름, 강좌 이름 및 학습 시간을 보여줍니다.
축하합니다! "favorite" 테이블을 성공적으로 생성하고 내용을 확인했습니다.
요약
축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.
