1. SQL이란?
Structured Query Langage. 관계형 데이터베이스에 "이러이러한 데이터를 줘"라고 날리는 일종의 '질의문'.
*관계형 데이터베이스 : 구조화된 데이터를 의미하는 것으로 테이블이 서로 관계성을 가질 수 있다 통상 .json 파일, 문자열을 데이터로 가진다.
2. 활용 예시
* 사용한 데이터는 chinook.db (첨부)
- Customer_Package 테이블을 생성합니다
CREATE TABLE Customer_Package(
cp_id INTEGER PRIMARY KEY NOT NULL,
customer_id INTEGER,
package_id INTEGER,
FOREIGN KEY (customer_id) REFERENCES Customer(customer_id),
FOREIGN KEY (package_id) REFERENCES Package(package_id)
);
- Title 컬럼의 유니크한 값들을 출력하시오
SELECT DISTINCT Title
FROM albums;
- AlbumId 가 31 인 앨범의 Title 을 구합니다
SELECT Title
FROM albums
WHERE AlbumId = 31;
- 아티스트 이름에 'the' 가 들어간 앨범의 AlbumId를 전부 조회합니다
SELECT albums.AlbumId
FROM albums
JOIN artists on artists.ArtistId = albums.ArtistId
WHERE artists.Name LIKE '%the%';
- invoices 테이블에서 BillingCity 가 Stuttgart, Oslo, Redmond 인 InvoiceId 를 InvoiceId 에 따라 오름차순으로 전부 조회합니다
SELECT i.InvoiceId
FROM invoices i
WHERE i.BillingCity IN ('Stuttgart', 'Oslo', 'Redmond')
ORDER BY i.InvoiceId;
-tracks 테이블에서 트랙 Name 이 'The' 로 시작하는 trackId들을 전부 조회합니다
SELECT TrackId
FROM tracks
WHERE Name LIKE 'The%';
- customers 테이블에서 Email 이 'gmail.com' 인 CustomerId를 전부 조회합니다
SELECT CustomerId
FROM customers c
WHERE Email LIKE '%@gmail.com';
- CustomerId 가 29, 30, 63 인 고객들의 주문금액이 $1.00 이상 $3.00 이하인 주문 (invoice)의 Id를 전부 조회합니다
SELECT i.InvoiceId
FROM invoices i
WHERE i.CustomerId IN (29,30,63)
AND i.Total BETWEEN 1 AND 3;
- 장르 (genre) 가 'Soundtrack' 인 트랙 중 트랙의 길이 (Milliseconds) 가 300,000 이상 400,000 이하인 트랙들의 Id 들을 전부 조회합니다
SELECT t.TrackId
FROM tracks t
JOIN genres g ON t.GenreId = g.GenreId
WHERE g.Name = 'Soundtrack'
AND t.Milliseconds BETWEEN 300000 AND 400000;
- 각 나라 (country) 별로 고객 (customer) 수를 구해봅니다
SELECT count(c.Country) as 'The_Num_of_customers_X_Country'
FROM customers c
GROUP BY c.Country;
- 총 구매한 비용이 가장 많은 고객 (customer) 5 명의 고객 (customer)의 CustomerId를 조회합니다
SELECT c.CustomerId
FROM customers c
JOIN invoices i ON c.CustomerId = i.CustomerId
GROUP BY i.CustomerId
ORDER BY SUM(i.Total) DESC
LIMIT 5;
- 각 장르 (genre) 마다 트랙을 구매한 고객의 id 의 수를 구해봅니다
SELECT g.Name as 'genre_name', COUNT(DISTINCT i.CustomerId) as 'The Number of customer_ID'
FROM tracks t
JOIN invoice_items ii ON t.TrackId = ii.TrackId
JOIN genres g ON t.GenreId = g.GenreId
JOIN invoices i ON ii.InvoiceId = i.InvoiceId
GROUP BY t.GenreId;
'Codestates AI 부트캠프 > 4. Data Engineering' 카테고리의 다른 글
[데이터 엔지니어링] 2-2. Crawling (1) | 2023.06.03 |
---|---|
[데이터 엔지니어링] 1-4 파이썬으로 DB 불러오기 (0) | 2023.05.26 |
[데이터 엔지니어링] 1-3 SQL(2) (0) | 2023.05.26 |
[데이터 엔지니어링] 1-1 (2) 터미널 / 가상환경 / Git & Github (0) | 2023.05.26 |
[데이터 엔지니어링] 1-1 (1) 개발 환경 구축 (0) | 2023.05.26 |