즐겨찾는 강좌 검색

SQLBeginner
지금 연습하기

소개

이 프로젝트에서는 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 데이터베이스에 접속하고 필요한 데이터를 가져오는 방법을 배우게 됩니다.

  1. 터미널을 열고 다음 명령어를 사용하여 MySQL 서비스를 시작합니다:
sudo service mysql start
  1. 다음 명령어를 사용하여 MySQL 클라이언트에 접속합니다:
sudo mysql
  1. labex_db_info.sql 스크립트에서 MySQL 로 데이터를 가져옵니다:
SOURCE /home/labex/project/labex_db_info.sql;

이렇게 하면 필요한 데이터가 MySQL 데이터베이스로 가져와집니다.

✨ 솔루션 확인 및 연습

즐겨찾기 테이블 생성

이 단계에서는 각 사용자의 가장 긴 학습 시간을 가진 강좌를 저장할 "favorite" 테이블을 생성합니다.

  1. searchForFavoriteCourses.sql 파일을 엽니다.
  2. 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" 테이블의 내용을 확인합니다.

  1. MySQL 프롬프트에서 다음 명령을 실행하여 searchForFavoriteCourses.sql 스크립트를 실행합니다:
SOURCE /home/labex/project/searchForFavoriteCourses.sql;
  1. "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 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.