sakila나 world 기반으로 sql 튜토리얼을 진행해줘.
1. 쿼리문 단어 하나 설명
2. 샘플 데이터 기반 문제 출제
3. (내가 답을 말하면) 그것에 대한 채점과 정답 해설
이런 식으로 진행해줘.
프조웨그집해셀
1. FROM / JOIN → 테이블/결합
2. WHERE → 행 단위 필터링
3. GROUP BY → 같은 키 값을 가진 행들을 그룹으로 묶음
4. 집계 함수 (COUNT, SUM, AVG …) → 그룹별로 계산
5. HAVING → 그룹 단위 조건 필터링
6. SELECT → 결과 컬럼 출력
SELECT colum1, column2, ...
FROM table_name;
*를 쓰면 모든 컬럼을 가져옴SELECT column1, column2
FROM table_name
WHERE 조건식;
SELECT column1, column2
FROM table_name
ORDER BY column1 ASC; -- 오름차순 (기본값)
SELECT ...
ORDER BY column1 DESC; -- 내림차순
SELECT COUNT(*) FROM table_name;
SELECT column, COUNT(*)
FROM table_name
GROUP BY column;
SELECT column1, avg(column2)
FROM table_name
GROUP BY column1
HAVING avg(column2) > 3.0;
WHERE renatl_rate > (
SELECT AVG(rental_rate) FROM film
);
FROM (
SELECT rating, AVG(rental_rate) AS avg_rate
FROM film
GROUP BY rating
) sub
WHERE sub.avg_rate > 3.0;
SELECT title, (SELECT AVG(rental_rate) FROM film) AS avg_rate FROM film;
예제 1
sakila.customer 테이블과 sakila.payment 테이블을 활용해,
총 결제 금액이 모든 고객의 평균 결제 금액보다 많은 고객의 ID와 총 결제 금액을 조회
SELECT customer_id, SUM(amount) AS total_pay
FROM sakila.payment
GROUP BY customer_id
HAVING SUM(amount) > (
SELECT AVG(total_per_cust)
FROM (
SELECT customer_id, SUM(amount) AS total_per_cust
FROM sakila.payment
GROUP BY customer_id
) t
);
예제 2
sakila.film 테이블에서
대여료(rental_rate)가 가장 비싼 영화들의 제목(title)과 요금(rental_rate) 을 조회
SELECT title, rental_rate
FROM sakila.film
WHERE rental_rate = (SELECT MAX(rental_rate) FROM sakila.film);
예제 3
sakila.actor 테이블에서
이름이 ‘NICK’인 배우와 같은 성(last_name)을 가진 다른 배우들을 모두 조회
SELECT *
FROM sakila.actor
WHERE last_name IN (SELECT last_name FROM sakila.actor WHERE first_name = 'NICK')
AND first_name <> 'NICK';
두 개 이상의 테이블을 공통된 키(Primary Key ↔ Foreign Key 관계)를 기준으로 연결해서 데이터를 합치는 것
SELECT A.col1, B.col2
from TableA A
join TableB B
on A.key = B.key;
예제 1
sakila에서
특정 배우(예: "PENELOPE GUINESS")가 출연한 영화 제목만 조회
select f.title
from sakila.actor as a
inner join sakila.film_actor as fa
on a.actor_id = fa.actor_id
inner join sakila.film as f
on fa.film_id = f.film_id
where a.first_name = "PENELOPE" and a.last_name = "GUINESS";
예제 2
배우별 출연 영화 개수 집계
select a.first_name, a.last_name, count(f.film_id) as film_count
from sakila.actor as a
inner join sakila.film_actor as fa
on a.actor_id = fa.actor_id
inner join sakila.film as f
on fa.film_id = f.film_id
group by a.actor_id;
예제 3
출연 영화가 20편 이상인 배우만 조회
select a.actor_id, count(*) as film_count
from sakila.actor as a
join sakila.film_actor as fa on a.actor_id = fa.actor_id
group by a.actor_id
having count(*) >= 20;
void fibo(int n)
{
int a = 0, b = 1;
for(int i=1; i<=n; i++){
cout << b << ' ';
int c = a + b;
a = b;
b = c;
}
}
(반복문)
int fibo(int n, vector<int> &res)
{
if(n <= 2)
{
res[n] = 1;
return 1;
}
if(res[n] != 0) return res[n];
res[n] = fibo(n-1, res) + fibo(n-2, res);
return res[n];
}
(재귀)
지역성 : 프로그램이 메모리를 사용할 때 특정 부분을 집중적으로 사용하는 경향을 의미.
시간적 지역성
공간적 지역성
캐시 메모리는 지역성 원리를 활용하여 자주 사용되거나 연속적으로 사용될 가능성이 높은 메모리를 미리 캐시에 저장.
이로 인해 CPU가 필요한 데이터를 캐시에서 빠르게 찾을 수 있음.
프로세스
쓰레드