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. 모델링의 정의
2. 모델링의 이해
추상화 (Abstraction) |
현실 세계를 일정한 형식에 맞추어 양식, 다양한 현상을 일정한 양식의 표기법에 의해 표현 |
단순화 (Simplification) |
복잡한 현실세계를 약속된 규약에 의해 제한된 표기법이나 언어로 표현하여 쉽게 이해할 수 있도록 함 |
명확화 (Clarity) |
누구나 이해하기 쉽게 하기 위해 대상에 대한 애매모호함을 제거하고 정확하게 현상을 기술 |
3. 데이터 모델링의 3가지 관점
데이터 관점 (What, "Data") |
- 업무가 어떤 데이터와 관련이 있는지 - 데이터 간의 관계는 무엇인지 |
프로세스 관점 (How, "Process") |
- 실제로 하고 있는 일은 무엇인지 - 무엇을 해야 하는지 |
데이터와 프로세스의 상관 관점 (Interaction, 상호 작용) |
- 업무가 처리하는 일의 방법에 따라 데이터는 어떻게 영향을 받고 있는지 |
4. 데이터 모델링의 중요성 및 유의점
**데이터 모델링 유의점
중복 (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;
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 |