| 단, 모든 컬럼을 PlaylistId 기준으로 내림차순으로 5개만 출력하세요.
SELECT *
FROM playlist_track A
ORDER BY A.PlaylistId DESC
LIMIT 5;
PlaylistId TrackId
---------- -------
18 597
17 3290
17 2096
17 2095
17 2094| 단, 모든 컬럼을 TrackId 기준으로 오름차순으로 5개만 출력하세요.
SELECT *
FROM tracks B
ORDER BY B.TrackId
LIMIT 5;
TrackId Name AlbumId MediaTypeId GenreId Composer
Milliseconds Bytes UnitPrice
------- --------------------------------------- ------- ----------- ------- ---------------
--------------------------------------------- ------------ -------- ---------
1 For Those About To Rock (We Salute You) 1 1 1 Angus Young, Ma
lcolm Young, Brian Johnson 343719 11170334 0.99
2 Balls to the Wall 2 2 1
342562 5510424 0.99
3 Fast As a Shark 3 2 1 F. Baltes, S. K
aufman, U. Dirkscneider & W. Hoffman 230619 3990994 0.99
4 Restless and Wild 3 2 1 F. Baltes, R.A.
Smith-Diesel, S. Kaufman, U. Dirkscneider & 252051 4331779 0.99
W. Hoffman
5 Princess of the Dawn 3 2 1 Deaffy & R.A. S
mith-Diesel 375418 6290521 0.99| 단, PlaylistId, Name 컬럼을 PlaylistId 기준으로 내림차순으로 10개만 출력하세요.
-- playlist_track, tracks 두 개의 테이블을 연결해주는 컬럼은
-- TrackId
SELECT A.PlaylistId, B.Name
FROM playlist_track A INNER JOIN tracks B
ON A.TrackId = B.TrackId
ORDER BY A.PlaylistId DESC
LIMIT 10;
PlaylistId Name
---------- -----------------------
18 Now's The Time
17 The Zoo
17 Flying High Again
17 Crazy Train
17 I Don't Know
17 Looks That Kill
17 Live To Win
17 Ace Of Spades
17 Creeping Death
17 For Whom The Bell Tolls| 단, PlaylistId, Name 컬럼을 Name 기준으로 내림차순으로 5개만 출력하세요.
SELECT A.PlaylistId, B.Name
FROM playlist_track A INNER JOIN tracks B
ON A.TrackId = B.TrackId
WHERE A.PlaylistId = 10
ORDER BY B.Name DESC
LIMIT 5;
PlaylistId Name
---------- ------------------------
10 Women's Appreciation
10 White Rabbit
10 Whatever the Case May Be
10 What Kate Did
10 War of the Gods, Pt. 2| 단, 행의 개수만 출력하세요.
SELECT COUNT(*)
FROM tracks A JOIN artists B
ON A.Composer = B.Name;
COUNT(*)
--------
402| 단, 행의 개수만 출력하세요.
SELECT COUNT(*)
FROM tracks A LEFT JOIN artists B
ON A.Composer = B.Name;
COUNT(*)
--------
3503INNER JOIN절은 테이블A와 테이블B 사이에 공통된(=일치하는) 행만 반환하는 한편, LEFT OUTER JOIN절은 동일한 값이 없는 데이터도 반환하기 때문이다. LEFT OUTER JOIN절로 인한 새로운 테이블 출력 과정을 도식화한다면, 기준이 되는 테이블(예시:테이블A)을 새로 출력하고자 하는 테이블의 왼편에 지정하고 테이블B를 그 오른편에 붙이는 식이다. 이 과정에서 테이블A 행의 개수보다 테이블B의 행의 개수가 더 길다면, 행의 길이가 더 긴 쪽에 맞춰서 새로운 테이블을 출력해 볼 수 있다(새로 생긴 값 없는 부분은 전부 NULL 처리). 따라서 문제5~6과 같이 INNER JOIN에서 출력된 행의 개수가 LEFT JOIN에서 출력된 행의 개수보다 적은 상황이 발생하기도 한다.
| 단, InvoiceLineId, InvoiceId 컬럼을 InvoiceId 기준으로 오름차순으로 5개만 출력하세요.
SELECT InvoiceLineId, InvoiceId
FROM invoice_items
ORDER BY InvoiceId
LIMIT 5;
InvoiceLineId InvoiceId
------------- ---------
1 1
2 1
3 2
4 2
5 2| 단, InvoiceId, CustomerId 컬럼을 InvoiceId 기준으로 오름차순으로 5개만 출력하세요.
SELECT InvoiceId, CustomerId
FROM invoices
ORDER BY InvoiceId
LIMIT 5;
InvoiceId CustomerId
--------- ----------
1 2
2 4
3 8
4 14
5 23| 단, InvoiceLineId, InvoiceId 컬럼을 InvoiceId 기준으로 내림차순으로 5개만 출력하세요.
SELECT A.InvoiceLineId, B.InvoiceId
FROM invoice_items A INNER JOIN invoices B
ON A.InvoiceId = B.InvoiceId
ORDER BY B.InvoiceId DESC
LIMIT 5;
InvoiceLineId InvoiceId
------------- ---------
2240 412
2226 411
2227 411
2228 411
2229 411| 단, InvoiceId, CustomerId 컬럼을 InvoiceId 기준으로 내림차순으로 5개만 출력하세요.
SELECT A.InvoiceId, B.CustomerId
FROM invoices A INNER JOIN customers B
ON A.CustomerId = B.CustomerId
ORDER BY A.InvoiceId DESC
LIMIT 5;
InvoiceId CustomerId
--------- ----------
412 58
411 44
410 35
409 29
408 25| 단, InvoiceLineId, InvoiceId, CustomerId 컬럼을 InvoiceId 기준으로 내림차순으로 5개만 출력하세요.
-- 내 쿼리
SELECT A.InvoiceLineId, B.InvoiceId, C.CustomerId
FROM invoice_items A
JOIN invoices B
ON A.InvoiceId = B.InvoiceId
JOIN customers C
ON B.CustomerId = C.CustomerId
ORDER BY B.InvoiceId DESC
LIMIT 5;
InvoiceLineId InvoiceId CustomerId
------------- --------- ----------
2240 412 58
2226 411 44
2227 411 44
2228 411 44
2229 411 44
-- 선생님 쿼리
-- 문제에서 [invoices_item(상품)을 "포함하는" invoice(송장)] 이라고 적어서
-- B.InvoiceId 가 아닌, A.InvoiceId 를 출력하는 것일까?
SELECT A.InvoiceLineId, A.InvoiceId, C.CustomerId
FROM invoice_items A
INNER JOIN invoices B
ON A.InvoiceId = B.InvoiceId
INNER JOIN customers C
ON B.CustomerId = C.CustomerId
ORDER BY A.InvoiceId DESC
LIMIT 5;
InvoiceLineId InvoiceId CustomerId
------------- --------- ----------
2240 412 58
2239 411 44
2238 411 44
2237 411 44
2236 411 44| 단, CustomerId와 개수 컬럼을 CustomerId 기준으로 오름차순으로 5개만 출력하세요.
-- invoice_items 와 customers 를 직접 연결하는 컬럼 이름은 없음
-- 따라서 이 둘을 모두 연결하는 invoices 테이블을 이용(서브쿼리로)
SELECT C.CustomerId, COUNT(*) FROM invoice_items A
INNER JOIN (
SELECT * FROM invoices A
INNER JOIN customers B
ON A.CustomerId = B.CustomerId
) C
ON A.InvoiceId = C.InvoiceId
GROUP BY C.CustomerId
ORDER BY C.CustomerId ASC
LIMIT 5;
CustomerId COUNT(*)
---------- --------
1 38
2 38
3 38
4 38
5 38