250826

凡愚·2025년 8월 26일

개발 일지

목록 보기
275/350

✅ 한 것들


  • SQL 공부
  • CS 공부


📊 SQL 공부

sakila나 world 기반으로 sql 튜토리얼을 진행해줘. 
1. 쿼리문 단어 하나 설명 
2. 샘플 데이터 기반 문제 출제 
3. (내가 답을 말하면) 그것에 대한 채점과 정답 해설 
이런 식으로 진행해줘.

실행 순서

프조웨그집해셀
1. FROM / JOIN → 테이블/결합
2. WHERE → 행 단위 필터링
3. GROUP BY → 같은 키 값을 가진 행들을 그룹으로 묶음
4. 집계 함수 (COUNT, SUM, AVG …) → 그룹별로 계산
5. HAVING → 그룹 단위 조건 필터링
6. SELECT → 결과 컬럼 출력

SELECT

SELECT colum1, column2, ...
FROM table_name;
  • 데이터베이스 테이블에서 원하는 컬럼(열)을 가져오는 기본 키워드
  • *를 쓰면 모든 컬럼을 가져옴

WHERE

SELECT  column1, column2
FROM table_name
WHERE 조건식;
  • 특정 조건을 만족하는 행만 가져옴

ORDER BY

SELECT column1, column2
FROM table_name
ORDER BY column1 ASC; -- 오름차순 (기본값)

SELECT ...
ORDER BY column1 DESC; -- 내림차순
  • 조회한 결과를 정렬

COUNT

SELECT COUNT(*) FROM table_name;
  • 행의 개수를 계산

GROUP BY

SELECT column, COUNT(*)
FROM table_name
GROUP BY column;
  • 특정 컬럼 기준으로 행들을 묶어서 집계

HAVING

SELECT column1, avg(column2)
FROM table_name
GROUP BY column1
HAVING avg(column2) > 3.0;

서브쿼리

  • 서브쿼리의 결과는 테이블. 테이블이 들어갈 수 있는 자리엔 서브쿼리가 들어갈 수 있다
  • sql 차원에서 결과가 칼럼 1개라면 칼럼 자리에도 서브쿼리가 들어갈 수 있게 해준 것
WHERE renatl_rate > (
	SELECT AVG(rental_rate) FROM film
);
  • where 절에서 조건으로 사용
FROM (
	SELECT rating, AVG(rental_rate) AS avg_rate
	FROM film
	GROUP BY rating
) sub
WHERE sub.avg_rate > 3.0;
  • from 절에서 집계 결과를 새로운 테이블로 만들어 활용
SELECT title, (SELECT AVG(rental_rate) FROM film) AS avg_rate FROM film;
  • SELECT 절에서 단일 값 반환

예제 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';

JOIN

두 개 이상의 테이블을 공통된 키(Primary Key ↔ Foreign Key 관계)를 기준으로 연결해서 데이터를 합치는 것

  • INNER JOIN : 두 테이블에서 조건이 일치하는 행만 반환
  • LEFT JOIN : 왼쪽 테이블은 모두 나오고, 오른쪽 테이블에선 매칭이 없으면 NULL
  • RIGHT JOIN : LEFT JOIN 반대
  • FULL OUTER JOIN : 양쪽 모두 전부 반환 (MySQL은 지원 안 하고 UNION으로 구현)
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;


📝 CS 공부


프로그래밍

피보나치 수열 구현

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가 필요한 데이터를 캐시에서 빠르게 찾을 수 있음.

프로세스와 쓰레드 차이

프로세스

  • 독립적으로 실행되는 프로그램 인스턴스
  • 주소 공간, 메모리 등의 자원을 독립적으로 갖는다
  • 프로세스 간 자원 공유는 IPC를 통해 이루어진다

쓰레드

  • 프로세스 내부의 실행 흐름 단위
  • 쓰레드끼리는 스택을 제외한 주소 공간과 메모리를 공유한다

0개의 댓글