----
Name
----
BTS답 : select name
from SQL_Artists sa
--------------------------
Genre_ID | SQL_Genres.Name
---------------------------
1 | BTS답 :
select genre_ID
from SQL_Genres sg
------------
Title | Year
------------
Dynamite | 2023 답--------------
Title | Length
--------------
Dynamite | 250 답----
Name
----
BTS 답-------------------------------------
Genre_ID | SQL_Genres.Name | COUNT(*)
-------------------------------------
1 | BTS | 값select st.Genre_ID,
sg.Name as 'SQL_Genres.Name',
count()
from SQL_Tracks st
INNER JOIN SQL_Genres sg on st.Genre_ID = sg.Genre_ID
group by st.Genre_ID;
근데 저 카운트아스타가 이해가안됨 왜 아스타를 쓰는지
1. 아스타를 쓰는 이유는 장르별 row값을 새는거 널이 있는지는 중요치않음
2. 여기서 null값은 장르가 미지정된 곡
3. 그럼 장르아이디 값이 널인지 부터 찾아보자
4. SELECT COUNT() AS null_genre_count
FROM SQL_Tracks
WHERE Genre_ID IS NULL;
결과 0 그럼 널 값은 없으므로
카운트로 새도괜찮음.
---------------------------------------
Artist_ID | SQL_Artists.Name | COUNT(*)
---------------------------------------
1 | BTS | 값select sat.Artist_ID, sat.Name as 'SQL_artists.Name' , count(*)
from SQL_Albums sab
INNER JOIN SQL_Artists sat on sab.Artist_ID = sat.artist_ID
group by sat.Artist_id, sat.Name;
--------
COUNT(*)
--------
값select count(Year)
from SQL_Albums
where Year<2020
group by Year
;
-----
Title
-----
Dynamiteselect Title
from SQL_Tracks st
where Title Like'%1%';
10. 리뷰 평점이 5점인 앨범 리뷰를 모두 조회하세요.
출력예시
-------------------------------------------------------------------------------
Reviewer_ID | SQL_Reviewers.Reviewer_ID | Album_ID | SQL_Albums.Title | Ranking
-------------------------------------------------------------------------------
101 | 101 | 202 | Dynamite | 5
select Reviewer_ID, Ranking,Album_ID
from SQL_Album_Reviews
where Ranking = 5;
11. 각 리뷰어가 작성한 리뷰 수를 조회하세요.
출력예시
--------------------------------------------------
Reviewer_ID | SQL_Reviewers.Reviewer_ID | COUNT(*)
--------------------------------------------------
101 | 101 | 값
select Reviewer_ID,count(*)
from SQL_Album_Reviews
group by Reviewer_ID
;
------------------------------------------
Album_ID | SQL_Albums.Title | AVG(Ranking)
------------------------------------------
202 | Dynamite | 5select Album_ID,
avg(Ranking)
from SQL_Album_Reviews
group by Album_ID
ORDER by album_ID
;
13. 각 트랙의 제목과 해당 장르명을 함께 조회하세요.
출력예시
----------------------------------
SQL_Tracks.Title | SQL_Genres.Name
----------------------------------
Dynamite | BTS
select st.Title as 'SQL_Tracks.Title',
sg.Name as 'SQL_GENRES.Name'
from SQL_Tracks st
INNER JOIN SQL_Genres sg on st.Genre_ID = sg.Genre_ID
;
--------------------------------------------------------------------
SQL_Albums.Album_ID | SQL_Albums.Title | COUNT(SQL_Tracks.Track_Num)
--------------------------------------------------------------------
202 | Dynamite | 3select
sa.Album_ID as 'SQL_albums.sa.Album_ID',
st.Title,
count(*)
from SQL_Albums sa
INNER JOIN SQL_Tracks st on sa.Album_ID = st.Album_ID
group by sa.album_ID;
15. 트랙 수가 5개 이상인 앨범을 조회하세요.
출력예시
--------------------------------------
SQL_Albums.Album_ID | SQL_Albums.Title
--------------------------------------
202 | Dynamite
select
sa.Album_ID as 'SQL_albums.Album_ID',
st.Title as 'SQL_Albums.Title',
count() as 'COUNT(SQL_Tracks.Track_Num)'
from SQL_Albums sa
INNER JOIN SQL_Tracks st on sa.Album_ID = st.Album_ID
group by sa.album_ID
having COUNT() >= 5
;
-------------------------
SQL_Album_Reviews.Comment
-------------------------
Amazing album!select comment as 'SQL_Album_Reviews.Comment'
from SQL_Album_Reviews
where comment is not null;
--------------------------------------------------------------------------------
SQL_Album_Reviews.Reviewer_ID | SQL_Reviewers.Reviewer_ID | SQL_Album_Reviews.Album_ID | SQL_Albums.Title | COALESCE(SQL_Album_Reviews.Ranking, 0)
--------------------------------------------------------------------------------
101 | 101 | 202 | Dynamite | 5select sa.Reviewer_ID as 'SQL_Album_Reviews.Reviewer_ID',
sa.Album_ID as 'SQL_Album_Reviews.Album_ID',
sa.Comment,
st.title as 'QL_Albums.Title',
case
when sa.Ranking is null then '0'
else sa.ranking
end as RAnking
from SQL_Album_Reviews sa
INNER JOIN SQL_Tracks st on sa.album_ID = st.Album_ID
--------------------------------------------------------------------------------
SQL_Album_Reviews.Reviewer_ID | SQL_Reviewers.Reviewer_ID | SQL_Album_Reviews.Review_Date
--------------------------------------------------------------------------------
101 | 101 | 2024-05-21select *
from SQL_Album_Reviews
where Year(Review_Date) = YEAR(CURDATE());
--------------------------------------------------------------------------------
SQL_Album_Reviews.Reviewer_ID | SQL_Reviewers.Reviewer_ID | SQL_Album_Reviews.Album_ID | SQL_Albums.Title
--------------------------------------------------------------------------------
101 | 101 | 202 | Dynamite select *--------------------------------------
SQL_Albums.Album_ID | SQL_Albums.Title
--------------------------------------
202 | Dynamiteselect sa.Album_ID as 'SQL_Albums.Album_ID',
sa.Title as 'SQL_Albums.Title'
from SQL_Albums sa
LEFT JOIN SQL_Album_Reviews sr on sa.Album_ID = sr.Album_ID
where sr.Album_ID IS NULL;
--------------------------------------------------------
SQL_Album_Reviews.Album_ID | SQL_Albums.Title | COUNT(*)
--------------------------------------------------------
202 | Dynamite | 값select ar.album_ID as'SQL_Album_Reviews.Album_ID',
sa.Title as 'SQL_Albums.Title',
COUNT()
from SQL_Album_Reviews ar
Inner JOIN SQL_Albums sa on ar.Album_ID = sa.Album_ID
group by ar.Album_ID
order by count() DESC
limit 1
;
--------------------------------------------------------------------------------
SQL_Artists.Artist_ID | SQL_Artists.Name | COUNT(SQL_Albums.Album_ID) | SQL_Albums.Title
--------------------------------------------------------------------------------
1 | BTS | 202 | Dynamiteselect sa.artist_ID as 'SQL_Artists.Artist_ID',
name as 'SQL_Artists.Name',
count() as 'COUNT(SQL_Albums.Album_ID)'
from SQL_Albums sa
INNER JOIN SQL_Artists ad on ad.artist_ID = sa.artist_ID
group by ad.artist_ID
order by count() DESC
limit 1;
--------------------------------------------------------------
SQL_Genres.Genre_ID | SQL_Genres.Name | AVG(SQL_Tracks.Length)
--------------------------------------------------------------
1 | BTS | 250select st.genre_id as 'SQL_Genres.Genre_ID',
Name as 'SQL_Genres.Name',
avg(length) as 'AVG(SQL_Tracks.Length)'
from SQL_Tracks st
inner join SQL_Genres sg on st.Genre_ID = sg.Genre_ID
group by st.genre_id
order by avg(length)DESC
limit 1
;
-----------------------------------------------------------------------
SQL_Albums.Album_ID | SQL_Albums.Title | AVG(SQL_Album_Reviews.Ranking)
-----------------------------------------------------------------------
202 | Dynamite | 5select ar.Album_ID as 'SQL_Albums.Album_ID',
sa.Title as 'SQL_Albums.Title',
AVG(Ranking) as 'SQL_Album_Reviews.Ranking'
from SQL_Album_Reviews ar
inner join SQL_Albums sa on ar.album_ID = sa.album_ID
group by ar.Album_ID,sa.title
having AVG(Ranking) >= 4.5
;
---------------------------------------------------------------
SQL_Artists.Artist_ID | SQL_Artists.Name | AVG(SQL_Albums.Year)
---------------------------------------------------------------
1 | BTS | 2023select sa.Artist_ID as 'SQL_ARTISTS.ARTIST_ID',
sat.Name as 'SQL_Artists.Name',
AVG(sa.Year) as 'SQL_Albums.Year'
from SQL_Albums sa
INNER JOIN SQL_Artists sat on sa.Artist_ID=sat.Artist_ID
group by sa.Artist_ID
--------------------------------------------------------------
SQL_Tracks.Genre_ID | SQL_Genres.Name | SUM(SQL_Tracks.Length)
--------------------------------------------------------------
1 | BTS | 250select st.Genre_ID as 'SQL_Tracks.Genre_ID',---------------------------------------------------------------
SQL_Albums.Album_ID | SQL_Albums.Title | AVG(SQL_Tracks.Length)
---------------------------------------------------------------
202 | Dynamite | 250select st.Album_ID as 'SQL_Albums.Album_ID',
st.Title as 'SQL_Albums.Title',
avg(length) as 'AVG(SQL_Tracks.Length)'
from SQL_Tracks st
group by st.Album_ID;
--------------------------------------------------------------------------------
SQL_Album_Reviews.Reviewer_ID | SQL_Reviewers.Reviewer_ID | SQL_Albums.Album_ID | SQL_Albums.Title | SUM(SQL_Album_Reviews.Ranking)
--------------------------------------------------------------------------------
101 | 101 | 202 | Dynamite | 5 select ar.Reviewer_ID as 'SQL_Album_Reviews.Reviewer_ID' ,---------------------------------------------
SQL_Album_Reviews.Album_ID | SQL_Albums.Title
---------------------------------------------
202 | Dynamite #29. 2020년~2025년 사이 작성된 리뷰 코멘트 수가 2개 이상인 앨범을 조회하세요.SELECT a.Album_ID, a.Title
FROM (
SELECT a.Album_ID, a.Title,
count(r.comment) as cnt_c
FROM SQL_Album_Reviews r inner join SQL_Albums a on r.Album_ID = a.Album_ID
WHERE r.Review_Date between '2020-01-01' and '2025-12-31'
GROUP BY 1, 2
HAVING cnt_c >= 2
) a
30. 각 아티스트의 앨범 수와 총 트랙 수를 함께 조회하세요.
출력예시
--------------------------------------------------------------------------------
SQL_Artists.Artist_ID | SQL_Artists.Name | COUNT(DISTINCT SQL_Albums.Album_ID) | SQL_Albums.Title | COUNT(SQL_Tracks.Track_Num)
--------------------------------------------------------------------------------
1 | BTS | 202 | Dynamite | 3
select sar.artist_ID as 'sql_artists.Artist_ID',
sar.Name as 'SQL_Artists.Name',
count(DISTINCT st.Album_ID) as 'SQL_Albums.Album_ID',
st.TITLE as 'SQL_Albums.Title',
COUNT(Track_Num) as 'COUNT(SQL_Tracks.Track_Num)'
from SQL_Artists sar
join SQL_Albums sa on sar.Artist_ID = sa.Artist_ID
join SQL_Tracks st on st.Album_ID = sa.Album_ID
group by sar.artist_ID, sar.Name, st.title
ex) having AVG(Ranking) >= 4.5