상세 컨텐츠

본문 제목

2025.01.06 월 요 일...........

Data School

by 넨! 2025. 1. 7. 09:06

본문

SQL은 구조화된 쿼리 언어이며, 데이터에 쿼리를 줘서 원하는 데이터를 불러오게 하는 것

having은 그룹화하고 나서, where은 그룹화하기 전

 

서브쿼리

: SQL문 안에 포함되어 있는 또 다른 SQL

select customer_id, first_name, last_name,
	(select count(rental_id)
    from sakila.rental
    where customer_id = c.customer_id) as rental_count
from sakila.customer c
where customer_id = 5;
select c.customer_id, c.first_name, c.last_name,
	count(r.rental_id) as rental_count
from sakila.customer c
left join sakila.rental r on c.customer_id = r.customer_id
where c.customer_id = 5
group by c.customer_id, c.first_name, c.last_name;
select customer_id, first_name, last_name
from sakila.customer
where customer_id in (
	select customer_id
    from sakila.rental
    group by customer_id
    having count(rental_id) >=19
    )
order by customer_id;
 SELECT 
    c.customer_id, 
    c.first_name, 
    c.last_name, 
    COUNT(r.rental_id) AS rental_count
FROM 
    customer c
JOIN 
    rental r ON c.customer_id = r.customer_id
GROUP BY 
    c.customer_id, 
    c.first_name, 
    c.last_name
HAVING 
    rental_count > (
        SELECT AVG(rental_count) 
        FROM (
            SELECT COUNT(rental_id) AS rental_count
            FROM rental
            GROUP BY customer_id
        ) avg_rentals
    )
ORDER BY 
    rental_count DESC;

데이터 모델

모델링의 이해

1. 모델링의 정의

  • 복잡한 '현실 세계'를 단순화시켜 표현하는 것
  • 현실 세계를 데이터베이스에서 표현하기 위한 추상화 과정
  • Webster 사전: a hypothetical or stylized representation
    • 가설적 일정 양식에 맞춘 표현
    • 어떤 것에 대한 예비 표현으로, 그로부터 최종대상이 구축되도록 하는 계획으로써 기여하는 것
  • 모델이란, 사물 또는 사건에 관한 양상(Aspect)이나 관점(Perspective)을 연관된 사람이나 그룹을 위하여 명확하게 하는 것
  • 모델이란, 현실 세계의 추상화된 반영이다.
  • 정보시스템 구축의 대상이 되는 업무 내용을 분석하고 이해하고 약속된 표기법에 의해 표현하는 것을 의미한다.
  • 분석된 모델을 가지고 실제 데이터베이스를 생성하여 개발 및 데이터 관리에 사용.
  • 데이터를 추상화한 데이터 모델은 데이터베이스의 골격을 이해하고 그 이해를 바탕으로 SQL문장을 기능과 성능적인 측면에서 효율적으로 작성할 수 있기 때문에, 데이터 모델링은 데이터베이스 설계의 핵심 과정이다.

 

2. 모델링의 이해

추상화
(Abstraction)
현실 세계를 일정한 형식에 맞추어 양식, 다양한 현상을 일정한 양식의 표기법에 의해 표현
단순화
(Simplification)
복잡한 현실세계를 약속된 규약에 의해 제한된 표기법이나 언어로 표현하여 쉽게 이해할 수 있도록 함
명확화
(Clarity)
누구나 이해하기 쉽게 하기 위해 대상에 대한 애매모호함을 제거하고 정확하게 현상을 기술

 

3. 데이터 모델링의 3가지 관점

데이터 관점
(What, "Data")
- 업무가 어떤 데이터와 관련이 있는지
- 데이터 간의 관계는 무엇인지
프로세스 관점
(How, "Process")
- 실제로 하고 있는 일은 무엇인지
- 무엇을 해야 하는지
데이터와 프로세스의 상관 관점
(Interaction, 상호 작용)
- 업무가 처리하는 일의 방법에 따라 데이터는 어떻게 영향을 받고 있는지

 

4. 데이터 모델링의 중요성 및 유의점

  1. 파급효과 (Leverage) : 진행 단계가 높아질수록 데이터 구조 변경에 따른 부정적 파급효과가 크므로 데이터 설계가 매우 중요
  2. 복잡한 정보 요구사항의 간결한 표현 (Conciseness)
  3. 데이터 품질(Data Quality)

**데이터 모델링 유의점

중복
(Duplication)
DB가 여러 위치에 동일한 정보를 저장하는 잘못을 하지 않도록 함.
비유연성
(Inflexibility)
데이터의 정의를 데이터 사용 프로세스와 분리해 작은 변화가 DB에 큰 변화를 일으킬 가능성 줄이기
비일관성
(Inconsistency)
데이터 간의 상호 연관관계에 대해 명확하게 정의하여 일관성있게 데이터를 유지되도록 함.
e.g. 신용 상태에 대한 갱신 없이 고객의 납부 이력 정보를 갱신

 

 

 

use my_database;

-- 메모리 엔진 테이블 생성.
create table hash_example(
	id INT NOT NULL,
    value VARCHAR(100),
    primary key(id)
) engine = memory;

insert into hash_example (id, value) values
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie'),
(4, 'David'),
(5, 'Eve');

-- 해시 인덱스 확인
show index from hash_example;

-- 단일 키 조회.
select * from hash_example where id = 3;

-- 해시 충돌
create table hash_collision_example(
	id INT NOT NULL,
    value varchar(100),
    hash_value INT NOT NULL,
    primary key (hash_value)
);

INSERT INTO hash_collision_example (id, value, hash_value)
values
(1, "Alice", MOD(1,3)),
(2, "Bob", MOD(2,3)),
(3, "Charlie", MOD(3,3)),
(4, "David", MOD(4,3)), -- 충돌 발생
(5, "Eve", MOD(5,3)); -- 충돌 발생
-- 충돌났을 때 해결하는 방법은 비트리!

 

 

이진 탐색 트리

create database binary_tree_db;
use binary_tree_db;

create table BinaryTree(
	id INT AUTO_INCREMENT primary key, -- 노드의 고유 ID
    value int not null, -- 노드의 값
    left_child int default null, -- 왼쪽 자식 노드 ID
    right_child int default null -- 오른쪽 자식 노드 ID
);

-- 데이터 삽입하기
INSERT INTO BinaryTree(value) values (10);

-- 루트의 왼쪽 자식 추가
INSERT INTO BinaryTree(value) values (5);
UPDATE BinaryTree Set left_child = last_insert_id() where id=1;

-- 루트의 오른쪽 자식 추가
INSERT INTO BinaryTree(value) values (15);
UPDATE BinaryTree set right_child = last_insert_id() where id = 1;

select * from BinaryTree;

 

 

 

 


파이썬

 

 

 

'Data School' 카테고리의 다른 글

2025.01.10 TGIF~  (0) 2025.01.10
2025.01.07 화요일 꺅!  (0) 2025.01.07
2025.01.03 금요일!!!!4일차  (1) 2025.01.03
25.01.02 목요일 3회차........................  (0) 2025.01.03
2024.12.31 화요일 2일차악!  (2) 2024.12.31

관련글 더보기