연구원생활
[SQL] 내가 들은 음악 결산 - 데이터 불러오기
저녕이
2025. 3. 15. 13:43
728x90
반응형
📖참고
코드잇 | SQL 프로젝트 : 내가 들은 음악 결산
🔖 목차
1. [SQL] 내가 들은 음악 결산 - 실습 설명
2. [SQL] 내가 들은 음악 결산 - 데이터 불러오기
👩🏻💻데이터베이스 및 테이블 생성하기 (데이터 불러오기)
- music 데이터베이스 생성하고, 'music'데이터베이스 활성화 하기
CREATE DATABASE music;
USE music;
- 테이블을 music 데이터베이스에 탑재하기
artists(아티스트)
- artists 테이블 구조
컬럼 | 타입 | 설명 |
id | INT | 순차적으로 부여된 정수형 아이디(Primary Key) |
name | VARCHAR | 아티스트 이름 |
- artists 테이블 생성하기
CREATE TABLE IF NOT EXISTS `artists` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(30) NOT NULL);
- 생성된 artists 테이블에 데이터 추가하기
# artists 데이터 일부
INSERT INTO artists (id, name) VALUES
(1, 'Carmen Johnson'),
(2, 'Lisa Fox'),
(3, 'Tammy Webb'),
(4, 'Amy Hancock'),
(5, 'Lindsay Mendoza');
albums(앨범)
- albums 테이블 구조
컬럼 | 타입 | 설명 |
id | INT | 순차적으로 부여된 정수형 아이디(Primary Key) |
title | VARCHAR | 앨범 제목 |
release_date | DATE | 앨범 발매일 |
artist_id | INT | 아티스트 ID(artist 테이블의 id 컬럼과 참조 관계) |
- albums 테이블 생성하기
CREATE TABLE IF NOT EXISTS `albums` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`title` VARCHAR(250) NOT NULL,
`release_date` DATETIME NOT NULL,
`artist_id` INT NOT NULL);
- 생성된 albums 테이블에 데이터 추가하기
# albums 데이터 일부
INSERT INTO albums (id, title, release_date, artist_id) VALUES
(1, 'She still', '2016-02-01', 123),
(2, 'Collection include evidence', '2021-01-08', 101),
(3, 'American throughout themselves', '2022-09-06', 26),
(4, 'Leg feel', '2018-02-28', 18),
(5, 'Red commercial', '2020-03-11', 93);
- foreign key 설정하기
- foreign key : artist_id 열 ➡️ reference : artists 테이블의 id 열
ALTER TABLE `music`.`albums`
ADD INDEX `pk_artist_id_idx` (`artist_id` ASC) VISIBLE;
;
ALTER TABLE `music`.`albums`
ADD CONSTRAINT `pk_artist_id`
FOREIGN KEY (`artist_id`)
REFERENCES `music`.`artists` (`id`)
ON DELETE RESTRICT
ON UPDATE CASCADE;
songs(곡)
- songs 테이블 구조
컬럼 | 타입 | 설명 |
id | INT | 순차적으로 부여된 정수형 아이디(Primary Key) |
title | VARCHAR | 곡 제목 |
duration_seconds | INT | 곡 재생 시간 (초) |
album_id | INT | 앨범 ID(albums 테이블의 id 컬럼과 참조 관계) |
- songs 테이블 생성하기
CREATE TABLE IF NOT EXISTS `songs` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`title` VARCHAR(250) NOT NULL,
`duration_seconds` INT NOT NULL,
`album_id` INT NOT NULL);
- songs 테이블에 데이터 추가하기
# songs 데이터 일부
INSERT INTO songs (id, title, duration_seconds, album_id) VALUES
(1, 'Court', 338, 164),
(2, 'Side relationship', 406, 362),
(3, 'Training include', 174, 228),
(4, 'Hour', 182, 372),
(5, 'Then morning', 155, 299);
- foreign key 설정하기
- foreign key : album_id 열 ➡️ reference : albums 테이블의 id 열
ALTER TABLE `music`.`songs`
ADD INDEX `pk_album_id_idx` (`album_id` ASC) VISIBLE;
;
ALTER TABLE `music`.`songs`
ADD CONSTRAINT `pk_album_id`
FOREIGN KEY (`album_id`)
REFERENCES `music`.`albums` (`id`)
ON DELETE RESTRICT
ON UPDATE CASCADE;
users(사용자)
- users 테이블 구조
컬럼 | 타입 | 설명 |
id | INT | 순차적으로 부여된 정수형 아이디(Primary Key) |
username | VARCHAR | 사용자 계정명 |
created_at | DATETIME | 가입한 날짜 및 시간 |
- users 테이블 생성하기
CREATE TABLE IF NOT EXISTS `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(30) NOT NULL,
`created_at` DATETIME NOT NULL);
- 생성된 users 테이블에 데이터 추가하기
# users 데이터 일부
INSERT INTO users (id, username, created_at) VALUES
(1, 'ljones', '2020-02-16 08:51:25'),
(2, 'alexanderbaker', '2020-03-05 06:16:03'),
(3, 'michaelacosta', '2020-03-23 19:44:23'),
(4, 'joshuadaniel', '2020-03-25 21:09:42'),
(5, 'rramirez', '2020-05-06 04:26:16');
history(곡 재생 기록)
- history 테이블 구조
컬럼 | 타입 | 설명 |
id | INT | 순차적으로 부여된 정수형 아이디(Primary Key) |
played_at | DATETIME | 사용자가 곡을 재생한 날짜 및 시간 |
user_id | INT | 사용자 ID(users 테이블의 id 컬럼과 참조 관계) |
song_id | INT | 곡 ID(songs 테이블의 id 컬럼과 참조 관계) |
- history 테이블 생성하기
CREATE TABLE IF NOT EXISTS `history` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`played_at` DATETIME NOT NULL,
`user_id` INT NULL,
`song_id` INT NULL);
- history 테이블에 데이터 추가하기
# history 데이터 일부
INSERT INTO history (id, played_at, user_id, song_id) VALUES
(1, '2024-04-07 21:08:53', 12, 1611),
(2, '2024-11-26 09:28:54', 52, 4942),
(3, '2024-09-24 18:25:30', 68, 1155),
(4, '2024-06-10 07:26:45', 57, 1946),
(5, '2024-11-29 22:36:21', 84, 1156);
- foreign key 설정하기
- foreign key : user_id 열➡️reference : users 테이블의 id 열
- foreign key : song_id 열➡️reference : songs 테이블의 id
- 사용자나, 곡에 대한 정보가 업데이트 될 때는 함께 history 테이블도 업데이트 되지만, 삭제될 때는 history에는 그대로 남겨두기
ALTER TABLE `music`.`history`
CHANGE COLUMN `user_id` `user_id` INT NULL ,
CHANGE COLUMN `song_id` `song_id` INT NULL ,
ADD INDEX `pk_user_id_idx` (`user_id` ASC) VISIBLE,
ADD INDEX `pk_song_id_idx` (`song_id` ASC) VISIBLE;
;
ALTER TABLE `music`.`history`
ADD CONSTRAINT `pk_user_id`
FOREIGN KEY (`user_id`)
REFERENCES `music`.`users` (`id`)
ON DELETE SET NULL
ON UPDATE CASCADE,
ADD CONSTRAINT `pk_song_id`
FOREIGN KEY (`song_id`)
REFERENCES `music`.`songs` (`id`)
ON DELETE SET NULL
ON UPDATE CASCADE;
728x90
반응형